अगर मैं वर्तमान कमिटमेंट को टैग करना चाहता हूं। मुझे पता है कि दोनों कमांड लाइन काम करते हैं:
git tag <tagname>
तथा
git tag -a <tagname> -m '<message>'
इन आज्ञाओं में क्या अंतर है?
अगर मैं वर्तमान कमिटमेंट को टैग करना चाहता हूं। मुझे पता है कि दोनों कमांड लाइन काम करते हैं:
git tag <tagname>
तथा
git tag -a <tagname> -m '<message>'
इन आज्ञाओं में क्या अंतर है?
जवाबों:
आदेशों के बीच अंतर यह है कि एक आपको एक टैग संदेश प्रदान करता है जबकि दूसरा नहीं करता है। एक एनोटेट टैग में एक संदेश होता है जिसे 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 ध्वज पारित किया और प्रदान किए गए संदेश का उपयोग करें।मूल रूप से, यह सिर्फ यह है कि आप टैग को एनोटेशन और इसके साथ जुड़ी कुछ अन्य जानकारी चाहते हैं या नहीं।
git tag -a <tag> -m ''
), लेकिन एक एनोटेट टैग में हमेशा टैगर (लेखक) और तारीख होती है ।
git push --follow-tags
, तो केवल एनोटेट टैग को धक्का दिया जाएगा।
एनोटेट टैग पुश करें, हल्के स्थानीय रखें
man git-tag
कहते हैं:
एनोटेटेड टैग रिलीज़ के लिए होते हैं जबकि हल्के टैग निजी या अस्थायी ऑब्जेक्ट लेबल के लिए होते हैं।
और कुछ व्यवहार उनके बीच इस तरह से अंतर करते हैं कि यह सिफारिश उपयोगी है जैसे:
एनोटेट किए गए टैग में एक संदेश, निर्माता और तिथि शामिल हो सकती है, जो उस बिंदु से अलग है जो वे इंगित करते हैं। तो आप उन्हें एक रिलीज कमिट करने के बिना एक रिलीज का वर्णन करने के लिए उपयोग कर सकते हैं।
लाइटवेट टैग्स में वह अतिरिक्त जानकारी नहीं होती है, और न ही इसकी आवश्यकता होती है, क्योंकि आप केवल इसे स्वयं विकसित करने के लिए उपयोग करने जा रहे हैं।
git describe
कमांड लाइन विकल्पों के बिना केवल एनोटेट टैग देखता हैआंतरिक अंतर
लाइटवेट और एनोटेट दोनों टैग एक फ़ाइल है जिसके तहत .git/refs/tags
SHA-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 की गणना कैसे करें?
बोनस
यदि कोई टैग एनोटेट है, तो निर्धारित करें:
git cat-file -t tag
आउटपुट
commit
लाइटवेट के लिए, चूंकि कोई टैग ऑब्जेक्ट नहीं है, यह सीधे प्रतिबद्ध को इंगित करता हैtag
एनोटेट के लिए, क्योंकि उस मामले में एक टैग ऑब्जेक्ट हैकेवल हल्के टैग सूचीबद्ध करें : मैं सभी हल्के टैग कैसे सूचीबद्ध कर सकता हूं?
बड़ा अंतर पूरी तरह से समझाया गया है यहाँ ।
मूल रूप से, हल्के टैग विशिष्ट कमिटर्स के लिए संकेत हैं। कोई और जानकारी नहीं बचाई गई है ; दूसरी ओर, एनोटेट टैग कर रहे हैं नियमित रूप से वस्तुओं , जो एक लेखक और एक तारीख है और कहा जा सकता है क्योंकि वे अपने स्वयं SHA कुंजी है।
तो जानते हुए भी जो टैग किया क्या और जब आप के लिए प्रासंगिक है, तो एनोटेट टैग का उपयोग करें। यदि आप अपने विकास में एक विशिष्ट बिंदु को टैग करना चाहते हैं , तो कोई फर्क नहीं पड़ता कि किसने और कब किया, फिर हल्के टैग काफी अच्छे हैं।
आम तौर पर आप एनोटेट टैग के लिए जाते हैं, लेकिन यह वास्तव में परियोजना के गिट मास्टर पर निर्भर है।