Git etiketleri için standart bir adlandırma kuralı var mı? [kapalı]


229

v1.2.3Git'teki etiketler için adlandırma kuralı olarak kullanılan birçok proje gördüm . Biraz fayda gördüm 1.2.3. Resmi olarak onaylanmış bir stil var mı, ya da bunları kullanmak için iyi bir argüman var mı?


19
43 upvotes ve sayım ile, bu çok değerli sorunun yeniden gözden geçirilip yeniden açılabileceğini merak ediyorum, bazı cevaplar güzel bir özetle tüm noktaları birleştirip en üstte olmak mı? @ PeterEisentraut en eksiksiz gibi görünüyor; oysa kabul edilen cevap ATM biraz yanıltıcı görünüyor. (Sanırım tüm noktaları okuduktan sonra etiketler için v1.2.3 kullanacağım.)
HostileFork SE

1
SO kodu sabitlemek içindir. En iyi uygulamalar softwareengineering.stackexchange.com veya codereview.stackexchange.com'a
Cees Timmerman

Semver.org'da (anlamsal sürüm oluşturma) size bir fikir vermesi için bir göz atın .
vonbrand

deneyimlerim bana biraz farklı bir plan kullanmamı söylüyor. 1. altdizin: Bu grup bir ad alanında etiketlendiğinden Git etiketi en azından ile başlamalıdır v/. 2. ideal olarak, bir etiket aynı zamanda uygulamayı benzersiz şekilde tanımlayan bir kısaltma içermelidir. örn v/myapp/1.0. Bu, git deposu birleştirmesini kolaylaştırır: uygulamaların birleştirilmesi durumunda, etiketler etiket ad alanında çarpışmaz.
axd

Yanıtlar:


166

Semantic Versioning'in 1.0.0 sürümü , GitHub şöhretinden Tom Preston-Werner tarafından, aşağıdakileri ele alan bir alt spesifikasyona sahipti :

Etiketleme Spesifikasyonu (SemVerTag)

Kodunuzu saklamak için bir sürüm kontrol sistemi (Git, Mercurial, SVN, vb.) Kullanıyorsanız bu alt şartname KULLANILMALIDIR. Bu sistemi kullanmak, otomatik araçların paketinizi denetlemesine ve SemVer uyumluluğunu ve yayınlanan sürümlerini belirlemesine olanak tanır.

  1. Bir sürüm kontrol sistemindeki sürümleri etiketlerken, sürümün etiketi "vX.YZ" olmalıdır, örn. "V3.1.0" .

Ancak, tartışmadan sonra bu kaldırıldı ve artık SemVer spesifikasyonunun en son sürümünde (yazma sırasında 2.0.0) mevcut değil. Aynı yerde daha sonraki bir tartışma konusu daha derinlere gitti ve yeni bir "v1.2.3" anlamsal bir sürüm mü? varlık eklendi SemVer en SSS için masteryazma anda (üzerinde 2 yıl sonra) bu değişiklik olmasına rağmen, şube hala mevcut değil resmen piyasaya spec.


9
Teşekkürler - Çok yakın. Onun nitelikli olurdu dilek nedenv olsa bulunmalıdır.
troelskn

3
Tom Preston-Werner
peritus


41
Semantik Sürüm 1.0.0 "v1.2.3" biçimini kullanır. Semantik Sürüm 2.0.0-rc.1 muhtemelen "1.2.3" biçimini kullanır. Etiketleme Spesifikasyonu (SemVerTag) makalesi teknik özelliklerden kaldırıldı. Daha fazla burada: semver.org
petrnohejl

9
Bu cevap eski semver (sürüm 1.0) mevcut olduğunda yapılır. Günümüzde 'v' öneki semver v2.0'dan kaldırıldı. Ayrıntılar için aşağıdaki gönderiye bakın.
vitalii

111

İki baskın kural var gibi görünüyor (bültenleri kendileri numaralandırmak için makul bir standarda uyduğunuz varsayılarak):

  • v1.2.3
  • 1.2.3

Avantajları v1.2.3Git belgelerinin (ve ayrıca Mercurial belgelerinin) örneklerinde bu biçimi kullanması ve Linux çekirdeği ve Git'in kendisi gibi birçok "otoritenin" kullanmasıdır. (Bahsedilen Semantik Sürüm , onu kullanıyordu ancak artık kullanmıyordu.)

Avantajları 1.2.3olduğu gitweb ya GitHub otomatik bir tarball teklif veya formun zip indir olabilir packagename-$tag.tar.gz(ve oldukça tarball gerektiğini kurulan düşünüyorum değil adlandırılabilir package-v1.2.3.tar.gz). Alternatif olarak, git describetarball sürüm numaraları oluşturmak için doğrudan kullanabilirsiniz . Resmi bir serbest bırakma süreci olmayan hafif projeler için bu olasılıklar oldukça uygun olabilir. Anlamsal Sürüm Oluşturmanın, sürüm numaralandırması için hiçbir şekilde tek veya evrensel olarak kabul edilmiş bir standart olmadığı da unutulmamalıdır. GNOME gibi kayda değer projeler ve sayısız diğer proje 1.2.3etiket adlandırma yöntemini kullanmaktadır .

Sanırım bu pozisyonları pekiştirmek için çok geç. Her zaman olduğu gibi tutarlı olun ve mantıklı olun.


