यहाँ एक संक्षिप्त खोल स्क्रिप्ट (बैश में परीक्षण किया गया है, अगर यह आदि राख पर काम करता है, इस बात की पुष्टि नहीं) है। यह वर्तमान में जांचा-आउट टैग के नाम के git_tag
चर सेट, या उसे खाली छोड़ करता है, तो चेकआउट टैग नहीं किया गया होगा।
git_tag=''
this_commit=`git log --pretty=format:%H%n HEAD^..`
for tag in `git tag -l`; do
tag_commit=`git log --pretty=format:%H%n tags/$tag^..tags/$tag`
if [ "$this_commit" = "$tag_commit" ]; then
# This is a tagged commit, so use the tag.
git_tag="$tag"
fi
done
टिप्पणी जेकब Narębski द्वारा:
यह समाधान सभी टैग से अधिक पाशन, और यह जांच अगर वे corrent को इंगित प्रतिबद्ध है, यानी वस्तु प्रमुख द्वारा बताया करने के लिए कम कर देता है। पाइपलाइन आदेश, अर्थात आदेशों पटकथा के लिए उपयोग करना, यह लिखा जा सकता है के रूप में:
this_commit=$(git rev-parse --verify HEAD)
git for-each-ref --format="%(*objectname) %(refname:short)" refs/tags/ |
while read tagged_object tagname
do
if test "$this_commit" = "$tagged_object"
then
echo $tagname
fi
done
यह सभी टैग है कि मौजूदा प्रतिबद्ध को इंगित प्रिंट होगा।
का एहसास नहीं किया जा सकता GIT-संस्करण-GEN स्क्रिप्ट पर एक नजर डालें (और में इसके उपयोग makefile) Git भंडार में: http://git.kernel.org/?p=git/git.git;a=blob;f=GIT-VERSION-GEN;hb=HEAD –
@jhs: मैं upvoted है ग्रेग Hewgill जवाब । मैंने 'git name-rev' के आधार पर उत्तर कम कर दिया है क्योंकि यह वापस कर सकता है उदा। 'कुछ टैग ~ 5', और 'गिट लॉग' और 'गिट टैग -एल' के संयोजन के आधार पर उत्तर क्योंकि यह बदसूरत और अक्षम है। –