मुझे वर्जनिंग के लिए टैग बनाम रिलीज़ / बीटा शाखाओं का उपयोग क्यों करना चाहिए?


114

मैं लगभग एक साल से git का उपयोग कर रहा हूं और विभिन्न संस्करणों में टैग करने के लिए टैगिंग का उपयोग करना चाहता हूं। मुझे टैग्स के साथ काम करने के लिए कमांड्स पर बहुत सारी जानकारी मिली है, लेकिन जो मैं जानना चाहता हूं, वह यह है कि टैगिंग का उपयोग सभी में करें यदि मैं सिर्फ एक नई ब्रांच बना सकता हूं, तो मुझे 1.1.0अपने दिमाग को पूरी तरह से क्लाउड नहीं करना है। git कमांड का नया सेट?

ब्रांचिंग के बजाय टैगिंग के लिए बहुत सारे अच्छे कारण हैं, लेकिन मैं जानना चाहता हूं कि वे फायदे क्या हैं।

जवाबों:


96

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

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

संपादित करें: यहाँ git का उपयोग करने का एक अच्छा तरीका है जो मैं अपनी सभी परियोजनाओं के लिए उपयोग करता हूं।


हेह (: यह वास्तव में एक महान वर्कफ़्लो है जो सभी संभावित समाधानों को शामिल करता है।
हकन डेरिल

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

2
मेरे लिए nvie विधि की सुंदरता यह थी कि मुझे शुरू में इसे समझने की आवश्यकता नहीं थी। मैं बस वही कर सकता था जो मैं करना चाहता था और कमांड टाइप करना चाहता था। कुछ समय बाद यह स्वाभाविक रूप से बन गया और कुछ दिनों के साथ मैं एक समर्थक की तरह शाखाओं के आसपास नृत्य कर रहा था!
किलरॉय

आँख बंद करके आवेदन करने के दृष्टिकोण को समझने की आशा करते हुए, यह आपको उन सभी सरलीकरणों को याद करेगा जो आप अपनी स्थिति के लिए इसे लागू कर सकते हैं। और गिटफ्लो वास्तव में ज्यादातर टीमों के लिए अनुपयुक्त है: या तो जटिल, या अत्यधिक सरल।
टूलबार 12

151

एक टैग अपरिवर्तनीय है

जबकि आप "1.0.0" नाम की एक शाखा बना सकते हैं - आप, या प्रतिबद्ध अधिकारों वाले कोई भी, तो बस उस शाखा को धक्का दे सकते हैं (जानबूझकर या नहीं) और क्या 1.0.0 का अर्थ बदल सकते हैं।

आप टैग के साथ ऐसा नहीं कर सकते, एक बार जब आप एक टैग बनाते हैं - तो यह है; टैग 1.0.0 का मतलब बिल्कुल यही है और इसे बदला नहीं जा सकता है *

यह एक टैग और एक शाखा के बीच मुख्य व्यावहारिक अंतर है

* आप एक टैग को हटा सकते हैं और फिर से बना सकते हैं, जिससे एक टैग बदल सकता है, लेकिन निश्चित रूप से दुर्घटना से नहीं।


18

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

इस प्रकार के वर्कफ़्लो पर एक अच्छा राइटअप है: http://nvie.com/posts/a-successful-git-branching-model/


18

ब्रांच और टैग एक ही चीज़ हैं (एक कमिट, aka ( "ref" के लिए पॉइंटर )), सिवाय ब्रांच के, स्वचालित रूप से अगली कमिट में चला जाता है, जबकि टैग एक ही कमिट पर हमेशा के लिए 1 रहता है ।

रिलीज़ करते समय, आप आम तौर पर उस कोड के "स्नैपशॉट" को चिह्नित करना चाहते हैं, जहाँ से वह रिलीज़ बनाया गया था, और आप चाहते हैं कि आप उस तरह से भी चिह्नित रहें जब तक आप कोड को विकसित करना जारी रखते हैं, इसलिए आप एक टैग का उपयोग करेंगे।

यदि आपने उसके लिए एक शाखा का उपयोग करने की कोशिश की, तो यह अनजाने में एक अलग प्रतिबद्ध में स्थानांतरित हो सकता है, जिसमें से रिलीज का निर्माण नहीं किया गया था।


1 जब तक आप टैग को नहीं हटाते, तब तक।

नोट: मुझे पता है कि यह एक पुराना सवाल है, लेकिन मुझे लगा कि शाखाओं और टैग के बीच समानता (और एक महत्वपूर्ण अंतर) अन्य उत्तरों में स्पष्ट रूप से उतने स्पष्ट रूप से नहीं किया गया है जितना कि हो सकता है।


प्रिय @downvoter, downvote का कोई विशेष कारण?
ब्रांको दिमित्रिजेविक

मैंने आपके उत्तर को अस्वीकार नहीं किया, लेकिन "शाखा स्वचालित रूप से अगली प्रतिबद्धताओं पर चलती है" से आपका क्या अभिप्राय है? शाखाएँ स्वचालित रूप से किसी भी प्रतिबद्ध नहीं हैं। git commitनई प्रतिबद्ध का संदर्भ देने के लिए शाखा के प्रमुख द्वारा अपडेट किए गए अपडेट को चलाना , हां, लेकिन कोई भी अन्य शाखा "स्वचालित रूप से" अगले प्रतिबद्ध पर नहीं जाती है। आपको अपने उत्तर के पहले पैराग्राफ को स्पष्ट करना चाहिए।
टूथब्रश

1
@ टूथब्रश ज़रूर, यही मेरा मतलब है "स्वचालित रूप से चलता है"। हालाँकि, शाखा वास्तव में किसी भी तरह का "अपना" नहीं करती है, यह कमिट्स के एक सेट की ओर इशारा भी नहीं करती है, यह सिर्फ एक कमिट की ओर इशारा करती है (और बाकी को कभी-कभी प्रतिबद्ध ग्राफ को चलाकर, निहित किया जा सकता है। Git के तहत, शाखा केवल एक-लाइन फ़ाइल है .git\refs\heads, जिसमें कमिट का हैश है। खुद को याद नहीं है कि "याद रखें" किस शाखा ने उन्हें बनाया। यह मर्क्यूरियल से अलग है, उदाहरण के लिए, जहां शाखा की जानकारी कमिट के मेटाडेटा में लिखी जा सकती है।
ब्रांको दिमित्रिजेविक

हां, लेकिन बहुत से लोग यह नहीं जानते हैं कि - विशेष रूप से नए लोग जो उन तरीकों के असंख्य के बारे में उलझन में हैं जो गीट के साथ चीजों को ऑनलाइन करने का सुझाव दिया गया है।
टूथब्रश

6

आप इतिहास में महत्वपूर्ण कामों को नोट करने के लिए टैग का उपयोग करते हैं। "यह सटीक कमिट था जिसका उपयोग हम उस बरसात के दिन करते थे जब बिल्ड सर्वर टूट जाता था"। यदि आप एक टैग के बजाय एक शाखा का उपयोग करते हैं, तो आप कभी भी नहीं जान सकते हैं कि आपने क्या सही उपयोग किया है। आप केवल "हम संस्करण 1.1.0 को कहीं न कहीं इस शाखा में जारी करते हैं" जानते हैं, जब तक कि आप मैन्युअल रूप से उस प्रतिबद्ध के लिए सटीक हैश नहीं लिखते हैं, यही कारण है कि आप पहली बार टैग का उपयोग करते हैं :)


4
मुझे लगता है कि वह 1.1.0 नाम की एक शाखा बनाने का मतलब है और अब इसका उपयोग नहीं कर रहा है, इसलिए यह नामित संस्करण में परियोजना का प्रतिनिधित्व करेगा।
हकन डेरिल

2

अन्य उत्तरों के अलावा, यहाँ मेरे 2 सेंट हैं।

संक्षिप्त उत्तर: रिलीज़ संस्करणों के लिए टैग का उपयोग करें

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

निम्न आलेख के अनुभाग का संदर्भ लें जो दिखाता है कि लेखक के Git वर्कफ़्लो के साथ किसी हॉटफ़िक्स को कैसे मर्ज किया जाए - https://hackernoon.com/a-branching-and-releasing-strategy-that-fits-github-flow.be1b6c48eca2

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