İçeriğe geç

Bir kod barındırıcısı bağlama

Control Center, uygulama genelinde forge olarak adlandırılan üç kod barındırıcısıyla çalışır: GitHub, GitLab ve Bitbucket Cloud. Hiçbiri varsayılan değildir. Birini bağlayın, her şey çalışır; birkaçını bağlayın, tek bir çalışma alanı hepsinden aynı anda depo barındırabilir.

Forge, her deponun bir özelliğidir ve depoyu kaydettiğinizde origin remote’undan okunur. Onu asla siz seçmezsiniz ve yanlış yapılabilecek çalışma alanı başına bir ayar yoktur.

  1. Ayarlar → Çalışma alanı → Profil ve kimlik’i açın (/settings/workspace/profile).
  2. Kod barındırma kartını bulun. Desteklenen her forge, bağlı olsun olmasın listelenir.
  3. Satır sunuyorsa … ile oturum aç’a, sunmuyorsa Token ekle’ye basıp bir token yapıştırın.

Oturum aç, sunucunuzun bir uygulama kaydettirdiği forge için görünür — bugün bu, cihaz akışıyla çalışan GitHub’dır (bkz. GitHub App oluşturma). Geri kalan her şey yapıştırılan bir token’dır; tamamlanamayacak bir düğme yerine dürüst olanak budur.

Her iki durumda da kimlik bilgisi size aittir ve sunucuda yaşar; kullanıcı kimliğinize göre anahtarlanır: token, yazdığınız makinede saklanmaz, oturum açtığınız her cihaz aynı token’ı kullanır ve başka hiçbir üye onu okuyamaz. Bir sonraki istekte yürürlüğe girer — yeniden başlatılacak bir şey yoktur ve bağlantıyı kesmek, gönderilmesini anında durdurur.

Her satır, kimlik bilgisinin nereden geldiğini söyler; çünkü “token’ım çalışmıyor” ile “başka bir token yanıt veriyor” arasındaki fark budur:

Alt başlık Anlamı
Signed in as octocat Kendi kimlik bilginiz kullanılıyor
Signed in as octocat · via this server's app Sunucunun uygulama kimliği yanıt veriyor — siz oturum açmadınız
Signed in as octocat · from the environment Yanıt veren, kimlik bilginiz değil, bir sunucu ortam değişkeni
Not connected Bu forge için hiç kimlik bilginiz yok
Forge Token Nerede oluşturulur
GitHub Klasik: repo ve read:org. İnce taneli: Contents + Pull requests (read/write), Checks + Actions (read) github.com → Settings → Developer settings → Tokens
GitLab api kapsamlı bir kişisel erişim token’ı gitlab.com → User settings → Access tokens
Bitbucket Bir Atlassian API token’ı ve hesap e-postanız id.atlassian.com → Security → API tokens

Bitbucket, kullanıcı adı olarak hesap e-postanızla ve parola olarak da token’la kimlik doğrular. Hangi e-postayı token’la eşleştireceğini bilmesi için sunucu ortamında BITBUCKET_EMAIL ayarlayın.

Headless ya da CI kurulumlarında sunucu şunları okur:

  • GitHub — GITHUB_TOKEN, ardından GH_TOKEN
  • GitLab — GITLAB_TOKEN, ardından CI_JOB_TOKEN
  • Bitbucket — BITBUCKET_API_TOKEN, ardından BITBUCKET_TOKEN (BITBUCKET_EMAIL ile birlikte)

Bunlar sizin değil, sunucunun kimlik bilgisidir ve bu ayrım kritik önem taşır: sizin adınıza yapılan bir istek, sizin kimlik bilginizi ve başka hiçbir şeyi kullanır; dolayısıyla ortam sizin yerinize sessizce geçmez. Arkasında insan olmayan işler — webhook’lar, PR yoklaması, bilet eşitleme — önce sunucunun uygulama kimliğini, sonra sunucu sahibinin kimlik bilgisini, en sonunda da ortamı çözer. Bu sıra sabittir; böylece “oturum açtım ve hiçbir şey değişmedi” asla desteklenen bir sonuç olmaz.

Aynı kişi GitHub’da octocat, GitLab’da ise bambaşka biridir. Control Center kimliğinizi forge başına çözer ve her depo için doğru olanı kullanır; karma bir çalışma alanında “İncelemen gerekiyor”, “Benim oluşturduklarım” ve “Onaylandı” ifadelerinin doğru olmasını sağlayan da budur.

