Git taahhüt mesajlarında geçmiş veya şimdiki zamanı kullanmalı mıyım? [kapalı]


531

Ben bir kez okumak o Git "x için testler Ekle" örneğin, mesajlar şart şimdiki zaman olmalıdır taahhüt. Kendimi her zaman geçmiş zamanı kullanarak buluyorum, örneğin "x için testler eklendi", bu da bana çok daha doğal geliyor.

İşte John Resig , ikisini bir mesajda gösteren yeni bir taahhüt :

Manipülasyon testlerinde biraz daha jQuery seti sonucu değiştirin. Ayrıca beklenen test sonuçlarının sırası düzeltildi.

Önemli mi? Hangisini kullanmalıyım?


12
Bu sorunun öncelikle görüş temelli olarak kapatılması gerekmektedir . Zaten zorunlu ve geçmiş zaman arasındaki görüş farklılıklarına bakın ! Bununla birlikte, zorunlu zamana oy veriyorum, çünkü tarihinizi yeniden yazarken, kiraz toplama, yamalar uygularken vb.




3
@Eonil, burada görüşe dayalı olduğu için kapalı olduğu takdirde, orada görüşe dayalı olduğu için de kapatılacaktır.
cırcır ucube

Yanıtlar:


601

Şimdiki zaman, zorunluluk tarzı taahhüt mesajları tercihi Git'in kendisinden geliyor. Gönderen Dokümantasyon / SubmittingPatches Git'te Repo:

Zorunlu ruh halindeki değişikliklerinizi açıklayın, örneğin "[Bu yama] xyzzy do frotz yapar" veya "[I] frotz yapmak için xyzzy değiştirdi" yerine "xyzzy do frotz yap" davranışı.

Böylece, Git'in bu tarzda yazılmış çok sayıda iletme mesajı göreceksiniz. Bir ekip veya açık kaynaklı yazılım üzerinde çalışıyorsanız, tutarlılık için herkesin bu stile yapışması yararlı olur. Özel bir proje üzerinde çalışsanız ve git geçmişinizi görecek tek kişi siz olsanız bile, zorunlu ruh halini kullanmanız faydalı olacaktır, çünkü başkalarıyla çalışırken takdir edilecek iyi alışkanlıklar oluşturur.


90
Bence bu mükemmel bir seçim. Bir taahhüdün ne olduğunu, farklı bir biçimde düşünün: önceki bir durumdan yeni bir duruma nasıl geçileceğine dair bir dizi talimat. Farkın "Bu satırı buraya ekleyin, bu satırı buraya kaldırın" dediği gibi, tamamlama mesajı nitel terimlerle "bu değişikliği yapın" diyor. (Evet, git taahhüdü basitçe meta veri içeren bir ağaç olarak saklar, ancak bir insana, bir taahhüdün önemli kısmı farktır.)
Cascabel

124
Bir taahhüdü, bir önceki durumdan yeni bir duruma nasıl geçileceği konusunda bir dizi talimat olarak görebilirsiniz; ama daha çok kodun evriminde bir kontrol noktası olarak görüyorum. Benim için işlem mesajı, önceki işlemden bu yana koda yapılanların bir günlüğüdür; ve bir kütük için geçmiş zaman çok daha mantıklı. Taahhüt mesajının gerçekten bir dizi talimat olması gerektiğini düşünüyorsanız, zorunlu zaman gitmenin yoludur. Gerçekten bu şekilde düşünmüyorum.
karadoc

10
@oschrenk: Dosyanın sonraki sürümlerinde bir neden var: "Zorunlu ruh halindeki değişikliklerinizi açıklayın, örn. '[Bu yama] xyzzy do frotz yapar' veya '[I] xyzzy'yi frotz yapmak için değiştirdi ', sanki davranışını değiştirmek için kod tabanına emirler veriyorsunuz. "
mipadi

44
Taahhüt mesajı zorunlu olmalı, gergin bir zaman sunmalıdır, çünkü git sizin veya başka biri ile sonuçlanabilir rebaseveya cherry-pickbu durumda, taahhüt orijinal bağlamının dışında kullanılabilir. Sonuç olarak, tamamlama mesajı, okuyucunun çevreleyen tamamlama mesajlarını görüntülemesini beklemeden bağımsız olarak yazılmalıdır. Kiraz toplama yamaları oluşturduğunuzda, "Sabit hata # 124" veya "Performansı iyileştirmek için değiştirilmiş sıralama" yerine "Hızlı sıralama algoritmasını düzelt" veya "Sıralama: Performansı iyileştirin" uygulamak daha mantıklıdır.
Mikko Rantalainen

