क्या Git टैग केवल वर्तमान शाखा पर लागू होते हैं?


156

मैं वर्तमान में कई शाखाओं वाले भंडार के साथ काम कर रहा हूं।

जब मैं एक टैग बनाता हूं, तो क्या यह टैग तत्कालीन शाखा को संदर्भित करता है?

दूसरे शब्दों में: जब भी मैं एक टैग बनाता हूं, तो क्या मुझे उस शाखा के अंदर वांछित शाखा और टैग पर स्विच करने की आवश्यकता होती है ताकि टैग उस समय उस शाखा को संदर्भित करता है?

जवाबों:


151

यदि आप उदाहरण के लिए एक टैग बनाते हैं

git tag v1.0

टैग उस शाखा की सबसे हाल की कमेटी का उल्लेख करेगा जो आप वर्तमान में कर रहे हैं। आप शाखा बदल सकते हैं और वहां एक टैग बना सकते हैं।

टैग करते समय आप दूसरी शाखा का भी उल्लेख कर सकते हैं,

git tag v1.0 name_of_other_branch

जो दूसरी शाखा की सबसे हाल की कमेटी को टैग बनाएगा।

या आप कुछ भी प्रतिबद्ध के SHA1 को सीधे संदर्भित करके, टैग को कहीं भी, किसी भी शाखा में डाल सकते हैं

git tag v1.0 <sha1>

201

चार्ल्सब का उत्तर और हेल्मेट का उत्तर दोनों ही सहायक हैं, लेकिन मुझे उन्हें समझने में थोड़ा समय लगा। यहाँ इसे लगाने का एक और तरीका है:

  • एक टैग एक प्रतिबद्ध के लिए एक संकेतक है , और यह स्वतंत्र रूप से शाखाओं के मौजूद है
    • यह समझना महत्वपूर्ण है कि टैग का शाखाओं के साथ कोई सीधा संबंध नहीं है - वे केवल कभी भी एक प्रतिबद्ध की पहचान करते हैं
      • उस प्रतिबद्ध को किसी भी संख्या में शाखाओं से इंगित किया जा सकता है - अर्थात, यह किसी भी संख्या में शाखाओं के इतिहास का हिस्सा हो सकता है - जिसमें कोई भी नहीं है।
    • इसलिए, git show <tag>टैग के विवरण को देखने के लिए दौड़ने से किसी भी शाखा का कोई संदर्भ नहीं होता है, केवल उस कमिट की आईडी जिसमें टैग इंगित करता है।
      • (आईडी (वस्तु के नाम या SHA-1 आईडी उर्फ कमिट) 40-चरित्र तार हेक्स से बने होते हैं अंक है कि एक की सामग्री पर हैश हैं प्रतिबद्ध, जैसे:। 6f6b5997506d48fc6267b0b60c3f0261b6afe7a2)
  • शाखाएँ अप्रत्यक्ष रूप से ही खेल में आती हैं :
    • टैग बनाने के समय , यह लगाकर कि टैग इंगित करेगा :
      • वर्तमान शाखा की सबसे हाल की प्रतिबद्ध (उर्फ हेड) के लिए एक टैग चूक के लिए एक लक्ष्य निर्दिष्ट नहीं करना; उदाहरण के लिए:
        • git tag v0.1.0 # tags HEAD of *current* branch
      • टैग लक्ष्य को उस शाखा की सबसे हाल की प्रतिबद्धता के रूप में शाखा नाम निर्दिष्ट करना; उदाहरण के लिए:
        • git tag v0.1.0 develop # tags HEAD of 'develop' branch
      • (जैसा कि अन्य ने नोट किया है, आप टैग के लक्ष्य के रूप में स्पष्ट रूप से एक प्रतिबद्ध आईडी भी निर्दिष्ट कर सकते हैं।)
    • git describeवर्तमान शाखा का वर्णन करने के लिए उपयोग करते समय :
      • git describe [--tags]इस शाखा के इतिहास में सबसे हाल ही में [संभवत: हल्के] टैग के बाद से वर्तमान शाखा का वर्णन करता है ।
      • इस प्रकार, द्वारा संदर्भित git describeटैग समग्र रूप से हाल ही में बनाए गए टैग को प्रतिबिंबित नहीं कर सकता है

