git - गिट टैग्स गिट शाखाओं से अलग कैसे हैं?




branch git-tag (8)

ट्रंक : विकास का मुख्य निकाय होगा, जो वर्तमान तक परियोजना की शुरुआत से उत्पन्न होगा।

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

टैग : ट्रंक या उस शाखा पर समय पर एक बिंदु होगा जिसे आप संरक्षित करना चाहते हैं। संरक्षण के लिए दो मुख्य कारण यह होंगे कि या तो यह सॉफ्टवेयर की एक बड़ी रिलीज है, चाहे अल्फा, बीटा, आरसी या आरटीएम, या यह ट्रंक पर बड़े संशोधन लागू होने से पहले सॉफ्टवेयर का सबसे स्थिर बिंदु है।

मैं समझने की कोशिश कर रहा हूं कि मुझे अपने कोड बेस को प्रबंधित करने के लिए टैग बनाम शाखाओं का उपयोग करना चाहिए।


एक टैग समय पर एक पल में किसी विशेष शाखा के संस्करण का प्रतिनिधित्व करता है। एक शाखा विकास के एक अलग धागे का प्रतिनिधित्व करती है जो समान कोड आधार पर अन्य विकास प्रयासों के साथ एक साथ चल सकती है। एक शाखा में परिवर्तन अंततः उन्हें एकजुट करने के लिए दूसरी शाखा में विलय कर दिया जा सकता है।

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

यह वास्तव में इससे अधिक जटिल है - या जटिल के रूप में आप इसे बनाना चाहते हैं - लेकिन इन उदाहरणों से आपको मतभेदों का विचार देना चाहिए।


किसी टैग को चिह्नित करने के लिए एक टैग का उपयोग किया जाता है, विशेष रूप से यह किसी शाखा पर समय पर एक बिंदु का संदर्भ देता है। एक शाखा आमतौर पर एक परियोजना में सुविधाओं को जोड़ने के लिए प्रयोग किया जाता है।


टैग या तो हस्ताक्षरित या हस्ताक्षरित किया जा सकता है; शाखाओं पर कभी हस्ताक्षर नहीं किया जाता है।

हस्ताक्षर किए गए टैग कभी भी हिल नहीं सकते क्योंकि वे क्रिप्टोग्राफिक रूप से बाध्य होते हैं (एक हस्ताक्षर के साथ) किसी विशेष प्रतिबद्धता के लिए। बिना हस्ताक्षर किए गए टैग बाध्य नहीं हैं और उन्हें स्थानांतरित करना संभव है (लेकिन टैग चलाना सामान्य उपयोग केस नहीं है)।

शाखाएं न केवल एक अलग प्रतिबद्धता में जा सकती हैं बल्कि ऐसा करने की उम्मीद है। आपको अपने स्थानीय विकास परियोजना के लिए एक शाखा का उपयोग करना चाहिए। "टैग पर" गिट भंडार में काम करने के लिए यह समझ में नहीं आता है।


शाखाएं लकड़ी से बने होते हैं और पेड़ के तने से उगते हैं। टैग पेपर (लकड़ी के व्युत्पन्न) से बने होते हैं और पेड़ के विभिन्न स्थानों से क्रिसमस के गहने की तरह लटकते हैं।

आपकी परियोजना पेड़ है, और आपकी सुविधा जो परियोजना में जोड़ा जाएगा शाखा में बढ़ेगी। जवाब शाखा है।


सरल:

टैग हमेशा एक परियोजना के एक ही संस्करण पर इंगित करने की उम्मीद है, जबकि विकास की प्रगति के रूप में प्रमुखों को आगे बढ़ने की उम्मीद है।

गिट उपयोगकर्ता मैनुअल


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


सैद्धांतिक दृष्टिकोण से:

  • टैग दिए गए संशोधन के लिए प्रतीकात्मक नाम हैं। वे हमेशा एक ही वस्तु को इंगित करते हैं (आमतौर पर: एक ही संशोधन के लिए); वे नहीं बदलते हैं।
  • शाखाएं विकास की रेखा के लिए प्रतीकात्मक नाम हैं। शाखा के शीर्ष पर नई प्रतिबद्धताएं बनाई गई हैं। शाखा सूचक प्राकृतिक रूप से आगे बढ़ता है, जो नए और नए कामों को इंगित करता है।

तकनीकी दृष्टि से:

  • टैग refs/tags/ नेमस्पेस में रहते हैं, और टैग ऑब्जेक्ट्स (एनोटेटेड और वैकल्पिक रूप से जीपीजी हस्ताक्षरित टैग) या सीधे ऑब्जेक्ट (स्थानीय नामों के लिए कम इस्तेमाल किए गए हल्के टैग) को इंगित कर सकते हैं, या पेड़ ऑब्जेक्ट या ब्लॉब ऑब्जेक्ट तक भी दुर्लभ मामलों में (उदाहरण के लिए जीपीजी हस्ताक्षर)।
  • शाखाएं refs/heads/ नेमस्पेस में रहती हैं, और केवल वस्तुओं को प्रतिबद्ध करने के लिए इंगित कर सकती हैंHEAD पॉइंटर को एक शाखा (प्रतीकात्मक संदर्भ) या सीधे एक प्रतिबद्ध (अलग सिर या अनाम शाखा) के संदर्भ में जाना चाहिए।
  • रिमोट-ट्रैकिंग शाखाएं refs/remotes/<remote>/ नेमस्पेस में रहती हैं, और रिमोट रिपोजिटरी <remote> में सामान्य शाखाओं का पालन करती हैं।

gitglossary manpage भी देखें:

डाली

एक "शाखा" विकास की एक सक्रिय रेखा है। शाखा पर सबसे हालिया प्रतिबद्धता को उस शाखा की नोक के रूप में जाना जाता है। शाखा की नोक को शाखा प्रमुख द्वारा संदर्भित किया जाता है, जो आगे बढ़ता है क्योंकि शाखा में अतिरिक्त विकास किया जाता है। एक सिंगल गिट रिपोजिटरी शाखाओं की मनमानी संख्या को ट्रैक कर सकती है, लेकिन आपका कामकाजी पेड़ उनमें से केवल एक ("चालू" या "चेक आउट" शाखा) से जुड़ा हुआ है, और उस शाखा में हेड पॉइंट्स से जुड़ा हुआ है।

टैग

एक टैग या प्रतिबद्ध वस्तु को इंगित करने वाला एक रेफरी। एक सिर के विपरीत, एक टैग द्वारा एक टैग नहीं बदला जाता है। टैग (टैग ऑब्जेक्ट्स नहीं) $GIT_DIR/refs/tags/ में संग्रहीत हैं। [...]। एक टैग आमतौर पर प्रतिबद्ध वंश श्रृंखला में एक विशेष बिंदु को चिह्नित करने के लिए प्रयोग किया जाता है।

टैग ऑब्जेक्ट

एक ऑब्जेक्ट जिसमें किसी अन्य ऑब्जेक्ट को इंगित करने वाला रेफ होता है, जिसमें एक प्रतिबद्ध ऑब्जेक्ट की तरह एक संदेश हो सकता है। इसमें एक (पीजीपी) हस्ताक्षर भी हो सकता है, जिस स्थिति में इसे "हस्ताक्षरित टैग ऑब्जेक्ट" कहा जाता है।







git-tag