2010-11-15 18 views
18

Şimdiye kadar var:Etiket etiketini git etiketinden nasıl okuyabilirim?

git rev-parse <tagname> | xargs git cat-file -p 

ama bu ayrıştırılması en kolay şey değil. Ben git-log '--pretty seçeneğine benzer bir şey umuyordum, bu yüzden ihtiyacım olan bilgiyi alabiliyordum.

Herhangi bir fikir? Teşekkürler

cevap

21

bir daha doğrudan bir şekilde Aynı bilginin alınması:

git cat-file tag <tagname> 

Bu, tek bir komut kullanır ve boruyu önler. Bu zaten uzun zaman önce yanıtlandı

if git rev-parse $TAG^{tag} -- &>/dev/null 
then 
    # Annotated tag 
    COMMIT=$(git rev-parse $TAG^{commit}) 
    TAGGER=($(git cat-file tag $TAG | grep '^tagger')) 
    N=${#TAGGER} # Number of fields 
    DATE=${TAGGER[@]:$N-2:2} # Last two fields 
    AUTHOR=${TAGGER[@]:1:$N-3} # Everything but the first and last two 
    MESSAGE=$(git cat-file tag $TAG | tail -n+6) 
elif git rev-parse refs/tags/$TAG -- &>/dev/null 
then 
    # Lightweight tag - just a commit, basically 
    COMMIT=$(git rev-parse $TAG^{commit}) 
else 
    echo "$TAG: not a tag" >&2 
fi 
+0

Çok daha hoş, teşekkürler! Güzel örnek de. – quornian

17

git show $TAG size, etiketin ilgili bilgileri gösterir, hem de onu işaret işlemek. Zaten sizin için çalışan, ancak yazın hantal bir şey varsa

, her zaman bir takma ad ayarlayabilirsiniz:

[alias] 
     showtag = !sh -c 'git rev-parse $1 | xargs git cat-file -p' - 

Ve ile diyoruz:

$ git showtag my-tag-name 
+1

teşekkürler. Ben de 'git show --quiet --pretty = "format:" $ TAG "kadar uzaklaşmayı başardığımı belirtmeliydim ama bu çoğunlukla yukarıdakiyle aynı. – quornian

+0

@quornian: Git'in takma ad işlevini kullanabilirsiniz. Cevabımda bir örnek verdim. – mipadi

4

ama yine de en iyi çözüm olmadığı halde üst arama sonucu işte gidiyor, artık aşağıdaki gibidir:

Bir bash komut kullandı :

Komut:

git for-each-ref refs/tags/$TAG --shell --format=' 
TAG=%(refname) 
COMMIT=%(objectname) 
TAGGER=%(tagger) 
EMAIL=%(taggeremail) 
DATE=%(taggerdate) 
CONTENTS=%(contents) 
' 

--shell d Shell betikleri için alıntı yapar. Orada da --perl, --python ve --tcl. Eğer bir komut satırı seçeneği olarak bütün formatını yazmak istemiyorum , ayrıca bir dosya.txt'daki koymak ve bunu yapabilirsiniz:

git for-each-ref refs/tags/<tag> --shell --format="$(cat file.txt)" 

Çıktı:

TAG='refs/tags/4.1.0-RC1' 
COMMIT='973cc103f942330550866588177fe53ea5765970' 
TAGGER='ml_' 
EMAIL='<[email protected]>' 
DATE='Fri Sep 16 14:14:50 2016 +0200' 
CONTENTS='Release 3: 
* INSTALL.md added. 
* GIT.md modified. 
' 
burada

fazla bilgi: https://git-scm.com/docs/git-for-each-ref

İlgili konular