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


36

Hakim olan en iyi uygulamanın ne olduğunu bilmek merak ediyorum. Git, projenin çalışır durumda olduğu (uygun bir şekilde yapıldığı, tüm testlerin geçtiği vb.) Veya bozuk bir kod işlediği şekilde uygulanmalı mıdır?

Örneğin, bu şarttan feragat ederseniz, taahhütlerle daha esnek olabilirsiniz (uygulama çalışma durumunda olmasa bile bunları mantıksal parçalar olarak kullanın). Ancak zorlarsanız, daha sonra verilen herhangi bir taahhüdü kiraz toplayabilmenin esnekliğini elde edersiniz ...

Yanıtlar:


50

Genelde bu kuralı izlerim:

  • Her birleştirme için masterşube gereken bir çalışma durumunda projeyi terk;
  • Her birleştirme ana hat için developşube gereken bir çalışma durumunda projeyi bırakmak (ve en azından inşa etmeliyiz);
  • Diğer bireysel taahhütlerin, değişikliğin neden yapıldığını, bunun nedenini ve projenin hangi bölümlerini etkilediğini açıklamak için temel bir amacı vardır. Projeyi çalışır durumda bırakmak gibi diğer tüm hedefler isteğe bağlıdır.

1
Aynı tülleri ofisimize yerleştirdik ve bu iyi çalışıyor. Bunun, git ile sınırlı olmadığını, ancak benzer bir araçla (mercurial, svn, vb.)
Çalıştığını unutmayın

40

Yerel depoyu klonunuzu, geliştirirken sizi rahat ettirecek her şey için kullanın.

Düzenli olarak bozuk kod işlerim ve kodu diğer geliştiricilere sunmaya hazır olduğumda harika bir özellik kullanırım:

git rebase -i HEAD~4