5
Bu konuda düşündüğüm yol, bu taahhüdü şubeme uygulamayı seçersem mesajın neyin değişeceğini söylemesidir. Bunu bir günlük olarak değil, hareket edebileceğim durumlar olarak düşünüyorum ve belirli bir durumu seçtiğimde ne olacağını bilmem gerekiyor.
steinybot

357

Projeniz neredeyse her zaman geçmiş zamanı kullanmalıdır . Her durumda, proje tutarlılık ve netlik için her zaman aynı zamanı kullanmalıdır.

Şimdiki zamanın kullanılmasını savunan diğer bazı argümanları anlıyorum, ama genellikle geçerli değiller. Aşağıdaki madde işaretleri şimdiki zamanda yazmak için ortak argümanlar ve benim yanıtım.

  • Şimdiki zamanda yazmak birisine taahhüdün uygulanmasının sizin yaptığınızdan çok ne yapacağını söyler .

Bu, şimdiki zamanı kullanmak istemenin en doğru nedenidir, ancak sadece doğru proje stiliyle. Bu düşünme tarzı, tüm taahhütleri isteğe bağlı iyileştirmeler veya özellikler olarak görür ve hangi deponuzda hangi taahhütleri saklayacağınıza ve hangilerini reddeteceğinize karar vermekte özgürsünüz.

Bu argüman gerçekten dağıtılmış bir projeyle uğraşıyorsanız işe yarar. Dağıtılmış bir projeyle uğraşıyorsanız, muhtemelen açık kaynaklı bir proje üzerinde çalışıyorsunuzdur. Ve eğer gerçekten dağıtılmışsa, muhtemelen çok büyük bir projedir. Aslında, muhtemelen Linux çekirdeği veya Git. Linux muhtemelen Git'in yayılmasına ve popülerlik kazanmasına neden olan şey olduğundan, insanların stilini neden otorite olarak değerlendireceğini anlamak kolaydır. Evet, stil bu iki projeyle mantıklı. Veya genel olarak büyük, açık kaynaklı, dağıtılmış projelerle çalışır.

Bununla birlikte, kaynak kontrolündeki çoğu proje bu şekilde çalışmaz. Çoğu depo için genellikle yanlıştır. Bu, taahhütleri düşünmenin modern bir yoludur: Subversion (SVN) ve CVS depoları, bu depo check-in stilini zar zor destekleyebilir. Genellikle bir entegrasyon şubesi kötü check-in'leri filtrelemekle ilgiliydi, ancak bunlar genellikle "isteğe bağlı" veya "olması güzel özellikler" olarak değerlendirilmiyordu.

Çoğu senaryoda, bir kaynak deposuna taahhüt verirken, gelecekte başkalarının neden bir değişiklik yapıldığını anlamasını kolaylaştırmak için bu güncellemeyle neyin değiştiğini açıklayan bir günlük girdisi yazıyorsunuz. Genellikle isteğe bağlı bir değişiklik değildir - projedeki diğer kişilerin üzerinde birleşmesi veya yeniden temellendirilmesi gerekir. "Sevgili günlük, bugün bir oğlanla tanışıyorum ve bana merhaba diyor " gibi bir günlük girişi yazmıyorsunuz , bunun yerine " Bir oğlanla tanıştım ve bana merhaba dedi ."

Son olarak, bu tür dağıtılmamış projeler için, bir kişinin bir taahhüt mesajı okuyacağı zamanın% 99.99'u tarihi okumak içindir - geçmiş geçmiş zamanda okunur. Bu taahhüdü uygulayıp uygulamayacaklarına veya şubelerine / depolarına entegre edip etmeyeceklerine% 0.01 oranında karar verilecektir.

  • Tutarlılık. Birçok projede böyle (git kendisi dahil). Ayrıca taahhütleri üreten git araçları (git merge veya git revert gibi) yapar.

