एनोटेट और अननोनॉटेड टैग के बीच अंतर क्या है?


332

अगर मैं वर्तमान कमिटमेंट को टैग करना चाहता हूं। मुझे पता है कि दोनों कमांड लाइन काम करते हैं:

git tag <tagname>

तथा

git tag -a <tagname> -m '<message>'

इन आज्ञाओं में क्या अंतर है?



1
@Thilo यह वह जगह है नहीं एक सटीक डुप्लिकेट। संदर्भित प्रश्न यह है कि कब संबंधित एनोटेट करना है, न कि संबंधित झंडे के बारे में।
टॉड ए। जैकब्स

1
यह Git के प्रलेखन में बहुत अच्छी तरह से समझाया गया है: git-scm.com/book/en/Git-Basics-Tagging
Samy Dindane

TLDR अननोटेड: प्रतिबद्ध; एनोटेट: प्रतिबद्ध, लेखक, तिथि, (वैकल्पिक) टिप्पणी
एंटनी हैचकिंस

जवाबों:


254

टी एल; डॉ

आदेशों के बीच अंतर यह है कि एक आपको एक टैग संदेश प्रदान करता है जबकि दूसरा नहीं करता है। एक एनोटेट टैग में एक संदेश होता है जिसे git-show (1) के साथ प्रदर्शित किया जा सकता है, जबकि एनोटेशन के बिना एक टैग केवल एक कमिट करने के लिए एक नामित पॉइंटर है।

लाइटवेट टैग के बारे में अधिक जानकारी

प्रलेखन के अनुसार : "एक हल्का टैग बनाने के लिए, किसी भी -a, -s, या -m विकल्पों की आपूर्ति न करें, बस एक टैग नाम प्रदान करें"। एनोटेट टैग पर संदेश लिखने के लिए कुछ अलग विकल्प भी हैं:

  • जब आप उपयोग करते हैं git tag <tagname>, तो गिट वर्तमान संशोधन पर एक टैग बनाएगा, लेकिन एनोटेशन के लिए आपको संकेत नहीं देगा। यह एक संदेश के बिना टैग किया जाएगा (यह एक हल्का टैग है)।
  • जब आप उपयोग करते हैं git tag -a <tagname>, तो Git आपको एनोटेशन के लिए संकेत देगा जब तक कि आपने संदेश प्रदान करने के लिए -m ध्वज का उपयोग नहीं किया हो।
  • जब आप उपयोग करते हैं git tag -a -m <msg> <tagname>, तो Git प्रतिबद्ध को टैग करेगा और उसे दिए गए संदेश के साथ एनोटेट करेगा।
  • जब आप उपयोग करते हैं git tag -m <msg> <tagname>, तो गिट व्यवहार करेंगे जैसे कि आपने एनोटेशन के लिए -a ध्वज पारित किया और प्रदान किए गए संदेश का उपयोग करें।

मूल रूप से, यह सिर्फ यह है कि आप टैग को एनोटेशन और इसके साथ जुड़ी कुछ अन्य जानकारी चाहते हैं या नहीं।


4
क्या एक टैग "एनोटेशन" और एक प्रतिबद्ध संदेश के बीच अंतर है?
स्टीव बेनेट

3
@SteveBennett हाँ। एक टैग एनोटेशन एक प्रतिबद्ध संदेश नहीं है। आप इसे गिट-लॉग (1) के साथ नहीं देख सकते हैं; आपको git-show (1) का उपयोग करने की आवश्यकता है।
टॉड ए। जैकब्स

115
"एनोटेट" और "लाइटवेट" टैग के बीच का अंतर संदेश से परे जाता है। आपने एक संदेश के बिना टैग को एनोटेट किया हो सकता है ( git tag -a <tag> -m ''), लेकिन एक एनोटेट टैग में हमेशा टैगर (लेखक) और तारीख होती है
पिओटर फाइंडसेन

1
मेरे लिए भी ऐसा। संस्करण टैग में आमतौर पर बहुत बेकार संदेश होते हैं (क्या यह नाम से अधिक कह सकते हैं? क्या?) के लिए। दुर्भाग्य से, इस शीर्ष-मतदान जवाब में इस अंतर का उल्लेख नहीं है।
पियोट फाइंडसेन

