Git şubelerini adlandırmak için yaygın olarak kullanılan uygulamalara bazı örnekler nelerdir? [kapalı]


1121

Birkaç aydır grubumun CVS deposuyla etkileşime giren bir yerel git deposu kullanıyorum. Birçoğu neyse ki bagajımla birleştirilen neredeyse nevrotik sayıda dal yaptım. Ancak adlandırma bir sorun olmaya başlıyor. Kolayca basit bir etiketle adlandırılan bir görevim varsa, ancak her birini kendi dal ve birleştirme durumlarını içeren üç aşamada gerçekleştirirsem, o zaman şube adını her seferinde tekrarlayabilirim, ancak bu, tarihi biraz kafa karıştırıcı yapar. Her aşama için ayrı bir açıklama ile isimlerde daha spesifik olursam, şube isimleri uzun ve hantal olmaya başlar.

Burada eski iş parçacıklarına bakarak, adında bir / ile dalları adlandırmaya başlayabildiğimi öğrendim, yani konu / görev veya bunun gibi bir şey. Bunu yapmaya ve işlerin daha iyi organize edilmesine yardımcı olup olmadığını görmeye başlayabilirim.

Git şubelerini adlandırmak için en iyi uygulamalar nelerdir?

Düzenleme: Hiç kimse herhangi bir adlandırma kuralı önermedi. Onlarla işim bittiğinde dalları siliyorum. Yönetimin önceliklerimi sürekli ayarlaması nedeniyle etrafta birkaç tane var. :) Bir görevde neden birden fazla şubeye ihtiyacım olabileceğinin bir örneği olarak, görevdeki ilk ayrık kilometre taşını grubun CVS deposuna aktarmam gerektiğini varsayalım. Bu noktada, CVS ile kusurlu etkileşimimden dolayı, bu taahhüdü yerine getirir ve daha sonra bu dalı öldürürdüm. (O noktada aynı dalı kullanmaya devam edersem CVS ile etkileşime giren çok fazla tuhaflık gördüm.)


Evet - muhtemelen işinizi bitirdikten sonra işe yaramayan dalları tutmamak veya itmemek iyi. Bir konu dalını tutmak (örneğin, daha sonra danışmak) için iyi bir neden olmadığı sürece, onu silmede sorun yoktur. Git dallanmayı kolaylaştırır ve bir sonuç, etrafta çok fazla ado olmadan temizlenebilen çok sayıda önemsiz dalla sonuçlanabilmenizdir.
Eric Walker


2
Tamlık için kullanamayacağınız bazı karakter dizileri vardır .
Nick Westgate

18
StackExchange ağında bu tür sorular için bir yer olması gerekir. Birisi böyle iyi bir soru sorduğunda çok sinir bozucu sinir bozucu ve sonra kurallara uymadığı için kapanıyor. Eğer devam ederse, bu muhtemelen bu tür soruları bir şekilde destekleme ihtiyacına işaret etmelidir. Yalnızca, muhtemelen Overflow sitesi içinde uygulanması gerekir, çünkü bunlar programlama tipi sorularla çok yakından ilişkilidir. Taşma, bana göre, "nesnel olarak cevaplanabilir sorular" (çok özel) için değil, "Programlama soruları" dır.
Nick Res

@Wim Kısa bir başlık ile birlikte jira sayı anahtarlarını kullanıyoruz, örneğin:KEY-1234/allow-users-to-do-smart-stuff
RobAu

Yanıtlar:


938

Kullandığım bazı şube adlandırma kuralları ve bunların nedenleri

Şube adlandırma kuralları

  1. Şube adlarınızın başında gruplama belirteçleri (kelimeler) kullanın.
  2. Şubeleri iş akışınız için anlamlı bir şekilde ayırt etmek için kısa kurşun jetonları tanımlayın ve kullanın.
  3. Şube adlarınızın bölümlerini ayırmak için eğik çizgiler kullanın.
  4. Önde gelen parça olarak çıplak numaraları kullanmayın.
  5. Uzun ömürlü dallar için uzun tanımlayıcı isimler kullanmaktan kaçının.

Grup belirteçleri

Şube adlarınızın önünde "gruplandırma" belirteçlerini kullanın.

group1/foo
group2/foo
group1/bar
group2/bar
group3/bar
group1/baz

