सर्वश्रेष्ठ शाखाओं में जाना और टैगिंग करना


140

मैं वर्तमान में Pro Git पढ़कर Git का उपयोग करना सीख रहा हूं । अभी मैं ब्रांचिंग और टैग्स के बारे में सीख रहा हूं। मेरा सवाल यह है कि मुझे एक शाखा का उपयोग कब करना चाहिए और मुझे एक टैग का उपयोग कब करना चाहिए?

उदाहरण के लिए, मान लें कि मैं किसी प्रोजेक्ट के संस्करण 1.1 के लिए एक शाखा बनाता हूं। जब मैं इस संस्करण को समाप्त और जारी करता हूं, तो क्या मुझे रिलीज संस्करण को चिह्नित करने के लिए शाखा छोड़नी चाहिए? या मुझे एक टैग जोड़ना चाहिए? यदि मैं एक टैग जोड़ता हूं, तो क्या मुझे संस्करण शाखा को हटा देना चाहिए (यह मानते हुए कि इसे मास्टर या किसी अन्य शाखा में विलय कर दिया गया है)?

जवाबों:


161

संक्षेप में: सर्वश्रेष्ठ अभ्यास शाखा है, अक्सर विलय और हमेशा सिंक में रखें

मास्टर शाखा से अलग कोड में अपना कोड रखने के बारे में बहुत स्पष्ट रूकावटें हैं:

  1. आप बड़े या विघटनकारी परिवर्तन का कार्यान्वयन करने वाले हैं
  2. आप कुछ परिवर्तन करने वाले हैं जिनका उपयोग नहीं किया जा सकता है
  3. आप किसी ऐसी चीज़ पर प्रयोग करना चाहते हैं जो आपको यकीन न हो कि यह काम करेगी
  4. जब आपको बाहर शाखा करने के लिए कहा जाता है, तो दूसरों के पास कुछ ऐसा हो सकता है जो उन्हें मास्टर में करने की आवश्यकता होती है

अंगूठे का नियम बाहर शाखाओं में बंटने के बाद है, आपको मास्टर शाखा के साथ तालमेल रखना चाहिए। क्योंकि अंततः आपको इसे वापस मास्टर में विलय करने की आवश्यकता है। वापस विलय करते समय संघर्षों की एक बड़ी जटिल गड़बड़ी से बचने के लिए, आपको अक्सर, अक्सर विलय करना चाहिए।

अच्छी प्रथाओं का पालन करें

विंसेंट ड्रेज़ेन द्वारा एक सफल गिट ब्रांचिंग मॉडल में अच्छे सुझाव हैं। यदि यह ब्रांचिंग मॉडल आपसे अपील करता है कि आप git में फ्लो एक्सटेंशन पर विचार करें । दूसरों ने प्रवाह के बारे में टिप्पणी की है

प्रथाओं को टैग करना

जैसा कि आप पहले से ही जानते हैं, Git आपको 1.0-2-g1ab3183 जैसे पहचानकर्ता देता है, लेकिन वे टैग नहीं हैं! टैगिंग को git टैग के साथ किया जाता है, और जो टैग git टैग का उपयोग करके बनाए जाते हैं वे प्रतिबद्ध पहचानकर्ताओं के लिए आधार बनाते हैं। दूसरे शब्दों में, Git में आप शाखाओं को टैग नहीं करते हैं। आप कमिट्स टैग कर रहे हैं। यह कहना सही है कि टैग केवल एक टिप्पणी करने के लिए एक एनोटेट सूचक है।

इसे प्रदर्शित करने वाले व्यावहारिक उदाहरण को देखें,

                        / - [v1.0]
                       v
———————————————————- S ---.- A <- गुरु
                         \ 
                           \ _---- बी <- परीक्षण