44
ध्यान देने वाली एक और महत्वपूर्ण बात यह है कि जब आप अपने टैग को रिमोट रिपॉजिटरी का उपयोग करके धक्का देते हैं git push --follow-tags, तो केवल एनोटेट टैग को धक्का दिया जाएगा।
रात

209

एनोटेट टैग पुश करें, हल्के स्थानीय रखें

man git-tag कहते हैं:

एनोटेटेड टैग रिलीज़ के लिए होते हैं जबकि हल्के टैग निजी या अस्थायी ऑब्जेक्ट लेबल के लिए होते हैं।

और कुछ व्यवहार उनके बीच इस तरह से अंतर करते हैं कि यह सिफारिश उपयोगी है जैसे:

  • एनोटेट किए गए टैग में एक संदेश, निर्माता और तिथि शामिल हो सकती है, जो उस बिंदु से अलग है जो वे इंगित करते हैं। तो आप उन्हें एक रिलीज कमिट करने के बिना एक रिलीज का वर्णन करने के लिए उपयोग कर सकते हैं।

    लाइटवेट टैग्स में वह अतिरिक्त जानकारी नहीं होती है, और न ही इसकी आवश्यकता होती है, क्योंकि आप केवल इसे स्वयं विकसित करने के लिए उपयोग करने जा रहे हैं।

  • git push-follow- टैग केवल एनोटेट टैग को पुश करेगा
  • git describe कमांड लाइन विकल्पों के बिना केवल एनोटेट टैग देखता है

आंतरिक अंतर

  • लाइटवेट और एनोटेट दोनों टैग एक फ़ाइल है जिसके तहत .git/refs/tagsSHA-1 है

  • हल्के टैग के लिए, SHA-1 सीधे एक कमेटी को इंगित करता है:

    git tag light
    cat .git/refs/tags/light
    

    HEAD के SHA-1 के समान प्रिंट करता है।

    इसलिए कोई आश्चर्य नहीं कि उनमें कोई अन्य मेटाडेटा नहीं हो सकता।

  • एनोटेट टैग ऑब्जेक्ट डेटाबेस में एक टैग ऑब्जेक्ट को इंगित करता है।

    git tag -as -m msg annot
    cat .git/refs/tags/annot
    

    इसमें एनोटेट टैग ऑब्जेक्ट का SHA है:

    c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
    

    और तब हम इसकी सामग्री प्राप्त कर सकते हैं:

    git cat-file -p c1d7720e99f9dd1d1c8aee625fd6ce09b3a81fef
    

    नमूना उत्पादन:

    object 4284c41353e51a07e4ed4192ad2e9eaada9c059f
    type commit
    tag annot
    tagger Ciro Santilli <your@mail.com> 1411478848 +0200
    
    msg
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.4.11 (GNU/Linux)
    
    <YOUR PGP SIGNATURE>
    -----END PGP SIGNAT
    

    और यह है कि इसमें अतिरिक्त मेटाडेटा शामिल है। जैसा कि हम आउटपुट से देख सकते हैं, मेटाडेटा फ़ील्ड हैं:

    प्रारूप का अधिक विस्तृत विश्लेषण यहां मौजूद है: गिट टैग ऑब्जेक्ट का प्रारूप क्या है और इसके SHA की गणना कैसे करें?

बोनस


1
यह वर्तमान में स्वीकृत उत्तर की तुलना में बहुत स्पष्ट है। धन्यवाद।
रीस

43

बड़ा अंतर पूरी तरह से समझाया गया है यहाँ

मूल रूप से, हल्के टैग विशिष्ट कमिटर्स के लिए संकेत हैं। कोई और जानकारी नहीं बचाई गई है ; दूसरी ओर, एनोटेट टैग कर रहे हैं नियमित रूप से वस्तुओं , जो एक लेखक और एक तारीख है और कहा जा सकता है क्योंकि वे अपने स्वयं SHA कुंजी है।

तो जानते हुए भी जो टैग किया क्या और जब आप के लिए प्रासंगिक है, तो एनोटेट टैग का उपयोग करें। यदि आप अपने विकास में एक विशिष्ट बिंदु को टैग करना चाहते हैं , तो कोई फर्क नहीं पड़ता कि किसने और कब किया, फिर हल्के टैग काफी अच्छे हैं।

आम तौर पर आप एनोटेट टैग के लिए जाते हैं, लेकिन यह वास्तव में परियोजना के गिट मास्टर पर निर्भर है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.