Hayır, bir sürüm kontrol sistemine giriş yapmış olan projelerin çoğunun geçmiş zamanda geçmişe sahip olduklarını garanti ediyorum (referanslarım yok, ama şimdiki zaman argümanının Git'ten beri yeni olduğunu düşünmek muhtemelen doğru). Mevcut zamanda "revizyon" mesajları veya taahhüt mesajları sadece gerçekten dağıtılmış projelerde anlamlı olmaya başladı - yukarıdaki ilk noktaya bakın.

  • İnsanlar sadece "bu kod tabanına ne olduğunu" bilmek için tarihi okumakla kalmaz, aynı zamanda "bu taahhüdü seçtiğimde ne olur" ya da "bu taahhütler nedeniyle kod tabanımda ne gibi yeni şeyler olur" gibi soruları yanıtlarlar. Gelecekte birleşebilir ya da birleşmeyebilir ".

İlk noktaya bakın. Bir kişinin bir taahhüt mesajı okuyacağı zamanın% 99,99'u tarihi okumak içindir - geçmiş geçmiş zamanda okunur. Bu taahhüdü uygulayıp uygulamayacaklarına veya şubelerine / depolarına entegre edip etmeyeceklerine% 0.01 oranında karar verilecektir. % 99.99,% 0.01'i geçer.

  • Genellikle daha kısa

Asla uygun olmayan bir zaman / dilbilgisi kullan diyen iyi bir argüman görmedim çünkü daha kısa. Standart 50 karakterlik bir mesaj için muhtemelen ortalama yalnızca 3 karakter kaydedersiniz. Bununla birlikte, şimdiki zaman muhtemelen birkaç karakter daha kısa olacaktır.

  • Sorununuzu / özellik izleyicinizdeki bilet başlıklarıyla daha tutarlı bir şekilde adlandırabilirsiniz (bu, bazen gelecek olsa da geçmiş zaman kullanmaz)

Biletler ya şu anda olan bir şey olarak yazılır (örneğin, bu düğmeyi tıkladığımda uygulama yanlış davranışı gösteriyor ) ya da gelecekte yapılması gereken bir şey (örneğin, metnin editör tarafından incelenmesi gerekir ) olarak yazılır .

Tarih (yani mesajlar işlemek) (örn sorun geçmişte yapıldığını şey olarak yazılır edildi sabit).


79
Bugün ilk olarak zorunlu stil taahhütlerinin sözde tercihini duydum. Bana göre o kadar doğal ve tuhaf geldi ki daha fazla fikir almaya karar verdim. Geçmiş zamanın işlenen mesajlar için daha doğal olduğunu düşünen tek kişi olmadığımı görmek beni memnun etti. :)
karadoc

57
git otomatik olarak oluşturulan birleştirme ve rebase taahhüt mesajları zorunludur ve şimdiki zaman ("Birleştir", "Birleştirildi"; "Rebase", "Yeniden Oluşturuldu" değil), bu nedenle bunu tutarlılık için kendi taahhüt mesajlarınızda eşleştirmek isteyebilirsiniz.
mjs

13
Farkın, yazılımdaki değişime odaklanmak - "Y yaparak sabit X" - veya depo - "X'i düzeltmek için Y yapın" arasında olduğu anlaşılıyor . +1 iyi bir argüman için, ama bence repo genellikle ortaya çıkan yazılım yerine kendi üzerine odaklanmalıdır.
l0b0

28
Mesele şu ki, zorunluluk kullanarak, şimdiki zaman büyük projeler (örneğin Linux) için çalışıyor, bu yüzden açıkça ölçekleniyor. Buna ek olarak, geçmiş zaman üzerinde kullanmak için neredeyse sıfır çaba gerektirir. Sonuç olarak, zorunlu, şimdiki zamandan başka bir şey kullanmak için hiçbir neden görmüyorum ("yaşlılar, geçmiş zamanda taahhüt mesajları yazmak için kullanılır"). Git komut kümesini öğrenebiliyorsanız, zorunlu ve şimdiki zamanda yazmayı öğrenebilirsiniz.
Mikko Rantalainen

35
Zorunluluk "git'den beri yeni" değil. ChangeLog git gitmeden çok önce vardı ve zorunlu kullanım GNU Projesi'nde her zaman önerilen tarz olmuştur. gnu.org/prep/standards/html_node/Style-of-Change-Logs.html
adl

81

365git üzerinde daha ayrıntılı bir açıklama yazdım .

Zorunlu, şimdiki zamanın kullanımı alışmak biraz zaman alır. Bahsetmeye başladığımda dirençle karşılandı. Genellikle “İşlem mesajı yaptığım şeyi kaydeder”. Ancak Git, değişikliklerin alınabileceği pek çok yerin bulunduğu dağıtılmış bir sürüm kontrol sistemidir. Ne yaptığınızı söyleyen mesajlar yazmak yerine; bu mesajları, taahhüdün uygulanmasının ne yapacağına dair talimatlar olarak düşünün. Başlık ile bir taahhütte bulunmak yerine:

Renamed the iVars and removed the common prefix.

Bunun gibi bir tane var:

Rename the iVars to remove the common prefix

