Bu neden önemli?
Yapay zekâ ajanları saatlerce kod yazınca ortaya binlerce satırlık değişiklikler çıkıyor. Bunları incelemek insan için neredeyse imkânsız. Küçük, sıralı parçalar hem incelemeyi kolaylaştırıyor hem de hataları daha erken yakalatıyor.
Önce bir hatırlatma: PR nedir?
Pull request (PR), “benim yaptığım değişiklikleri ana koda ekleyin” demenin GitHub’daki yolu. Kodu ayrı bir dalda (branch) yazarsın, PR açarsın, ekip arkadaşların değişikliği inceler, testler çalışır, her şey yolundaysa kod ana dala (genelde main) birleştirilir.
Sorun şu: Büyük bir özellik tek PR’a sığdırılınca, inceleyecek kişinin önüne yüzlerce dosya düşüyor. Kimse bunu dikkatle okumak istemiyor. İnceleme ya çok uzun sürüyor ya da “göz attım, olur” diye geçiliyor.
Stacked PR: Katman katman değişiklik
Stacked PR (üst üste yığılmış PR’lar) fikri basit. Büyük değişikliği mantıklı katmanlara bölersin:
- En altta, temel değişiklik: Örneğin veritabanı şeması. Bu PR
maindalını hedefler. - Onun üstünde API uç noktaları. Bu PR,
main’i değil bir alttaki PR’ın dalını hedefler. - En üstte arayüz. O da API dalını hedefler.
Her katman bir alttakine dayanıyor. İnceleyen kişi her PR’da sadece o katmanın farkını görüyor. Farklı kişiler farklı katmanları aynı anda inceleyebiliyor.
“Bunu zaten yapamıyor muydum?”
Yapabiliyordun. Git açısından hiçbir şey değişmedi: PR’ları elle birbirine zincirlemek hep mümkündü. Ama zahmetliydi. Alttaki dalda bir düzeltme yaptığında üstteki bütün dalları tek tek yeniden düzenlemen (rebase) gerekiyordu. Alttaki PR birleştirilince üsttekinin hedefini elle değiştirmen gerekiyordu. Graphite gibi araçlar bu işi kolaylaştırmak için vardı.
GitHub’ın 30 Temmuz’da herkese açtığı önizleme sürümüyle bu artık platformun kendi özelliği:
- PR sayfasının üstünde, yığının tamamını gösteren bir harita var. İncelediğin parçanın büyük resimde nereye oturduğunu görüyorsun.
- En üstteki hazır PR’ı birleştirdiğinde, altındaki bütün katmanlar tek hamlede birleşiyor.
- İstersen sadece alttaki birkaç katmanı birleştirebilirsin. Üsttekiler açık kalıyor ve otomatik olarak yeniden düzenleniyor.
- Mevcut dal korumaların, zorunlu testlerin ve inceleme kuralların aynen geçerli.
Nasıl kullanılıyor?
En rahat yol GitHub’ın komut satırı aracı gh ve onun yeni eklentisi:
gh extension install github/gh-stackile eklentiyi kuruyorsun.gh stack initile ilk dalı açıyorsun, normal şekilde commit atıyorsun.gh stack add apiile üstüne yeni bir katman ekliyorsun.gh stack submitile bütün dalları gönderip PR’ları tek seferde açıyorsun.
Arka planda hâlâ sıradan Git dalları var. Eklenti, hangi dalın hangisinin üstünde olduğunu kendi küçük dosyasında takip ediyor. CLI kullanmak istemezsen PR’ları web arayüzünden elle zincirlediğinde de GitHub bunları yığın olarak tanıyor.
Birleştirme kuyruğu (merge queue) desteği ise GitHub’a göre önümüzdeki haftalarda kademeli olarak geliyor.
Yapay zekâ bağlantısı
GitHub, kodlama ajanlarının da yığın oluşturabilmesi için bir “skill” (ajanlara bir işi öğreten talimat paketi) yayınladı. Videodaki fikir şu: Bir ajana saatlerce çalışacağı bir görev verdiğinde, sonunda tek dev bir PR yerine sıralı küçük PR’lar gelmesi, hem senin incelemeni kolaylaştırır hem de ajanın bir yerde yanlış yola saptığını daha erken fark ettirir.
Düşün
- Son yazdığın büyük değişikliği hangi katmanlara bölerdin? Hangi parça tek başına anlamlı olurdu?
- Bir yapay zekânın yazdığı 3.000 satırlık bir PR’ı gerçekten okuyabilir misin? Okuyamıyorsan onu birleştirmek doğru mu?
Bu yazıdaki araçlar Araç Kutusu'nda: GitHub Stacked PRs