तो, दिए गए टैग के लिए (उदाहरण के लिए, v0.1.0), यह जानने के लिए कि वास्तविक निर्माण वास्तविक स्रोत में क्या है (उस स्रोत का), आपको वास्तव में उस शाखा को जानने की आवश्यकता है जो निर्माण पर आधारित थी, है ना? यानी, किसी दिए गए वचन में अलग-अलग शाखाओं में अलग-अलग वंशज हो सकते हैं, है ना?
हकीकी पार्कर

2
@HawkeyeParker: मैं अब इसमें नहीं डूबा हूं, लेकिन आपको शाखा जानने की जरूरत नहीं है, क्योंकि एक टैग एक विशिष्ट प्रतिबद्ध (जो कई शाखाओं का हिस्सा हो सकता है) की पहचान करता है, और आप वहां से जांच कर सकते हैं।
mklement0

लेकिन अगर मैं git show [tagname] करता हूं, तो यह Author and Date के ऊपर एक शाखा का नाम दिखाता है, जो टैग के विवरण देखने के लिए "चल रहे git शो <टैग" का विरोधाभास करता है, जिसमें किसी भी शाखा का कोई संदर्भ नहीं है "
ब्रैड थॉमस

39

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

इसलिए जब आप किसी कमिट को टैग करते हैं, तो यह ध्यान नहीं देता कि कौन सी कमेटी या ब्रांच को चेक किया गया है, यदि आप उसे एसएचए 1 प्रदान करते हैं जिसे आप टैग करना चाहते हैं।

मैं एक शाखा को संदर्भित करके भी टैग कर सकता हूं (यह तब शाखा की नोक को टैग करेगा), और बाद में कहता है कि शाखा का टिप कहीं और है ( git reset --hardउदाहरण के लिए), या शाखा को हटा दें। हालांकि मैंने जो टैग बनाया है वह आगे नहीं बढ़ेगा।


17
दूसरे शब्दों में, टैग बदसूरत गिट हैश के लिए सिर्फ अच्छे नाम हैं। टैग (और हैश) मौजूद नहीं है जो शाखाएं (एड) मौजूद हैं।
सी-ओटो

8

git tag <TAGNAME>बिना किसी अतिरिक्त मापदंडों के कॉल करते समय , Git आपके वर्तमान HEAD (यानी आपकी वर्तमान शाखा का HEAD) से एक नया टैग बनाएगा। जब इस शाखा में अतिरिक्त कमिट जोड़ते हैं, तो शाखा HEAD उन नए कमिट के साथ बनी रहेगी, जबकि टैग हमेशा एक ही कमिट को संदर्भित करता है।

कॉल करते समय git tag <TAGNAME> <COMMIT>आप यह भी निर्दिष्ट कर सकते हैं कि टैग बनाने के लिए कौन सा उपयोग करना है।

भले ही, एक टैग अभी भी एक निश्चित संकेतक (एक शाखा नहीं) के लिए "सूचक" है।


6

हम कुछ पिछली प्रतिबद्धताओं के लिए एक टैग बना सकते हैं:

git tag [tag_name] [reference_of_commit]

उदाहरण के लिए:

git tag v1.0 5fcdb03

1

यदि आप उस शाखा को टैग करना चाहते हैं जिसमें आप हैं, तो टाइप करें:

git tag <tag>

और शाखा को इसके साथ धक्का दें:

git push origin --tags

0

अगर आप किसी ब्रांच से एक टैग बनाना चाहते हैं जो कुछ इस तरह है release/yourbranchआदि तो आपको कुछ इस तरह का उपयोग करना चाहिए

git tag YOUR_TAG_VERSION_OR_NAME origin/release/yourbranch

उचित टैग बनाने के बाद यदि आप टैग को रिमोट पर पुश करना चाहते हैं तो कमांड का उपयोग करें

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