Sürüm oluşturma için neden etiketleri ve yayın / beta dalları kullanmalıyım?


114

Git'i yaklaşık bir yıldır kullanıyorum ve farklı sürümlerde etiketleme yapmak için etiketlemeyi kullanmak istiyorum. Etiketlerle çalışmak için kullanılacak komutlar hakkında çok fazla bilgi buldum, ancak bilmek istediğim şey, adında yeni bir dal oluşturabilirsem 1.1.0ve aklımı bir bütünle bulandırmak zorunda kalmazsam neden etiketlemeyi kullandığım. yeni git komutları seti?

Dallara ayırmak yerine etiketlemek için pek çok iyi neden olmalı, ancak bu avantajların ne olduğunu bilmek istiyorum.

Yanıtlar:


96

Etiketler esas olarak, bir kaydetmeyi etiketleyerek projenin belirli sürümüne ileride başvurmak için kullanılır. Elbette şubeleri her zaman kullanabilirsiniz, ancak sürümleri çok değiştirirseniz, çok sayıda kullanılmayan veya nadiren kullanılan dallarla karşılaşacaksınız.

Pratik olarak, etiketler yine de dalsız dallardır, sadece karmaşıklığı azaltmak için projenin belirli bir sürümüne başvurmanın bir yolunu ekler.

Düzenleme: İşte tüm projelerim için kullandığım git'i kullanmanın güzel bir yolu.


