2009-09-24 4 views
56

Git'te bir taahhüt numarasıyla ilişkilendirilmiş etiketi elde etmenin bir yolu var mı?Belirli bir işlem için etiket bilgilerini bulma

Sürümler için genellikle v1.1.0 gibi bir etiketle etiketlerim. Oluşturma komutum sırasında geçerli git bilgisini içeren bir fwVersion.c dosyası oluşturuyorum. Şu anda dosyada taahhüt ve şube bilgileri var, ancak etiketi eklemek istiyorum.

Bu mümkün mü?

cevap

73

Kontrol git describe belgelerine bu bilgileri bulabilirsiniz. Belirli bir taahhütte en yakın etiketi bulur (bu, taahhütün atası anlamına gelen bir etikettir) ve bu etiketle ilgili işlem yapmayı tanımlar.

sadece o zaman çıktısını kontrol edebilirsiniz bir etikete tarafından gösterilen taahhüt olmadığını bilmek isterseniz:

git describe --exact-match <commit-id> 
+0

Bu mükemmel, teşekkürler! – wes

+13

'git açıklaması --tags ' etiketsiz yazılar için –

+1

Bunu seviyorum. Spefically, şu anki revizyondan bir insanı okunabilir hale getirebileceğimi seviyorum: 'git describe --all --exact-match \' git rev-parse HEAD \ '' – dsummersl

12

Manuel

git tag --contains <commit> 
+2

Bu, verilen işlemi içeren tüm etiketleri (yani, verilen işlemin alt öğelerini işaret eden etiketler) listeleyecektir; bu nedenle, belirli bir işlem için tek bir etiket veya hangi etikete en yakın olduğu hakkında bilgi vermeyebilir Listede sadece tek bir taahhüt bulunmadığı sürece. –

+3

Charles Bailey'in dediği gibi, tam da aradığım şey bu değil. Belki de RTFM :) – wes

+1

yapmalısınız. Yanlış cevap için özür dilerim. Ne zaman kontrol ettiğimi sorduğun şeyi yapıyor gibiydi. RTFM yaptım, sadece yanlış problemi çözdüm. Umut Bailey, size yardımcı olan bir çözüm önerdi. – dharga

46

ne istediğini daha sonra işlemek içeren ilk etiket ise:

git describe --contains <commit> 

en iyi yanıtı IMO'yu verir. Büyük bir depoda eski bir işlemde "git tag --contains" ifadesini kullanmaktan daha sık etiketleriniz varsa, biraz zaman alabilir ve size bu işlemi içeren tüm etiketleri verir.

Git formunun bu biçimi çok hızlı bir şekilde çalışır ve size, işlenmeyi içeren ilk etiket olan ve işleminizin ne kadar geri döndüğü olan tek bir çıktı değeri verir.

git describe --tags --exact-match <commit-id> 

Bu veriyor:

6

üzgünüm sadece bu yüzden Yanıt göndererek Yorum eklemek nasıl bilemedim ... ben hem üstleri açılan şöyle ne istediğini bana vermek cevap buldu SADECE bu taahhüt için ve ek açıklamaları olmayan etiketler. Etiketleri bulmak istediğinizde ve biçimlendirmeyi kaldırmak için endişelenmeyin (örneğin, Jenkins için). Örn.,

örn. $ git describe --tags --exact-match head~2

size verir:

bu konuda
$ ReleaseBeta 
8

nasıl?

git tag --points-at <commit-id>

O verilen (git describe sadece birini verir oysa) sahiptir taahhüt tüm etiketler verir ve soyundan taahhüt üzerine (gibi git tag --contains yapar) etiketlerini içermez.