2010-11-15 10 views
18

अब तक मेरे पास है:मैं गिट टैग से टैगर जानकारी कैसे पढ़ूं?

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

लेकिन यह नहीं पार्स करने के लिए सबसे आसान काम है। मैं git-log के --pretty विकल्प के समान कुछ की उम्मीद कर रहा था, इसलिए मैं केवल अपनी आवश्यक जानकारी को पकड़ सकता था।

कोई विचार? धन्यवाद

उत्तर

21

एक और अधिक सीधा रास्ता एक ही जानकारी प्राप्त करने की है:

git cat-file tag <tagname> 

यह एक एकल आदेश का उपयोग करता है और पाइप से बचा जाता है।

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

यह बहुत अच्छा है, धन्यवाद! अच्छा उदाहरण भी। – quornian

17

git show $TAG आपको टैग के लिए जानकारी के साथ-साथ यह प्रतिबद्ध करने के लिए जानकारी दिखाएगा।

आप कुछ है कि पहले से ही आप के लिए काम करता है, लेकिन टाइप करने के लिए बोझल है है, तो आप हमेशा एक उपनाम सेट कर सकते हैं:

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

और से कॉल करने की:

$ git showtag my-tag-name 
+1

धन्यवाद। मुझे उल्लेख करना चाहिए था कि मैं 'गिट शो --quiet --pretty = "प्रारूप:" $ TAG' तक पहुंचने में भी कामयाब रहा लेकिन यह ज्यादातर ऊपर जैसा ही है। – quornian

+0

@quornian: आप गिट की उपनाम कार्यक्षमता का उपयोग कर सकते हैं। मैंने अपने जवाब में एक उदाहरण प्रदान किया। – mipadi

4

यह पहले से ही एक लंबे समय पहले उत्तर दिया गया है, लेकिन अभी भी शीर्ष खोज परिणाम भले ही यह सबसे अच्छा समाधान नहीं है अब और इसलिए यहाँ यह जाता है,:

मैं इस प्रकार एक bash स्क्रिप्ट में इस का इस्तेमाल किया :

कमान:

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

--shell घ शैल स्क्रिप्ट के लिए उद्धरण oes। --perl, --python और --tcl भी है। आप एक कमांड लाइन विकल्प के रूप में पूरे प्रारूप लिखने के लिए नहीं करना चाहती हैं, तो आप भी यह एक file.txt में डाल दिया और यह कर सकते हैं:

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

आउटपुट:

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. 
' 

अधिक जानकारी यहां: https://git-scm.com/docs/git-for-each-ref

संबंधित मुद्दे