Hubungkan host kode
Control Center bekerja dengan tiga host kode, yang disebut forge di seluruh aplikasi: GitHub, GitLab, dan Bitbucket Cloud. Tidak ada yang menjadi default. Hubungkan satu dan semuanya berfungsi; hubungkan beberapa dan satu ruang kerja dapat memuat repo dari semuanya sekaligus.
Forge adalah properti setiap repo, dibaca dari remote origin-nya saat Anda mendaftarkannya. Anda tidak pernah memilihnya, dan tidak ada pengaturan per ruang kerja yang bisa salah.
Hubungkan forge
Bagian berjudul “Hubungkan forge”- Buka Pengaturan → Ruang kerja → Profil & identitas (
/settings/workspace/profile). - Temukan kartu Hosting kode. Setiap forge yang didukung tercantum, terhubung atau tidak.
- Tekan Masuk dengan … jika barisnya menyediakannya, atau Tambah token lalu tempelkan salah satu.
Masuk muncul untuk forge yang aplikasinya sudah terdaftar di server Anda — saat ini yaitu GitHub, melalui device flow (lihat Buat GitHub App). Selebihnya adalah token yang ditempel, yaitu pilihan yang jujur alih-alih tombol yang tidak dapat menyelesaikan prosesnya.
Apa pun caranya, kredensial itu milik Anda dan berada di server, dikunci berdasarkan id pengguna Anda: tidak ada token yang disimpan di mesin tempat Anda mengetiknya, setiap perangkat tempat Anda masuk memakai token yang sama, dan anggota lain tidak dapat membacanya. Kredensial berlaku pada permintaan berikutnya — tidak ada yang perlu dimulai ulang, dan memutuskan koneksi langsung menghentikan pengirimannya.
Setiap baris memberi tahu dari mana kredensialnya berasal, karena itulah perbedaan antara “token saya tidak berfungsi” dan “token lain yang menjawab”:
| Subjudul | Arti |
|---|---|
Masuk sebagai octocat |
Kredensial Anda sendiri yang dipakai |
Masuk sebagai octocat · lewat aplikasi server ini |
Identitas aplikasi server yang menjawab — Anda belum masuk |
Masuk sebagai octocat · dari environment |
Variabel environment server yang menjawab, bukan kredensial Anda |
Tidak terhubung |
Anda tidak punya kredensial untuk forge ini |
Token apa yang dibutuhkan setiap forge
Bagian berjudul “Token apa yang dibutuhkan setiap forge”| Forge | Token | Tempat membuatnya |
|---|---|---|
| GitHub | Classic: repo and read:org. Fine-grained: Contents + Pull requests (read/write), Checks + Actions (read) |
github.com → Settings → Developer settings → Tokens |
| GitLab | Token akses pribadi dengan api |
gitlab.com → User settings → Access tokens |
| Bitbucket | Token API Atlassian, plus email akun Anda | id.atlassian.com → Security → API tokens |
Bitbucket mengautentikasi dengan email akun sebagai nama pengguna dan token sebagai kata sandi. Setel BITBUCKET_EMAIL di environment server agar ia tahu email mana yang dipasangkan dengan token itu.
Atau gunakan environment
Bagian berjudul “Atau gunakan environment”Untuk instalasi headless atau CI, server membaca ini:
- GitHub —
GITHUB_TOKEN, laluGH_TOKEN - GitLab —
GITLAB_TOKEN, laluCI_JOB_TOKEN - Bitbucket —
BITBUCKET_API_TOKEN, laluBITBUCKET_TOKEN(denganBITBUCKET_EMAIL)
Ini adalah kredensial server, bukan milik Anda, dan perbedaannya krusial: permintaan yang dibuat atas nama Anda memakai kredensial Anda dan tidak yang lain, sehingga environment tidak pernah diam-diam menggantikan Anda. Pekerjaan tanpa manusia di baliknya — webhook, polling PR, sinkronisasi tiket — menyelesaikan identitas aplikasi server terlebih dahulu, lalu kredensial pemilik server, lalu environment. Urutannya tetap sehingga “saya sudah masuk dan tidak ada yang berubah” tidak pernah menjadi hasil yang didukung.
Anda adalah orang yang berbeda di setiap forge
Bagian berjudul “Anda adalah orang yang berbeda di setiap forge”Manusia yang sama adalah octocat di GitHub dan seseorang yang sama sekali berbeda di GitLab. Control Center menyelesaikan identitas Anda per forge dan memakai yang tepat untuk setiap repo, dan itulah yang membuat “perlu tinjauan saya”, “dibuat oleh saya”, serta “Anda menyetujui ini” benar di ruang kerja campuran.
Jika identitas sebuah forge belum diselesaikan, repo-nya tidak menyumbang apa pun ke kotak masuk alih-alih mencocokkan semuanya. Kotak masuk menyatakannya alih-alih mengklaim Anda sudah menangani semuanya.
Satu kotak masuk untuk semua forge
Bagian berjudul “Satu kotak masuk untuk semua forge”Kotak masuk dan antrean PR menyebar ke setiap forge yang ada di ruang kerja dan menggabungkan hasilnya menjadi satu aliran — pull request GitHub dan pull request Bitbucket berdampingan, diurutkan berdasarkan waktu alih-alih dikelompokkan menurut vendor.
Kegagalan bersifat terisolasi. Forge yang sedang down, terkena batas laju, atau tidak terhubung tidak menyumbang apa pun dan membiarkan yang lain tidak tersentuh; ia tidak pernah mengosongkan seluruh kotak masuk. Repo-nya sendiri tetap menampilkan status terakhir yang diketahui sampai ia pulih.
Apa yang dapat dilakukan setiap forge
Bagian berjudul “Apa yang dapat dilakukan setiap forge”Setiap forge mendukung alur intinya: menampilkan daftar dan membuka pull request, membaca diff, berkomentar inline dan di tingkat teratas, meninjau, menggabungkan, dan menutup. Di luar itu, mereka benar-benar berbeda, dan Control Center menyembunyikan apa yang tidak dapat dilakukan sebuah forge alih-alih menampilkan kontrol yang gagal secara senyap.
| Kemampuan | GitHub | GitLab | Bitbucket |
|---|---|---|---|
| Tinjauan berkelompok (tertunda) | ✓ | ✓ | — |
| Minta perubahan | ✓ | ✓ | ✓ |
| Status “dilihat” per file tersinkron | ✓ | — | — |
| Reaksi emoji | ✓ | ✓ | — |
| Peninjau tim / grup | ✓ | ✓ | — |
| Peninjau yang disarankan | ✓ | — | ✓ |
| Hasil CI pada PR | ✓ | ✓ | ✓ |
| Telusuri langkah/log pekerjaan CI | ✓ | ✓ | — |
| Pull request bertumpuk | ✓ | — | — |
| Templat deskripsi PR | ✓ | ✓ | — |
| Polling notifikasi | ✓ | — | — |
| Profil pengguna yang kaya | ✓ | ✓ | — |
| Ref head PR sisi server | ✓ | ✓ | — |
Ketika suatu kemampuan tidak ada, fitur tersebut terdegradasi secara jujur:
- Status dilihat tetap berfungsi, tetapi hanya di perangkat tempat Anda menetapkannya.
- Tinjauan berkelompok di Bitbucket diposting komentar demi komentar, sehingga peninjau melihatnya datang satu per satu alih-alih sekaligus.
- Tidak adanya ref head PR di Bitbucket berarti melakukan checkout pull request akan mengambil cabang sumbernya berdasarkan nama, yang gagal setelah cabang itu dihapus.
Istilah
Bagian berjudul “Istilah”GitLab menyebut pull request sebagai merge request. Control Center menyebut “pull request” di seluruh modelnya sendiri, dan memakai istilah milik setiap forge saat membicarakan forge tersebut.
Pemecahan masalah
Bagian berjudul “Pemecahan masalah”Daftar PR kosong dan menyatakan sebuah forge tidak terhubung
Bagian berjudul “Daftar PR kosong dan menyatakan sebuah forge tidak terhubung”Anda tidak punya kredensial untuk forge itu. Masuk atau tempelkan token di Pengaturan → Ruang kerja → Profil & identitas → Hosting kode. Repo di forge lain tidak terpengaruh.
Saya menghubungkan sebuah forge tetapi repo-nya masih tidak menampilkan apa pun
Bagian berjudul “Saya menghubungkan sebuah forge tetapi repo-nya masih tidak menampilkan apa pun”Periksa subjudul barisnya. Jika tertulis “lewat aplikasi server ini” atau “dari environment”, kredensial yang menjawab berbeda dari yang Anda harapkan — kredensial Anda sendiri yang menang untuk apa pun yang Anda minta, jadi jika tertulis sebaliknya, milik Anda tidak tersimpan.
Repo tidak dapat didaftarkan
Bagian berjudul “Repo tidak dapat didaftarkan”Pendaftaran membutuhkan ketiganya: path berada di dalam git work tree, memiliki remote origin, dan remote itu menunjuk ke github.com, gitlab.com, atau bitbucket.org. Lihat Tambahkan repo ke ruang kerja.
Semuanya berhenti berfungsi sementara setelah penggunaan berat
Bagian berjudul “Semuanya berhenti berfungsi sementara setelah penggunaan berat”Itulah circuit breaker batas laju. Forge yang memberi sinyal batas utamanya membuat klien menggagalkan permintaan berikutnya secara lokal, tanpa panggilan jaringan, sampai jendelanya berlalu — sehingga badai percobaan ulang tidak dapat memperdalam batas tersebut. Kegagalan sementara dicoba ulang dengan backoff eksponensial.