Gruplara, iş akışınızla eşleştirmek istediğiniz herhangi bir ad verilebilir. Benim için kısa isimler kullanmayı seviyorum. Daha fazla netlik için okumaya devam edin.

Kısa iyi tanımlanmış tokenler

Şube adlarınızın her birine çok fazla gürültü eklememesi için kısa jetonlar seçin. Bunları kullanıyorum:

wip       Works in progress; stuff I know won't be finished soon
feat      Feature I'm adding or expanding
bug       Bug fix or experiment
junk      Throwaway branch created to experiment

Bu belirteçlerin her biri, size her dalın iş akışınızın hangi kısmına ait olduğunu söylemek için kullanılabilir.

Bir değişikliğin farklı döngüleri için birden fazla dalınız var gibi görünüyor. Döngülerinizin ne olduğunu bilmiyorum, ancak diyelim ki 'yeni', 'test' ve 'doğrulanmış'. Şubelerinizi, her iki şekilde gruplandırmak ve hangi aşamada olduğunuzu hatırlatmak için her zaman aynı şekilde yazılan bu etiketlerin kısaltılmış sürümleriyle adlandırabilirsiniz.

new/frabnotz
new/foo
new/bar
test/foo
test/frabnotz
ver/foo

Hangi dalların her bir aşamaya ulaştığını hızlıca söyleyebilir ve Git'in desen eşleme seçeneklerini kullanarak bunları kolayca gruplayabilirsiniz.

$ git branch --list "test/*"
test/foo
test/frabnotz

$ git branch --list "*/foo"
new/foo
test/foo
ver/foo

$ gitk --branches="*/foo"

Parçaları ayırmak için eğik çizgiler kullanın

Şube adlarında istediğiniz herhangi bir sınırlayıcıyı kullanabilirsiniz, ancak eğik çizgilerin en esnek olduğunu düşünüyorum. Kısa çizgiler veya noktalar kullanmayı tercih edebilirsiniz. Ancak eğik çizgiler, uzaktan kumandayı iterken veya uzaktan kumandayı alırken bazı şube adlarını değiştirmenizi sağlar.

$ git push origin 'refs/heads/feature/*:refs/heads/phord/feat/*'
$ git push origin 'refs/heads/bug/*:refs/heads/review/bugfix/*'

Benim için, eğik çizgiler kabuğumdaki sekme genişletme (komut tamamlama) için daha iyi çalışıyor. Konfigüre ettiğim şekilde, parçanın ilk karakterlerini yazıp SEKME tuşuna basarak farklı alt parçalara sahip dalları arayabilirim. Zsh bana yazdığım simgenin bir kısmıyla eşleşen dalların bir listesini veriyor. Bu, önceki jetonlar ve gömülü olanlar için geçerlidir.

$ git checkout new<TAB>
Menu:  new/frabnotz   new/foo   new/bar


$ git checkout foo<TAB>
Menu:  new/foo   test/foo   ver/foo

(Zshell, komutun tamamlanması konusunda çok yapılandırılabilir ve aynı zamanda tire, alt çizgi veya noktaları aynı şekilde işlemek için yapılandırabilirim. Ancak yapmamayı tercih ederim.)

Ayrıca birçok git komutunda şubeleri aramanıza izin verir, örneğin:

git branch --list "feature/*"
git log --graph --oneline --decorate --branches="feature/*" 
gitk --branches="feature/*" 

Dikkat: Slipp yorumlarda belirtildiği gibi, eğik çizgiler sorunlara neden olabilir. Dallar yol olarak uygulandığından, "foo" adında bir dalınız ve "foo / bar" adında başka bir dalınız olamaz. Bu yeni kullanıcılar için kafa karıştırıcı olabilir.

Çıplak numaralar kullanmayın

Şube adlandırma düzeninizin bir parçası olarak çıplak sayılar (veya onaltılık sayılar) kullanmayın. Referans adının sekme genişletmesi içinde git, bir sayının dal adı yerine sha-1'in bir parçası olduğuna karar verebilir. Örneğin, sorun izleyicim hataları ondalık sayılarla adlandırıyor. Karışıklık önlemek için sadece nnnnn yerine ilgili şubeleri CRnnnnn olarak adlandırıyorum.

$ git checkout CR15032<TAB>
Menu:   fix/CR15032    test/CR15032