Bu, muhtemelen kırılmış, ara ürünümü (4'ünde) sıkıştırmama izin verir, iyi bir taahhütte bulunur. Bu komisyonların nasıl sıkıştırılacağını seçmenize izin veren bir editör ile sunulacaksınız. Tipik olarak 'seçim' taahhüdünü ilk kez işaretledim ve diğerlerinin squash'ını işaretledim.

Sonra, bir atomik taahhüdü itebilirim, ya da aslında yeni özelliğim gerçekten hazırsa, yaptığım işi mevcut CVS deposuna dahil etmek için 'git cvsexportcommit' kullanmak.


3
O dayanır beri bu cevap dair şüpheler vardır rebase: oldukça tartışmalı olan Thou Shalt Değil Lie: git rebase, kabak, değiştirme ve diğer yalan
Sled

8
@ArtB: Ancak bu durumda, memetech sadece kendisine yalan söylüyor (IOW kamuoyunu yeniden yazmıyor) ve bu pek tartışmalı değil .
Jörg W Mittag

4
@ArtB Makale yayınlanan taahhütlere atıfta bulunmaktadır. Cevaplar yayınlanmamış taahhütleri ifade eder.
d0001

2
@WayneConrad "iyi bir kural, zaten dünyaya yayılmış olan şeylerin geçmişini yeniden yazmamanız gerektiğidir. Bu, bu yeniden yazma araçlarını, bunları" bastırmadan önce "düzeltmek için" yerel olarak kullanmasını sınırlar. " Epilogun son paragrafından.
Andrew, Reinstate Monica'yı

8
@ArtB - İnternette okuduğunuz her şeye inanmanın ve internette okuduğunuz herhangi bir şeyin neden (veya neden olmasın) yapıldığını (veya yapmadığını) bilme bilgisini sorgularım.
mattnz

6

Sürüm kontrolünün en büyük avantajlarından ikisi, geliştiricilerin işlerinin önceki sürümlerini kurtarmasına izin vermesi ve geliştiricilerin aynı anda farklı, muhtemelen birbiriyle çelişen değişiklikleri denemelerine izin vermesidir. Sürüm kontrolü, geliştiricilere başarısız olabilecek fikirleri deneme özgürlüğü verir.

Geliştiriciler, yapıp yapmamalarına, düzenli olarak dallanma ve işlerini yapma konusunda teşvik edilmelidir. Dallanma veya bozulma taahhütlerine izin vermeyi reddetmek, geliştiricilerinizi zorlaştırmak ve araçlarınızı kötü kullanmaktır.

Bununla birlikte, belirli dalların her zaman inşa edilmesini taahhüt etmesini istemek mükemmel bir uygulamadır. Birçok kuruluş daha ileri giderek geliştiricilerin belirli dallara bağlı kalmasını yasaklamaktadır. Örneğin, geliştiricilerin çalışmalarını ana geliştirme koluna geri koymaları gerekebilir, ancak yalnızca lider geliştiricinin geliştirme aşamasından üretim dalına kadar bu değişiklikleri birleştirmesine izin verilebilir.


2

Genel olarak her iki yaklaşımı da takip ediyoruz. Kutumdaki yerel depoda istediğim her şeyi taahhüt ediyorum. Takımımın merkezi deposuna gitme zamanı geldiğinde, önce etkileşimli bir yeniden düzenleme yapıyorum ve taahhütlerimi mantıklı paketler haline getiriyorum. Genel olarak, yorum başına bir hikaye (veya kusur) kimliği eklendiğinde hikaye başına bir işlem yapılır (biz bir kanban temelli mağazayız).

Daha sonra merkezi repromızda Jenkins dinliyor ve yapım ve tüm testler başlıyor. Bir şey başarısız olursa, genellikle insanların başka bir taahhütle yapıyı düzeltmelerini denemelerine izin veririz. İyi görünmüyorsa, hatalı işlemi geri almak kolaydır.


1

Yana git commitsadece depo kendi kopyasını etkiler her tamamlamak sonra proje çalışma bir durumda olması için gerek yoktur. Yaptığınız işi kurtarmak istediğinizde devam edin ve kararlı olun. Muhtemelen iyi bir kural, taahhüt mesajında ​​yaptığınız değişiklikleri tanımlayabileceğiniz zaman bir taahhüdün uygun olduğudur.

Bu git pushdiğer kullanıcıları etkiler. Neye basılması gerektiğine ilişkin politikalar, geliştirme ekibinizin karar vermesi gereken bir konudur. Çalışmayan kodun ana dalın üzerine itilmesi muhtemelen hayır amaçlıdır, ancak çalışmayan kodu ayrı bir dalın üzerine itmek gerekir (başka hiç kimse bu daldan bir yapı yapmaya çalışmadığı sürece).


1

Git akışını işte kullanıyoruz ve bitmemiş ya da bozuk kodlar da işledik - yalnızca belirli bir sorun için yapılan yerel ya da uzak dallara indiği için. Görev bittikten sonra, geliştirme dalına birleştirilir (akış modelinde mevcut çalışma kopyasını temsil eder). Bu şekilde, kod üzerinde de işbirliği yapabiliriz (bazı çalışanlar proje lideri de dahil olmak üzere başka bir şehirde bulunmaktadır) ve birbirlerine yardımcı olabiliriz.

Ancak, sizin ve çalışanlarınızın nasıl düşündüğüne bağlıdır. Şahsen, daha büyük bir refactor veya benzeri bir değişiklik geçmişine ihtiyaç duyacağınız için şube taahhütlerinin tamam olduğunu düşünüyorum.


1

Sonunda, git ve herhangi bir kural koymadığından, size ve beraber çalıştığınız insanlara bağlıdır.

Uygulamam kasıtlı olarak sistemi önemli ölçüde kötüleştiren herhangi bir taahhütten kaçınmak. Her bir taahhüt yeniden düzenlenmiş olmalı veya bazı gereklilikleri yerine getirmelidir. Kötü bir taahhütte bulunursam ve zorlamadan önce onu keşfedersem, tarihten çıkarmak için onu değiştirir veya yeniden derlerim.

Bunun bir çekme isteğinde git günlüğünü okumayı kolaylaştıracağını düşünüyorum, çünkü her bir işlem bir yeniden düzenleme veya bir gereksinimin bir uygulaması olarak tek başına durmalıdır. Yakın gelecekte hayata geçirilecek olan ölü kodu eklemek, yeniden yapılanma olarak kabul edilir. Bunlar benim 'mantıklı parçalarım'.

Taahhütlerinizi nasıl yapılandırdığınız konusunda hala esnek olabilirsiniz. Örneğin, önceden testler yazabilir ancak hepsini ilk görüşte atlandığı şekilde işaretleyebilirsiniz, böylece test takımınız bir arıza bildirmez ve uygulama tamamlandığında bunları atlayın.


0

Branşlar kullandığınızı ve iyi bir taahhüt mesajı aldığınızı varsayalım, bir dalda "bozuk" bir kod işleyerek, ekibiniz iyi bir çalışma pratiği olduğu konusunda hemfikir olduğu anlaşılır bir mesaj ile "açık" olarak kabul edersiniz.

Ayrıca, git deposunu yerel olarak klonladığınızdan, yerel kodları, ilerledikçe "bozuk" kod işlediğiniz yere kadar gönderilmemiş yerel bir şubeniz olabilir; daha sonra, hepsinin çalışmasını sağladığınızda, ana veya başka bir dalda birleştirmek ve çalışma dalınızı çeşitli "kırık" taahhütlerle silmek.

Bana göre, bu, ekibinize kabul edilebilir olanı kabul etmekle ilgili; bazı takımlar şubede bile bozuk kod kabul etmez, bazıları ise kabul eder.

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.