चलो 'S' को 'v1.0' टैग द्वारा इंगित किया जाना चाहिए। यह प्रतिबद्धता शाखा 'मास्टर' और शाखा 'परीक्षण' दोनों पर है। यदि आप कमिटमेंट 'ए' ('मास्टर' शाखा के शीर्ष) पर " गिट डिस्क्रिप्शन " चलाते हैं, तो आपको कुछ ऐसा मिलेगा v1.0-2-g9c116e9। यदि आप कमिटमेंट 'ए' (उर्फ 'टेस्ट' शाखा) के शीर्ष पर "git description" चलाते हैं, तो आपको कुछ ऐसा मिलेगा v1.0-2-g3f55e41, जो कि डिफ़ॉल्ट git-description कॉन्फ़िगरेशन के साथ है। ध्यान दें कि यह परिणाम थोड़ा अलग है। v1.0-2-g9c116e9इसका मतलब है कि हम 9c116e9टैग के बाद क्रमबद्ध SHA-1 आईडी , 2 के साथ प्रतिबद्ध हैं v1.0। कोई टैग नहीं है v1.0-2!

यदि आप चाहते हैं कि आपका टैग केवल शाखा 'मास्टर' पर दिखाई दे, तो आप 'परीक्षण' शाखा के शाखा बिंदु के बाद नई कमिट (उदाहरण के लिए केवल GIT-VERSION-FILE में डिफ़ॉल्ट / फ़ॉलबैक संस्करण की जानकारी अपडेट कर सकते हैं) बना सकते हैं। यदि आप टैग का परीक्षण 'शाखा' जैसे 'v1.0.3' पर करते हैं, तो यह केवल 'परीक्षण' से दिखाई देगा।

संदर्भ

मैंने बहुत से, बहुत से, उपयोगी ब्लॉग और पोस्ट सीखे हैं। हालाँकि, जो पेशेवर रूप से सचित्र हैं वे दुर्लभ हैं। इस प्रकार, मैं एक पोस्ट की सिफारिश करना चाहूंगा - @nvie द्वारा एक सफल गिट ब्रांचिंग मॉडल । मैंने उसका दृष्टांत उधार लिया है :)

यहां छवि विवरण दर्ज करें


4
1.0-2-g1ab3183 एक पहचानकर्ता है जिसे git से उपलब्ध जानकारी से git वर्णन द्वारा निर्मित किया गया है, लेकिन इसे git पहचानकर्ता कहना थोड़ा बहुत है। एसआईए हैश द्वारा गिट की पहचान करता है; टैग और शाखाएं मानव निर्माण हैं जो मददगार तरीके से नज़र रखती हैं। जैसे, जब आपको लगता है कि एक मानव एक दिन एक सुविधाजनक बुकमार्क को कमिट करने की इच्छा रखेगा, तो एक टैग बनाएं।
शुभम

2
गिट ब्रह्मांड में बहु-आयामीता का एक अद्भुत चित्रण। सुंदर। धन्यवाद
टोपे

यह ध्यान देने योग्य है कि कई परियोजनाओं को इस आरेख में दिखाए गए कुछ लेन की आवश्यकता नहीं है। कुछ परियोजनाओं को केवल यहां विकसित और सुविधा कहा जाता है। यह अक्सर वेब ऐप्स के लिए सही होता है जिन्हें वसीयत में तैनात किया जा सकता है।
usr

37

यदि आपके पास एक ही समय में भंडार के 2 अलग-अलग संस्करण हैं, तो एक शाखा का उपयोग किया जाता है। एक टैग आपके रिपॉजिटरी में समय में एक बिंदु को चिह्नित करने का एक तरीका है।

आपको रिलीज़ किए गए संस्करण को चिह्नित करने के लिए एक टैग जोड़ना चाहिए। यदि आपको उस रिलीज के लिए बग फिक्स करने की आवश्यकता है तो आप टैग पर एक शाखा बनाएंगे।

आप केवल उन शाखाओं को हटाना चाहते हैं जिन्हें एचईएडी [या किसी अन्य शाखा] में वापस विलय कर दिया गया है।


3
ओह ... और मेरा मानना ​​है कि शाखा का दूसरी शाखा में विलय हो जाता है, जैसे कि मास्टर। हर बार जब मैं एक चेकआउट करता हूं, तो सही रहता है?
संहिता-गुरु

HEAD आमतौर पर एक शाखा को इंगित करता है (जब तक कि आप HEAD मोड में न हो), तो HEAD शाखा के साथ चलता है
LoicAG
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.