Sadece 15032'yi genişletmeye çalışsaydım git, SHA-1'leri mi yoksa şube adlarını mı aramak istediğimden emin olmazdı ve seçimlerim biraz sınırlı olurdu.

Uzun açıklayıcı adlardan kaçının

Şube listesine bakarken uzun şube isimleri çok yardımcı olabilir. Ancak, dal adları tek satırın çoğunu yiyebileceğinden ve günlüğün görünür kısmını kısalttığından, dekore edilmiş tek satırlık günlüklere bakarken yol alabilir.

Öte yandan, alışılmış şekilde elle yeniden yazmazsanız, uzun şube adları "birleştirme taahhütlerinde" daha yararlı olabilir. Varsayılan birleştirme taahhüdü mesajıdır Merge branch 'branch-name'. Birleştirme iletilerinin Merge branch 'fix/CR15032/crash-when-unformatted-disk-inserted'sadece yerine gösterilmesini daha yararlı bulabilirsiniz Merge branch 'fix/CR15032'.


156
Gibi formların bir karışımını kullanarak bir dezavantajı bug/20574/frabnotz-finderve bug/20424bir alt simge olmadan başladığınızda, tersi daha sonra bir ve yardımcısı ekleyemezsiniz olmasıdır. EG: Bir bug/20424şube oluşturursanız , bug/20424/additional-fixingdaha sonra bir şube oluşturamazsınız (dalı silmediğiniz sürece bug/20424). Aynı şekilde, bug/20574/frabnotz-finderzaten bir şube ise , bir şube oluşturamazsınız bug/20574. Bu gibi durumlarda alt belirteci olmayan bir ayırıcı kullanma eğilimindeyim (ör. bug/20574_frabnotz-finder) Veya alt belirteci için varsayılan bir ad seçiyorum (ör. bug/20424/main).
Slipp D.Thompson

5
Ayrıca, dizin listesi görünümü gibi belirteç bölmelerinin daraltılmasına izin vermek için bazı Git GUI tabanlı araçları isteme yararı da vardır. Yukarıdaki örnekte, bir görürdünüz featuregrubu ve bir buggenişleyebilir grubu göstermek için foo, bareski ve için etiketler 20574, 20592gruplar ve 20424, 21334ikincisi için etiketleri.
Slipp D.Thomp

47
Git şube adlandırmalarında asla eğik çizgi kullanmamak için bir kampanya başlatacağım. Bunun nedeni, örneğin bir CI'de, örneğin paketleme kodu sırasında şube adına başvurmak istiyorsanız, bir uri veya PATH (örneğin) oluştururken şubenin adına, örneğin binaya bir bash senaryosunda bir uri; url parçası ekleyerek eğik çizgi nedeniyle uri'yi inşa etmekte zorluk çekeceksiniz. Evet, eğik çizgiyi değiştirmek mümkün ama sıralamak için çok zamanımı alacak.
Adam Spence

13
Bazı durumlarda eğik çizgilerin git için bir anlamı var mı? Örneğin, yanıt olarak git branch -a, ve elde remotes/origin/mastervb ben eğik kullanabilirsiniz yoktur ve gördüğüm zaman bu kadar, ben bir "özel" referans olduğunu biliyorum, bir dal bahset git görünce.
Dogweather

11
Foo ve bar yerine bazı örnekler kullanabilir misiniz?
Worthy7

329

Vincent Driessen'in başarılı bir Git dallanma modeli iyi önerilere sahiptir. Bir resim aşağıda. Bu dallanma modeli size hitap ediyorsa , git için akış uzantısını düşünün . Diğerleri akış hakkında yorum yaptı

Driessen'in modeli şunları içerir:

  • Yalnızca sürüm için kullanılan bir ana dal. Tipik bir isim master.

  • O dalın dışında bir "geliştirme" dalı. Çoğu ana hat çalışması için kullanılan budur. Yaygın olarak adlandırılmış develop.

  • Çoklu özellik dalları geliştirme dalından çıkar. Ad, özelliğin adını temel alır. Bunlar, ana veya serbest bırakma dallarına değil, yeniden gelişmeye birleştirilecektir.

  • Aday sürümlerini tutmak için şubeyi sadece hata düzeltmeleri ve yeni özelliklerle serbest bırakın. Tipik bir isim rc1.1.

Düzeltmeler, master'dan gelen ve geliştirme dalı dahil olmadan master'a geçecek değişiklikler için kısa ömürlü şubelerdir.

