Sürümler için genellikle v1.1.0 gibi bir şeyle etiketlerim. Derleme betiğim sırasında, geçerli git bilgisini içeren bir fwVersion.c dosyası oluşturuyorum. Şu anda dosyada commit ve şube bilgilerim var, ancak etiketi eklemek istiyorum.
Mümkün mü?
Yanıtlar:
İle ilgili belgeleri kontrol edin git describe. Belirli bir işlemeye en yakın etiketi bulur (bu, commit'in bir atasına işaret eden bir etikettir) ve bu kaydı etiket açısından açıklar.
Yalnızca kaydetmenin bir etiketle işaret edilip edilmediğini bilmek istiyorsanız, şu çıktıyı kontrol edebilirsiniz:
git describe --exact-match <commit-id>
git describe --all --exact-match `git rev-parse HEAD`
git describe --tags --abbrev=0 REVetiketin üzerinde çöp olmasını istemediğinizde yararlı olacaktır.
git describe --all(şu anda kontrol edilen taahhüt için) veya git describe --all <commit>her zaman istediğim her şeyi yaptım.
İstediğiniz, yürütmeyi içeren ilk etiketse, o zaman:
git describe --contains <commit>
en iyi cevabı verir IMO. Büyük bir depodaki eski bir commit üzerinde "git tag --içerir" kullanmaktan daha sık etiketlere sahipseniz, çalışması biraz zaman alabilir ve size bu commit'i içeren tüm etiketleri verir.
Bu git description biçimi çok hızlı çalışır ve size commit'i içeren ilk etiket olan ve commit'inizin ne kadar geriye gittiği tek bir çıktı değeri verir.
Buna ne dersin?
git tag --points-at <commit-id>
Size verilen işlemenin sahip olduğu tüm etiketleri git describeverir (ancak size yalnızca bir tane verir) ve alt kayıtlardaki etiketleri git tag --containsiçermez (yaptığı gibi ).
Bu bilgileri kılavuzda bulabilirsiniz
git tag --contains <commit>
Bana istediğimi vermek için iki en iyi cevabın kombinasyonunu buldum:
git describe --tags --exact-match <commit-id>
Bu size YALNIZCA bu işlem için ve ek açıklamasız olanlar için olan etiketi verir. Etiketleri bulmak istediğinizde ve biçimlendirmeyi çıkarmak için endişelenmediğinizde kullanışlıdır (örneğin Jenkins için).
Örneğin. $ git describe --tags --exact-match head~2
Sana verir:
$ ReleaseBeta
Bazı cevapları birleştirmek:
git tag --contains [<ref>]
ve
git tag --points-at [<ref>]
ya da sadece
git tag
aynı şekilde davranır, belirtilen ref için herhangi bir (ve tüm) etiketleri veya belirtilmemişse geçerli kaydetmeyi yazdırır.
git describe --tags [<ref>]
burada <ref>varsayılan olarak geçerli kaydetme, kaydetmeyle ilişkili hiçbir etiket yoksa 128 ile çıkar ve kaydetmeyle ilişkili bir etiketi yazdırır (bir kalıp yok gibi).
git describe [<ref>]--tagsyalnızca açıklamalı etiketleri yazdırması dışında olduğu
gibi davranır .
Seçeneğinin --containssağlanması describe, belirtilen kaydetmenin bir atası ile ilişkili bir etiketi yazdırır. Örneğin
$ git init
Initialized empty Git repository in /tmp/test
$ git commit -m one --allow-empty
[master (root-commit) 7fdfff2] one
$ git commit -m two --allow-empty
[master cd5f8f1] two
$ git tag -am foo foo
$ git tag bar
$ git log --format=oneline
cd5f8f1f4f29eb164f83e224768ccaf37fe170ed (HEAD -> master, tag: foo, tag: bar) two
7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1 one
$ git describe 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
fatal: No tags can describe '7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1'.
Try --always, or create some tags.
$ git describe --contains 7fdfff2ce5e3347f8eee4c9f2413dbd4e90060e1
bar~1
git describe --tags <commit-id>açıklama yapılmamış etiketler için