Gerrit kodu incelemesi veya Github'ın çatal ve çekme modeli?


64

Ekip ve toplumun geliştireceği bir yazılım projesine başlıyorum. Daha önce gerritte satıldım, ama şimdi Github'ın çatal ve çekme isteği modeli neredeyse daha fazla araç, taahhütleri görselleştirme yolları ve kullanım kolaylığı sağlıyor gibi görünüyor.

Her ikisinde de en azından biraz deneyim sahibi olan biri için, her birinin lehte / aleyhte olanlar nelerdir ve toplum gelişimi için açık bir fırsat bırakmak isteyen ekip temelli bir proje için hangisi daha iyidir?

Yanıtlar:


84

Gerrit'in ve GitHub'un iş akışları arasındaki en büyük fark, değişikliklerin nasıl modellendiğidir.

Gerrit'te her taahhüt kendi başına duran bir değişikliktir. Gerrit size taahhütler arasındaki ilişkileri gösterecek olsa da, değerlendirmeler her bir işlem bazında gerçekleştirilir. Büyük değişiklikleri küçük, kendi kendine yeten taahhütlere ayırmada iyi olan takımların Gerrit ile daha başarılı olmaları muhtemel. Bununla birlikte, Gerrit'in modeli belirli bir taahhüdün ardışık revizyonlarını içerdiğinden, daha önceki bir taahhüdün değiştirilmesi ve yeniden itilmesi ya da bir konu dalından büyüyen bir komisyon kümesinin tek bir parçaya sıkıştırılması gibi birçok geliştiricinin alışık olmadığı Git iş akışlarını teşvik eder. taahhüt.

Github'da bir çekme isteği, iki dal arasındaki ilişkiyi modellemektedir. Github'da beklenen iş akışı, bir konu dalında (genellikle havuzun bir çatalında, ancak zorunlu değil) bir veya daha fazla değişiklik yapmak ve bu dal ile "yukarı akış" dalı arasında bir çekme isteği oluşturmaktır. Bu durumda, gözden geçirilmekte olan, inceleme devam ettikçe büyümeye devam eden bir dizi komisyondur. Sonuç, tamamlandığında atomik olarak birleştirilebilecek bir dizi değişikliktir. Çekme istekleri, değişiklikleri birden fazla komisyona uygulanabilecek daha geniş kapsamlı bir kapsamda izlemede etkili olabilir. Çekme istekleri, daha fazla geliştiricinin alışkın olduğu SCM iş akışlarını da destekler; örneğin, aynı daldaki bir takip taahhüdünü göndererek inceleme yorumuna cevap vermek gibi.

Github'un lehine büyük bir avantaj, Gerrit'e kıyasla aşina olan geliştiricilerin sayısıdır. Gerrit, Git uzmanı kullanıcılar arasında popüler olabilir, ancak sürtünmesiz kullanımı orta veya ileri düzeyde git bilgisi ve dik bir öğrenme eğrisinin toleransı gerektirir.

Gerrit'in avantajı Git ile daha derin bir ilişki. Github Pull İstekleri, Git isteklerinin çekme istekleri oluşturmak için Github'ın web kullanıcı arayüzünü veya kendi özel API'sini kullanması gereken Git veri standart veri modelinden yeterince kaldırılmıştır. Gerrit'in değişiklikleri oluşturma ve güncelleme arayüzü git protokolünün kendisidir.


8
Teşekkürler Martin, bu ilginç bir cevap. Bir süredir Gerrit'e bakmak demek istedim ama bunu rafa yazacağımı düşünüyorum. Tarihin ve ezilme kararlarının düzenlenmesini teşvik ederse, onunla hiçbir şey yapmak istemiyorum. * 8 '(
Mark Booth

15
Açıkça söylemek gerekirse (Gerrit'i sık sık işyerimde kullanırım), Martin’in burada söylediği “Gerrit… Git iş akışlarını teşvik eder… daha önceki bir taahhüdün değiştirilmesi, yeniden itilmesi ya da büyüyen bir komisyonun ezilmesi gibi. ... tek bir taahhütte bulunmak "kesinlikle doğru. Benim açıklığa kavuşturmam, @ MarkBooth’ın “tarihi düzenleme” ile ilgili yorumunun Martin’in söylediği olmadığıdır. (Hala Gerrit üzerinde ve süre kaydedilmesini Değişiklik Yapılması değil henüz köken / usta birleşti) yok değil "düzenleme tarihini" içerir. Aslında, bu iş akışı harika çalışıyor. Tarihin 'kötü' düzenlemesi, Mark Booth'un değiştirdiği tarihçeyi köken / ustaya yeniden itmek anlamına geliyor.
likethesky

2
@Likethesky açıklama için teşekkürler, ancak 'düzenleme tarihini' daha tam anlamıyla yorumluyorum, ve ilgilendiğim kadarıyla açıkça yapmadığınız içeriğe sahip olan değişiklik setleriyle sonuçlanan herhangi bir şey 'tarihi düzenleme' dir. Bunun oldukça draconian bir yorum olduğunu ve birkaçının uyduğu bir tane olduğunu fark ettim. * 8 ')
Mark Booth,

2
Yeterince adil. :-) "Açıkça taahhütte bulunmadığınız içeriği içeren değişiklikler" derken neyi kastettiğimi anladığımdan emin değilim. Ne varsayıyorum ... ayrıntılı değil Hiç geçici (yerel veya uzaktan dalları aracılığıyla ekip üyeleri arasında paylaşılır) işlemek asla söyleyerek gibi taahhüt a ve ardından "WIP bu konuştuğumuz kemer sorunu çözmek için çalışır" "123. Sayı: Esnekliği ve yatay ölçeklendirme kolaylığını arttırmak için yeniden yapılandırılmış XYZ" ibaresi bu iş için son bir taahhüt mesajı olarak belirten daha yararlı squash / değişiklik. Ama yine de, elbette git'i mutlu eden herhangi bir şekilde kullanmayı seçebilirsiniz!
likethesky

7
Bu harika bir cevap. Eklemek için GitHub'un çekme isteklerinin daha küçük, daha yinelemeli taahhütler sağladığını ve genellikle sadece iş ürününü değil iş sürecini gösteren çok daha açıklayıcı bir git günlüğü ile sonuçlandığını gördüm. Gerrit'in kod incelemesi, daha büyük ve daha parlak taahhütlerle daha temiz depo tarihini (çok, çok az gerçek birleşme komisyonu vardır) desteklemektedir.
tophyr
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.