← Teknoloji Radarı

Araçlar

GitHub'da üst üste PR'lar: Büyük değişikliği küçük parçalarla göndermek

GitHub, 'stacked pull requests' özelliğini herkese açtı. Büyük bir değişikliği tek dev bir PR yerine, birbirinin üstüne kurulan küçük PR'lara bölüyorsun. Her biri ayrı incelenip ayrı birleştirilebiliyor.

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.

Github's Biggest Release In Years. Stacked PRs. · Better Stack, YouTube (İngilizce). Tıklayınca video yüklenir.

Ö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:

  1. En altta, temel değişiklik: Örneğin veritabanı şeması. Bu PR main dalını hedefler.
  2. Onun üstünde API uç noktaları. Bu PR, main’i değil bir alttaki PR’ın dalını hedefler.
  3. 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-stack ile eklentiyi kuruyorsun.
  • gh stack init ile ilk dalı açıyorsun, normal şekilde commit atıyorsun.
  • gh stack add api ile üstüne yeni bir katman ekliyorsun.
  • gh stack submit ile 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