Heh (: Olası tüm çözümleri kapsayan gerçekten harika bir iş akışı.
Hakan Deryal

evet, nvie yöntemini daha önce görmüştüm ve oldukça şaşkına dönmüştüm. Yine de, anladığımda uygulamayı arzuluyorum. Sanırım bir etiketle kodu yanlışlıkla değiştiremez, tamamlayamaz ve yine de aynı sürümde olamazsınız. Dallarda yanlışlıkla gerçekleşebilir. Etiketler, sürümleri işaretlemenin daha güvenli bir yolu gibi görünüyor.
wufoo

2
Benim için nvie yönteminin güzelliği, başlangıçta anlamama gerek kalmamasıydı. Yapmak istediğim şeyin bölümünü bulabilir ve komutları yazabilirdim. Birkaç kez sonra doğal bir hal aldı ve birkaç gün sonra bir profesyonel gibi dalların etrafında dans ediyordum!
Killroy

Gitflow yaklaşımını sadece körü körüne uygulayarak anlamayı ummak, durumunuz için uygulayabileceğiniz tüm basitleştirmeleri kaçırmanıza neden olacaktır. Ve gitflow gerçekten de çoğu takım için uygun değildir: aşırı karmaşık veya aşırı basit.
toolforger

151

Bir etiket değişmezdir .

Oysa "1.0.0" adında bir dal oluşturabilirsiniz - siz veya kesinleştirme haklarına sahip herhangi biri daha sonra o şubeye (kasıtlı olarak veya kasıtlı olarak) itebilir ve 1.0.0'ın ne anlama geldiğini değiştirebilirsiniz.

Bunu bir etiketle yapamazsınız, bir kez bir etiket oluşturduğunuzda - işte bu; Etiket 1.0.0, tam olarak bunun anlamına gelir ve değiştirilemez * .

Bu, bir etiket ve dal arasındaki temel pratik farktır

* Bir etiketi silebilir ve yeniden oluşturabilirsiniz, böylece bir etiketi değiştirebilirsiniz, ancak kesinlikle kazara değil.



18

Dal ve etiket aynı şeydir (bir commit için işaretçi, "ref" olarak da bilinir ), tek fark, etiket aynı commit üzerinde sonsuza kadar 1 kalırken dallanma otomatik olarak bir sonraki işleme hareket eder .

Bir sürüm oluştururken, genellikle o sürümün oluşturulduğu kodun "anlık görüntüsünü" işaretlemek istersiniz ve siz kodu geliştirmeye devam ederken bile bu şekilde işaretli kalmasını istersiniz, böylece bir etiket kullanırsınız.

Bunun için bir dal kullanarak çalıştı, istem dışı olarak serbest bırakma edildiği farklı bir taahhüt, hareket olabilir değil inşa etti.


1 Tabii ki etiketi silmediğiniz sürece.

NOT: Bunun eski bir soru olduğunun farkındayım, ancak dallar ve etiketler arasındaki benzerliğin (ve önemli bir farkın) diğer yanıtlarda olabildiğince net bir şekilde ortaya çıkmadığını hissettim.


Sevgili @downvoter, olumsuz oy için belirli bir neden var mı?
Branko Dimitrijevic

Cevabınızı olumsuz oylamadım ama "dal otomatik olarak bir sonraki işleme taşınır" ile ne demek istiyorsunuz? Şubeler otomatik olarak herhangi bir işleme aktarılmaz. git commitGüncellemeleri çalıştırmak , teslim alınan dalın kafası yeni kaydetmeye başvurmak için evet, ancak başka hiçbir dal bir sonraki işleme "otomatik olarak" geçmez. Cevabınızın ilk paragrafını netleştirmelisiniz.
Diş Fırçası

1
@Toothbrush Elbette, "otomatik hareket" derken bunu kastettim. Bununla birlikte, şube gerçekten herhangi bir işleme "sahip değildir", hatta bir işlem kümesine işaret etmez, yalnızca bir kesinliğe işaret eder (ve geri kalanı, bazen kesin olmayan bir şekilde commit grafiğini yürüterek ima edilebilir). Git altında, dallanma, .git\refs\headscommit'in karmasını içeren, altındaki tek satırlık bir dosyadır . Taahhütler kendilerini hangi dalın yarattığını "hatırlamazlar". Bu, Mercurial'den farklıdır, örneğin şube bilgilerinin commit'in meta verilerine yazılabildiği yer.
Branko Dimitrijevic

Evet, ama pek çok insan bunu bilmiyor - özellikle internette Git ile bir şeyler yapmak için önerilen sayısız yol hakkında kafası karışık olan yeni gelenler.
Diş Fırçası

6

Tarihteki önemli işlemleri not etmek için etiketleri kullanırsınız. "Bu, derleme sunucusu bozulduğunda yağmurlu perşembe günü bu sürüm için kullandığımız kesin işlemdi". Etiket yerine dal kullanırsanız, tam olarak hangi kesinlemeyi kullandığınızı asla bilemezsiniz. O commit için tam hash'i manuel olarak yazmadığınız sürece, yalnızca "1.1.0 sürümünü bu şubede bir yerde yayınladık" biliyorsunuz, bu yüzden ilk etapta etiketleri kullanıyorsunuz :)


4
1.1.0 adında bir şube oluşturup artık kullanmamayı kastettiğini düşünüyorum, yani projeyi adlandırılmış sürümde temsil edecek.
Hakan Deryal

2

Diğer cevaplara ek olarak, işte benim 2 sentim.

Kısa Cevap: Yayın sürümleri için etiketleri kullanın

Uzun Cevap: Özellikle yayın sürümleri için etiket kullanmanın dalları kullanmaktan daha iyi olduğuna inanıyorum. Yeniden yüklemeyi güncellemeniz gerekiyorsa, etiketli kaydetmeden ayrılın ve bu dalda (büyük olasılıkla bir düzeltme dalı) çalışmayı bitirdikten sonra, yeni sürümle bu yeni dalın başında yeni bir etiket oluşturun. Ardından, bu dalı ana / geliştirici olarak birleştirin, çünkü bir sürüm sürümünü muhtemelen kaynak kodunuzla birleştirilmesi gereken bir düzeltme olmadığı sürece değiştirmemelisiniz. Daha sonra artık gerekli olmadığı için bu dalı silin. Bu yeni sürüme başka bir düzeltme uygulamanız gerekirse, aynı adımları tekrarlayın.

Bir düzeltmenin yazarın Git iş akışıyla nasıl birleştirileceğini gösteren aşağıdaki makalenin bölümüne bakın - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow-be1b6c48eca2

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.