Herhangi bir itme işindeki son taahhüt olduğu sürece ara taahhütlerin kırılması iyi mi?


13

İlgili: Her git taahhüdü projeyi çalışır durumda bırakmalı mı?

Aşağıdaki taahhütleri yerel olarak yaptığımı varsayalım:

  • Uygulamayı bozarak veritabanı şemasını değiştirin.

  • Uygulamayı, veritabanı şemasıyla tekrar uyumlu olacak şekilde güncelleyin.

Her iki taahhüdü de ittiğim sürece, çalışır durumda masterkalır. Ancak, tarihsel bir sürüm bozuldu.

git rebase -iTaahhütleri birlikte ezmek için kullanabileceğimin farkındayım . Bununla birlikte, sonuçta ortaya çıkan taahhüt büyük ve daha az açıklayıcı olacaktır. Bir şeyi neden değiştirdiğimi öğrenmek için işlem geçmişini araştırmam gerekirse, yaptığım işi ve nedenini gösteren orijinal işlemeyi bulmayı tercih ederim.

Sorularım:

  • Ustadaki kırılmış tarihsel taahhütler nedeniyle zorluklarla karşılaşan var mı?

  • Eğer öyleyse, bireysel taahhüt mesajlarını ve değişiklikleri atmadan bu tür zorluklardan kaçınmanın basit bir yolu var mı?


1
Neden her iki değişikliği tek bir adımda uygulayamıyorsunuz? Anlamlı iş parçaları yapman gerekmiyor mu?
Giorgio

Yanıtlar:


9

Büyük ölçüde kıyafetinizin dallanma stratejisine bağlıdır, ancak geliştirme dallarında kesin bir taahhüt yapmanın genel olarak bir ton mantıklı olduğunu düşünüyorum - kaynak kontrolünü kullanırken gerçek büyük "kazanma" küçük değişiklikleri geri alabilmek ve bazen bir demet yapıyorsun ve omlets yapmak için yumurtaları kırmalısın.

Bireysel taahhütleri ustayı kirletmeden tutmanın basit yolu dalları kullanmaktır. Ana dalın tarihini kirletmeden ince taneli bir geçmişe sahip olabilmek için kırma / deneysel şeyleri oraya koyabilirsiniz.


3
Evet, ancak bir özelliği master ile birleştirdiğimde ve hızlı bir şekilde ilerlediğinde, master artık tüm bu taahhütlere sahip. Çok fazla taahhüt varsa, --no-ffbirleştirme işlemine zorlamak için git-merge seçeneğini kullanmayı düşünmeli miyim ?
Joey Adams

Ana daldaki her taahhüdün çalışan bir yazılım sürümü oluşturmasının mantıklı bir hedef olduğuna inanıyorum. Bunları büyük bir tanesine yuvarlamak mantıklı değilse, taahhüt yorumları diğer taahhütlerle olan bağımlılıkları açıkça tanımlamalıdır.
mattnz

Bence bu "kırık taahhütler" iyi. Uygulamanızda görmediğiniz bir hatayla karşılaşırsanız, bu "kırık taahhütler", değiştirdiğiniz şey hakkında size çok özel bir bellek tazeleme sağlayabilir. Bazen, sadece ihtiyacınız olan ipucu.
RobotHumans

3
Partiye biraz geç ama bu kırık taahhütleri gerçekten sevmiyorsanız, şubenizi ustala birleştirmeden önce yeniden başlayın.
Dan Pantry

3

Kırık taahhütler "sadece gerçekleşen" bir şeydir, dünyanın sonu anlamına gelmemelidir. Kafamın arkasında küçük bir sersemleme sesim var, bu bana bir prensip olarak bilerek kırık kodu kontrol etmemeliydi ve bu nedenle tarihsel versiyonları da içeriyor , ancak savaşa gideceğim bir şey değil.

Git'in çok övülen dallanma modeli, kırık takımların belirli dallardan uzak tutulmasını mümkün kılar, örneğin ekibiniz gitflow veya basitleştirilmiş bir versiyonunu benimsiyorsa . "Temiz usta" politikası olan her şey. Bu durumda, son, çalışan sürümü, birleştirme taahhüdü olarak kontrol edebilirsiniz; burada (kırık) geçmiş sürümler, depoda ancak ana hattan kullanılabilir.