resim açıklamasını buraya girin


129
Soruyu gerçekten ele almaması dışında, özellikle özellik dalları için kullanıcıya bir dizi adlandırma kuralı bıraktığı için (bunlar "ana, geliştirme, yayınlama veya düzeltme - " olabilir
Brian

1
@Brian Bir özellik adlandırma kuralı, modelin çözdüğü sorunlar bağlamında neye yardımcı olur? Şu anda, özelliklerde daha fazla ayrım yapmanın gerçekten nasıl yardımcı olduğunu gerçekten görmüyorum. Belki gelecek ya da gelecek sürümle karşılaştırılabilir, ancak bu pazarlık edilebilir ve bu nedenle ismin bir parçası olmamalıdır. Okunabilirlik için, belki de sadece özellik- * ile başlaması yeterlidir. Birkaç kez oy kullandınız, bu yüzden sadece düşünme sürecinizi duymayı merak ediyorum ...
Nick Res

2
Her ne kadar iyi bilgi olsa da, bu cevap konvansiyonu adlandırmak yerine akış sorununu ele almaktadır. Bence OP hangi gerçek kelimeleri (isimler vs fiiller), sınırlayıcılar, dava vb kullanmak bilmek istiyorum
Caltor

6
Sürekli Teslim (s. 36) kitabı, bu modelin Sürekli Entegrasyona karşı bir tür antitetik olduğunu savunuyor, ... aslında, gerçekten "çevik" değil.
Markon

Bu aslında sorulan soruya cevap vermiyor. Bu, belirli bir git iş akışını kapsayıcı bir geliştirme ve sürüm programına entegre etme konusunda fikir verir , ancak op, şubeleri gerçekten neyin arayacağı konusundaki sözleşmeler hakkında tavsiye arar.
tekerlekli

56

Kişisel tercihim, bir konu dalını bitirdikten sonra şube adını silmek.

Şubenin anlamını açıklamak için şube adını kullanmaya çalışmak yerine, o daldaki ilk taahhütte taahhüt mesajının konu satırına “Branch:” ile başlıyorum ve konuya mesajın gövdesine daha fazla açıklama ekliyorum bana yeterli yer vermiyor.

Kullandığım dal adı, üzerinde çalışırken bir konu dalına atıfta bulunmak için tamamen bir tanıtıcı. Konu dalı üzerinde çalışma sona erdiğinde, bazen daha sonra başvurmak üzere taahhüdü etiketleyerek şube adından kurtulurum.

Bu da çıktıyı git branchdaha kullanışlı hale getirir : sadece uzun ömürlü dalları ve aktif konu dallarını listeler, tüm dalları değil.


53

Gördüğüm ve kullandığım araçlara dayanarak farklı şemalardan karıştırdım ve eşleştirdim.
Böylece tamamladığım şube adı:

ad / özellik / konu-izci-sayı / kısa açıklama

hangi dile çevirir:

mike / bloglar / RSSI-12 / logo-düzeltme

Parçalar ileri eğik çizgilerle ayrılır, çünkü bunlar kolay organizasyon için SourceTree'de klasörler olarak yorumlanır. Sorun takibimiz için Jira'yı kullanıyoruz, böylece numara dahil olmak sisteme bakmayı kolaylaştırıyor. Bu numarayı eklemek, bir çekme isteği göndermeye çalışırken Github'da bu sorunu bulmaya çalışırken de aranabilir hale getirir.


İşlem mesajındaki hata / özellik numarası hariç, aynıyım (GitHub -> Pivotal Tracker entegrasyonu için).
Leo

RSSI'nin ne anlama geldiğini merak ediyorum.
Renshuki

@renshuki sadece genel bir Jira proje anahtarı. Hangi izleyiciyi kullanırsanız kullanın, bilet kimliğini girin
MikeG

@MikeG hassasiyet için teşekkür ederiz!
Renshuki

3
Ben açıklama ile birlikte sorun numarasını geçmek dışında aynı kullanıyorum:name/feature/issue-tracker-number-short-description
lephleg

22

Neden her görev için üç dal / birleşme gerekiyor? Bununla ilgili daha fazla açıklama yapabilir misiniz?

Hata izleme sistemi kullanırsanız, hata numarasını şube adının bir parçası olarak kullanabilirsiniz. Bu, şube adlarını benzersiz tutacaktır ve onları insan tarafından okunabilir tutmak için kısa ve açıklayıcı bir veya iki kelimeyle önek olarak ekleyebilirsiniz "ResizeWindow-43523". Ayrıca, ilgili hatayı arayabileceğiniz için dalları temizlemeye gittiğinizde işleri kolaylaştırmaya yardımcı olur. Genelde dallarımı böyle adlandırırım.

Bu dallar eninde sonunda master'a geri döndüğünden, birleştirdikten sonra onları silmek güvenli olmalıdır. Birleşmediğiniz sürece --squash, ihtiyacınız olduğunda şubenin tüm tarihi hala var olacaktır.


12

Not gösterildiği gibi e703d7 taahhüt veya b6c2a0d işlemek Git 2.0 (2014 Mart), şimdi kısmen, başka adlandırma kuralı (eğer dalları uygulayabileceğiniz) bulacaksınız.

"Boşluk kullanmanız gerektiğinde tire kullanın" boşluk kullanmamanız gerektiğini söylemenin garip bir yoludur.
Komut satırı açıklamalarının kesikli çok sözcüklü kullanımı daha yaygın olduğundan, bu yerlerde boşluk kullanmak bile istemezsiniz.

Şube adında boşluk olamaz (bkz. " Şube adı içinde hangi karakterler geçersiz? " Ve git check-ref-formatkılavuz sayfa ).

Bu nedenle, çok kelimeli bir ifade ile temsil edilecek her dal adı için, -ayırıcı olarak ' ' (tire) kullanmak iyi bir fikirdir.


7

Farktronix'in önerisini takip ederek, cıvalı benzerleri için Jira bilet numaralarını kullanıyoruz ve git dalları için kullanmaya devam etmeyi planlıyorum. Ama bilet numarasının kendisi muhtemelen yeterince eşsiz. Şube adında farktronix belirtildiği gibi açıklayıcı bir kelime olması yararlı olsa da, şubeler arasında yeterince sık geçiş yapıyorsanız, muhtemelen daha az yazmak istersiniz. Şube adını bilmeniz gerekiyorsa, bilmiyorsanız Jira'da bilette ilişkili anahtar kelimeleri arayın. Ayrıca, her yoruma bilet numarasını eklemelisiniz.

Şubeniz bir sürümü temsil ediyorsa, genel kuralın şube adları için xxx (örnek: "1.0.0") biçimini ve etiket adları için (çakışmadan kaçınmak için) vx.xx (örnek "v1.0.0") olduğu anlaşılmaktadır. . Ayrıca bkz: git-tags için standart-adlandırma-kuralı


1
Çatışmalarla ilgili bir sorun var mı? Niyet, bir v1.2.4dalın sonunda bir v1.2.4etiketle bir bitiş noktasına yol açması ise (bunun bir sürümden sonra hem dalları hem de etiketleri adlandırdığınız durum olduğunu varsayarak doğru muyum ? ) , O zaman önemli mi? Etikete yine de adresinden refs/tags/v1.2.4ve şubeye ulaşılabilir ve refs/heads/v1.2.4Git, belirsiz olduğunda (bir uyarı ile) etiket adını tercih edecektir.
Slipp D.Thompson

1
Sürüm örneği için, cevabımda bahsettiğim gibi, önerilen bir uygulama, dallar için değil, etiket adları için "v" ile önek eklemektir. Yanlış iletişimden kaçınabiliyorsanız ve bir sonraki en yeni ve en büyük VCS'ye geçiş yolunda sorunlara neden olabileceğinden belirsizliği önleyin.
Gary S. Weaver

2
Geçenlerde aynı adda bir etiketle her sürüm dalını kapattığımız bir repo ile çalıştım. Çok iyi çalıştı çünkü belirsizlik yok ya da çok az (etiket, çoğu durumda ilgili daldaki son işleme işaret ediyor) ve mümkün olduğunda Git (doğru olanı yapıyor) (bir uyarı ile). Bunu tercih ederim çünkü eğer birisi kemik başlı bir hata yaparsa ve kapatılan bir şubeye daha fazla iş yaparsa Git, niyet olan etiketi seçmeye devam edecektir. Sistemdeki her şey kontrol altında olduğunda ve amaç açık olduğunda belirsizlik işleri basitleştirebilir.
Slipp D.Thomp
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.