Güncelleme: As belirtilen bu yorumun, GitHub şimdi etiketin sıyrılıp 'v' ile tarball adını sunmaktadır.


13
GitHub ve tarball üretimi ile ilgili olarak: artık geçerli değil. Etiketten 'v' çıkarırlar.
Hermann Bier

6
'V' ön eki, etiketleri alfabetik sırada sıralarken de oldukça kullanışlıdır. Başka etiketler de olabilir; resmi olarak bir ana depoda ya da bir geliştiricinin çalışmasını yerel olarak izlemek için olsun. 'V' önekleri ile sürüm etiketleri, ad alanının geri kalanına dağılmak yerine kendi gruplarını oluşturur.
Robie Basak

1
SemVer'in artık kullanmadığını yansıtacak şekilde cevap güncellendi v.
Adam Spires

80

Önceki 'v'nin nedeni tarihseldir. Eski SCCS (cvs, rcs) bir etiket tanımlayıcı ve bir düzeltme numarası arasında ayrım yapamadı. Etiket tanımlayıcılarının, revizyon numaralarının algılanabilmesi için sayısal bir değerle başlamaması kısıtlanmıştır.


5
+1: İyi bir ilk cevap ve en sevdiğim kitaplardan birinden bir isim :-) Belki de bir sonraki cevabınız daha güncel bir soru üzerinde olacak.
Johnsyweb

1
... ancak bu sadece eski SVCS için geçerliyse , ya bu sorunun amacı modern Git hakkında bir soru için olursa?
MestreLion

3
bu git'te hala kullanışlıdır, bu nedenle sürüm etiketlerini diğer etiket türlerinden kolayca ayırt edebilirsiniz (etiketler birçok başka şey için yararlıdır)
Benja

19

Bildiğim kadarıyla hayır.
Ancak Git, aynı ada sahip bir etikete ve bir şubeye aynı anda izin vermez; bu nedenle 1.1, 1.1işler için bir " " şubeniz varsa , " 1.1" etiketi koymayın , örneğin " v1.1" kullanın


8
Dallar için kullanın 1.1.x. Bu kadar.
vitalii

1
güzel yakaladın, teşekkürler.
RY

10

Etiket versiyonlarına Yeni paket yöneticileri danışma olmadan öneki v(gibi besteci PHP projeleri için). SemVer 2.0'da etiket spesifikasyonu hakkında hiçbir şey yoktur. Çatışmalardan kaçınmak nedeniyle kasıtlı olarak yapılır. Ancak , dokümantasyon ve metin referanslarına önek eklemeniz önerilirv . Örnek biçim v1.0.4olarak dolu yerine version 1.0.4veya ver. 1.0.4yeterli ayrıntılı ve belgelerde zarif.


22
“Tavsiye edilir…” Kim tarafından tavsiye edilir ve bu tavsiyeyi orijinal bağlamında nerede görebiliriz?
6'da bignose

8

Serbest bırakmaya özgü çalışma için sırasıyla dallar ve etiketler kullanıyoruz.

o---o-----o---o---o--- ...   master
     \   /       /
      \ /       /
       o-------o--- ...      1.6 branch

Her geliştirici taahhüt etmek üzere oldukları işin sadece ustalar için mi yoksa branşla da ilgili olup olmadığı konusunda zihinsel bir karar verir. Şube üzerinde yapılan değişikliklerin master'da yeniden birleştirildiğini görebilirsiniz, ancak master'daki bazı değişiklikler hiçbir zaman şubeye gitmez (yani, bu örnekte 1.6 sürümü için tasarlanmamış olanlar).

Serbest bırakmaya hazır olduğumuzda, onu etiketliyoruz ve son bir kez geri birleştiriyoruz ve etiketi şube ile aynı adla adlandırıyoruz, ancak belirli bir sürüm hakkında ekstra bir tanımlayıcıyla, örneğin "1.6 sürümü" olarak adlandırıyoruz. veya "1.6-beta" veya "1.6-rc2", vb.

... ------o---o---o--o---o--- ...   master
         /       /
        /       /
... ---o------(*)--- ...      1.6 branch
          1.6-release

Teşekkürler - bu nasıl dallanma yaptığınızı açıklamak için iyi bir cevap, ama aslında sadece git'te belirli bir adlandırma şemasını kullanmanın belirli (teknik) bir nedeni olsaydı. Yine de güzel diyagramlar için size bir oy verin;)
troelskn

Ah, yakaladım! Sorunuzu yanlış anladığınız için üzgünüm. Hayır, belirli bir ismi kullanmanın insan iletişimi dışında özel bir teknik nedeni yoktur. Şubelerinizi ve etiketlerinizi istediğiniz gibi adlandırabilirsiniz.
John Feminella

Sürüm 1.6 şubenize "1.6 şube" adı verilir? Şube adlarında boşlukların desteklenmediğini düşündüm.
Cees Timmerman

8

Hiçbir standart bilmiyorum. Etiket isimlerimi seçebilirim ki

VERSION = `git describe --tags`

yapı komut dosyalarında. Dolayısıyla, etiket adlandırma kuralı aslında projenin sürüm adlandırma kuralına bağlıdır.


1
git description --tags:>
Damien Carol

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.