Bu da birisine taahhüdün uygulanmasının sizin yaptığınızdan ziyade ne yapacağını söyler. Ayrıca, depo geçmişinize bakarsanız, Git tarafından oluşturulan iletilerin de bu zamanda yazıldığını göreceksiniz - “Birleştirilmiş” değil “Birleştir”, “Yeniden Oluşturulmamış” “Yeniden Oluşturma”, dolayısıyla aynı zamanda yazmanın tutarlı olmasını sağlar. İlk başta garip geliyor ama mantıklı geliyor (başvuru üzerine referanslar mevcut) ve sonunda doğal hale geliyor.

Tüm bunları söyledikten sonra - kodunuz, deponuz: bu yüzden kendi kurallarınızı oluşturun ve onlara sadık kalın.

Bununla birlikte, bu şekilde gitmeye karar verirseniz git rebase -i, geri sarma seçeneği ile bakmak iyi bir şey olacaktır.


7
İki farklı yönerge karıştırdınız: Git açık kaynak projesi ve Git'in düzenli kullanımı. Sağlanan bağlantı hiç gerginlikten bahsetmiyor . Resmi Git dokümanı sadece 50 karakter sınırından bahsediyor. Git, değişikliklerin alınabileceği birçok yerin olduğu dağıtılmış bir VCS'dir ... bu mesajları, taahhüdün uygulanmasının ne yapacağına dair talimatlar olarak düşünün. Bu sadece gerçekte dağıtılmış projeler olan birkaç proje için geçerlidir. Git taahhütlerinin% 99,999'u asla bu şekilde manuel olarak uygulanmayacaktır. Çoğu projede, tarih geçmiş zamanda olması gereken bir değişiklik günlüğüdür.
Matt Quigley

4
"ve tam durağı atlamak gerekir"
takeshin

30

Şimdiki zaman şartına uyun çünkü

  • bir standarda sahip olmak iyidir
  • hata izleyicideki "doğal olarak bir şeyleri uygulamak", "bir şeyi düzeltmek" veya "bir şeyi test etmek" biçimindeki biletlerle eşleşir.

16

Mesajı kime yazıyorsun? Ve bu okuyucu genellikle mesajı taahhütten önce mi yoksa mülkiyetden sonra mı okuyor?

Sanırım burada her iki açıdan da iyi cevaplar verilmiş, belki de her proje için en iyi cevabın olduğunu söylemekte yetersiz kalırım. Bölünmüş oylar da bunu önerebilir.

yani özetlemek gerekirse:

  • Mesaj ağırlıklı olarak diğer insanlar için mi, tipik olarak değişikliği kabul etmeden önce bir noktada okuyor mu: Değişikliği kabul etmenin mevcut kodlarına ne yapacağına dair bir öneri.

  • Mesaj ağırlıklı olarak kendinize (veya ekibinize) bir günlük / kayıt olarak mı, ancak tipik olarak değişikliği üstlenme ve neler olduğunu keşfetmek için arama yapma perspektifinden okuyor.

Belki bu her iki şekilde de ekibiniz / projeniz için motivasyonu yönlendirecektir.


10

önemli mi? insanlar genellikle iletileri doğru bir şekilde yorumlayacak kadar zekidirler, eğer değilse, muhtemelen deponuza erişmelerine izin vermemelisiniz!


27
To bazı insanlar , o madde yeraldığını gibi şeyler.
Wesley Murch

2
@mog bağlantı şimdiki ve geçmiş hakkında herhangi bir açıklama yapmaz.
ceving

2
Proje büyük zaman ölçeklendirirse, kod incelemesi ve hata avı yapan insanlar o kadar çok taahhüt görecek ki sizin ve benim sağlayabileceğim tüm yardıma ihtiyaç duyuyorlar. Uygun bir taahhüt mesajı yazmamak için gelecekte büyük baş ağrısına neden olmak için birkaç saniye tasarruf etmenin bir anlamı yok.
Mikko Rantalainen

İyi bir taahhüt mesajı yazma demiyorum. Diyorum ki geçmiş ya da şimdiki zaman kullanmanız önemli değil.
Michael Baldry

1
Taahhüt mesajınızı yorumlayamayan kişinin, bu kişinin yeterince yetenekli olmadığını veya iyi bir taahhüt mesajı yazamayacağınızı nasıl anlarsınız?
Haris

7

Sana bağlı. Tamamlama mesajını istediğiniz gibi kullanın. Ancak saatler ve diller arasında geçiş yapmamanız daha kolaydır.

Ve eğer bir takımda gelişirseniz - tartışılmalı ve düzeltilmelidir.

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.