Ekibiniz böyle bir dallanma modeli benimsemediyse, tüm partiyi ustalaşmak ve onunla bitirmek için geçerli bir bahaneniz var.


3

Hayır, sorun değil.

Şimdiye kadar bir git bisect(ve bu katil özelliğini sevmeyen) yaptıysanız , her taahhüdün inşa edildiği bir tarihin değerini bilirsiniz.

Yapılmayan bir çok taahhüdünüz varsa , son iyi taahhüdü bulmayı zorlaştıran bisectbirçok git bisect skips var.

Bir özellik dalını bitirir ve master ile birleştirirseniz, birleştirmeden önce dalı temizleyerek geçmişinizin netleşmesini ve oluşturulmasını sağlayın.


3

Ustadaki kırılmış tarihsel taahhütler nedeniyle zorluklarla karşılaşan var mı?

Evet. Backportlar, geri dönüşler ve ikililer daha zordur. Tarihi okumak da öyle (aşağıya bakınız).

Eğer öyleyse, bireysel taahhüt mesajlarını ve değişiklikleri atmadan bu tür zorluklardan kaçınmanın basit bir yolu var mı?

Bildiğim kadarıyla değil, dallar iyi bir çözüm olsa da.

Bununla birlikte, bireyin taahhütlerini atmanın (veya daha ziyade ezmenin) yapılması gereken doğru şey olduğunu düşünüyorum.

Geliştirme sırasında, özellikle TDD yaparken, erken ve sıklıkla taahhüt etmek iyidir. Yaptığınız şeyin tam izini istersiniz, böylece geri dönebilir veya işlerin ne zaman yanlış gittiğini tam olarak anlayabilirsiniz (veya belki de kendinizi çiğneyebileceğinizden daha büyük bir yeniden düzenlemeye soktunuz). Taahhüt et.

Bununla birlikte, bir özellik / değişiklik itilmeye hazır olduğunda, bir taahhüt paketlenmiş bir değişikliktir - ideal olarak atomiktir, böylece mümkün olduğunca diğer değişikliklerden bağımsız olarak [gözden geçirilebilir, yeniden temellendirilebilir, birleştirilebilir, kirazla toplanır, geri döndürülür, ek açıklamada görüntülenebilir] .

Bir projenin geçmişine bakıldığında, bir yazılım değişikliği tek başına değerlendirilmelidir. İnşa ediyor mu? Testlerle geliyor mu? Çalışıyor mu? Bu ne işe yarıyor? Bu özelliği sunmak için hangi dosyaların değiştirilmesi gerekiyordu?

Taahhütleri bir araya getirmek zorundayken, mümkünse (ve birleşmelerin yardımı ile) bunu zorlaştırır. Bu nedenle, bulunduğunuz yere nasıl geldiğinizin izini kaybetmek anlamına gelse bile, itmeden önce geçmişinizi temizlemenin uygun olduğunu düşünüyorum.


1

Kısa Cevap: Evet

Test yapmak:

Test güdümlü geliştirme, kırılan (yani başarısız olduğunu gösteren) testler yazdığınız anlamına gelir.
Daha sonra testlerin çalışması için kodu yazarsınız.

Geliştirme:

Küçük, sık sık taahhüt edin.
Her taahhüt bir geri alma noktasıdır. Yanlış yolda olduğunuzu fark ederseniz, bir önceki noktaya nispeten kolayca geri dönebilirsiniz. Taahhüt ettiğinizde yeterince ince taneler varsa doğru noktaya geri dönebilirsiniz.

Uyarı:

Bu does not ortalamaları

1) Kırılmış kodu master'a kontrol edin.
2) Herkesin gözden geçirmesi için tüm mikro taahhütleri zorlamanız gerekir.

İşinizi yapmak için dalları kullanın. İnceleme işlemleri için mikro taahhütleri potansiyel olarak sıkıştırın, böylece uygun yorumlarla mantıksal olarak farklı birimler halinde olun. Git kullanıyorsanız, orijinal taahhüt kümesini kaybetmeyeceksiniz, sadece master ile birleştirilecek inceleme süreçleri için daha mantıklı bir taahhüt kümesi oluşturabilirsiniz.


0

Taahhütler yerel olduğu ve başkalarına itmediği sürece sadece ok değil, aslında çalışmak için iyi bir yol olduğunu düşünüyorum. Sadece bozuk kodu başkalarına aktarmayın.

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.