2016-11-08 7 views
13

मैं git tag टाइप करें और इसे अपने वर्तमान टैग को सूचीबद्ध करता है:मैं कैसे बता सकता हूं कि दिया गया गिट टैग एनोटेटेड या लाइटवेट है या नहीं?

1.2.3 
1.2.4 

मैं कैसे निर्धारित कर सकते हैं जो इनमें से टिप्पणी की जाती है, और जो हल्के है?

+0

क्या आपके लिए कुछ भी गिट टैग-एन' करता है? – Oxymoron

+0

एक टैग एनोटेशन एक प्रतिबद्ध संदेश नहीं है। आप इसे गिट-लॉग (1) के साथ नहीं देख सकते हैं; आपको गिट-शो (1) – Oxymoron

+0

गिट टैग का उपयोग करने की आवश्यकता है -n दिलचस्प था! लेकिन यह मेरी विशिष्ट समस्या के लिए बुलेटप्रूफ नहीं है। –

उत्तर

10

git for-each-ref आपको बताता है कि डिफ़ॉल्ट रूप से प्रत्येक रेफरी क्या है, इसकी आईडी और उसके प्रकार। इसे केवल टैग तक सीमित करने के लिए, git for-each-ref refs/tags करें।

+0

बिल्कुल सही, धन्यवाद! –

+1

जब मैंने यह कोशिश की, [आउटपुट] (http://imgur.com/b00mvjr) प्रत्येक टैग को 'प्रतिबद्ध' या 'टैग' के रूप में सूचीबद्ध करता है। मुझे लगता है कि क्रमशः हल्के और एनोटेटेड टैग इंगित करते हैं? –

+1

@ स्टेवेनवस्सेलारो यह सही है, एक हल्का टैग सिर्फ स्थानीय रेफरी "रेफरी/टैग" शुरू होता है, यह कुछ भी हो सकता है। ऑब्जेक्ट डीबी में एक टैग सिर्फ एक नाम से अधिक है और किसी अन्य ऑब्जेक्ट की तरह भेज दिया जा सकता है। गिट ऑब्जेक्ट डीबी में प्रत्येक टैग के लिए स्थानीय रेफ बनाता है, इसलिए भेद कुछ हद तक धुंधला हो जाता है, आम तौर पर किसी को भी वर्कफ़्लो की प्रोजेक्ट के लिए सेट अप करने के बाद किसी को भी परवाह नहीं करना पड़ता है। – jthill

5

git describe

https://git-scm.com/docs/git-describe

डिफ़ॉल्ट रूप से उपयोग करने का प्रयास (--all बिना या --tags) Git केवल एनोटेट शो टैग का वर्णन करें।

5

टैग का नाम प्राप्त करें (foo कहें) और फिर git cat-file -t foo करें। यदि यह एक एनोटेटेड टैग है, तो cat-file आपको बताएगा कि यह एक "टैग" है। यदि यह एक साधारण टैग है, cat-file आपको बताएगा कि यह "प्रतिबद्ध" है।

अद्यतन: जैसा कि ऑक्सीमोरन ने अपनी टिप्पणी में कहा था, git show भी काम करता है लेकिन यह आपको इस तरह के टैग की तुलना में अधिक जानकारी देता है।

14

git show-ref -d --tags कमांड प्रकार यह करता है, चूंकि हल्के टैग आउटपुट में एक बार होते हैं, और एनोटेटेड टैग दो बार होते हैं। साथ ही, केवल एनोटेटेड टैग्स में आउटपुट में "^ {}" ड्रेफरेंस ऑपरेटर शामिल है।

588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.3 
7fe2caaed1b02bb6dae0305c5c0f2592e7080a7a refs/tags/1.2.4 
588e9261795ec6dda4bd0a881cf1a86848e3d975 refs/tags/1.2.4^{} 

और वह उत्पादन की तुलना में यूनिक्स तरह, SED, कटौती के साथ मालिश किया जा सकता है, और uniq उत्पादन अधिक पठनीय बनाने के लिए आदेश: (मेरे सवाल से)

git show-ref -d --tags  | 
cut -b 42-     | # to remove the commit-id 
sort       | 
sed 's/\^{}//'    | # remove ^{} markings 
uniq -c      | # count identical lines 
sed 's/2\ refs\/tags\// a /' | # 2 identicals = annotated 
sed 's/1\ refs\/tags\//lw /' 

अपने मूल रेपो के लिए यह आउटपुट इस:

lw 1.2.3 
    a 1.2.4 

(जैसे, 1.2.3 गया था "हल्के" और "1.2.4" एनोटेट गया था)।

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

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