Bir forge’ın kimliği çözülemediyse, depoları her şeyle eşleşmek yerine gelen kutusuna hiçbir şey katmaz. Gelen kutusu da her şeyi yakaladığınızı iddia etmek yerine bunu söyler.

Gelen kutusu ve PR kuyruğu, çalışma alanında temsil edilen her forge’a yayılır ve sonuçları tek bir akışta birleştirir — bir GitHub pull request’i ile bir Bitbucket pull request’i, satıcıya göre gruplanmak yerine zamana göre sıralanarak yan yana durur.

Hatalar yalıtılmıştır. Çalışmayan, hız sınırına takılan ya da bağlı olmayan bir forge hiçbir şey katmaz ve diğerlerine dokunmaz; gelen kutusunun tamamını asla boşaltmaz. Kendi depoları, forge kendine gelene kadar bilinen son durumunu göstermeye devam eder.

Her forge çekirdek döngüyü destekler: pull request’leri listelemek ve açmak, diff’leri okumak, satır içi ve üst düzey yorum yapmak, incelemek, birleştirmek ve kapatmak. Bunun ötesinde gerçekten farklılaşırlar ve Control Center, sessizce başarısız olan bir denetim göstermek yerine bir forge’ın yapamadığını gizler.

Yetenek GitHub GitLab Bitbucket
Toplu (bekleyen) incelemeler ✓ ✓ —
Değişiklik isteme ✓ ✓ ✓
Dosya başına “görüldü” durumunun eşitlenmesi ✓ — —
Emoji tepkileri ✓ ✓ —
Ekip / grup inceleyicileri ✓ ✓ —
Önerilen inceleyiciler ✓ — ✓
PR’daki CI sonuçları ✓ ✓ ✓
Bir CI işinin adımlarına/loglarına inebilme ✓ ✓ —
Yığılmış pull request’ler ✓ — —
PR açıklama şablonları ✓ ✓ —
Bildirim yoklaması ✓ — —
Zengin kullanıcı profilleri ✓ ✓ —
Sunucu tarafında PR head ref ✓ ✓ —

Bir yetenek eksikse özellik dürüstçe geriler:

  • Görüldü durumu yine çalışır, ama yalnızca onu ayarladığınız cihazda.
  • Bitbucket’ta toplu incelemeler yorum yorum gönderilir; böylece inceleyiciler onları hepsi bir anda değil, tek tek gelirken görür.
  • Bitbucket’ta PR head ref olmaması, bir pull request’i checkout etmenin kaynak dalını adıyla çekmesi anlamına gelir; bu da o dal silindiğinde başarısız olur.

GitLab, bir pull request’e merge request der. Control Center kendi modeli boyunca “pull request” der ve o forge hakkında konuşurken her forge’ın kendi terimini kullanır.

PR listesi boş ve bir forge’ın bağlı olmadığını söylüyor

Bölüm başlığı “PR listesi boş ve bir forge’ın bağlı olmadığını söylüyor”

O forge için hiç kimlik bilginiz yok. Ayarlar → Çalışma alanı → Profil ve kimlik → Kod barındırma altında oturum açın ya da bir token yapıştırın. Diğer forge’ların depoları etkilenmez.

Bir forge bağladım ama depoları hâlâ hiçbir şey göstermiyor

Bölüm başlığı “Bir forge bağladım ama depoları hâlâ hiçbir şey göstermiyor”

Satırın alt başlığına bakın. “bu sunucunun uygulaması üzerinden” ya da “ortamdan” yazıyorsa, beklediğinizden farklı bir kimlik bilgisi yanıt veriyordur — istediğiniz her şeyde kendi kimlik bilginiz kazanır; dolayısıyla aksini söylüyorsa sizinki kaydedilmemiştir.

Kayıt için üçünün de olması gerekir: yol bir git çalışma ağacının içinde olmalı, bir origin remote’u bulunmalı ve bu remote github.com, gitlab.com ya da bitbucket.org adresini göstermeli. Bkz. Bir çalışma alanına depo ekleme.

Yoğun kullanımdan sonra her şey bir süre çalışmayı durduruyor

Bölüm başlığı “Yoğun kullanımdan sonra her şey bir süre çalışmayı durduruyor”

Bu, hız sınırı devre kesicisidir. Bir forge birincil sınırına ulaştığını bildirdiğinde, istemci pencere geçene kadar ağ çağrısı yapmadan daha fazla isteği yerel olarak başarısız kılar — böylece bir yeniden deneme fırtınası sınırı derinleştiremez. Geçici hatalar üstel geri çekilmeyle yeniden denenir.