2009-08-06 18 views
6

का उपयोग कर शाखा/मास्टर टैग संशोधन वृद्धियां मैं रिलीज प्रबंधन के लिए एक अच्छी प्रणाली को कम करने की कोशिश कर रहा हूं, संस्करण संख्याओं के साथ टैगिंग के टैगिंग अभ्यास के साथ संयुक्त - उदाहरण के लिए, 1.0। उस टैग के बाद कोई भी बदलाव बढ़ाया जाएगा, जैसे 1.0-1, 1.0-2, आदिगिट

हालांकि, अगर मैं 1.0 रिलीज के लिए मास्टर से नई शाखा बनाता हूं, और फिर मैं उस शाखा में स्विच करता हूं और इसे 1.0 टैग करता हूं, ऊपर वर्णित प्रणाली ठीक काम करता है। उस शाखा पर अतिरिक्त बग फिक्स अपेक्षित, 1.0-1, 1.0-2

हालांकि, मास्टर पर कोई भी काम, जब तक कि मैं 1.0 शाखा बनाने के बाद पहली प्रतिबद्धता के बाद मास्टर को दोबारा टैग नहीं करता, तब भी यह दिखाएगा समान वृद्धि: 1.0-1, 1.0-2

अनुमोदित, sha1 हैश अद्वितीय होगा, लेकिन मैं मास्टर और शाखा दोनों से समान संशोधन/वृद्धि करता हूं।

क्या मैं बस शाखाओं को टैग करते समय मास्टर से टैग करने से बचने का कोई तरीका है? क्या ऐसा करने का कोई बेहतर तरीका है? अभी, शाखा 1.0 बनाने के बाद मेरा एकमात्र विकल्प मास्टर पर एक मामूली प्रतिबद्धता है, और उसके बाद इसे 1.1-देव या कुछ के लिए दोबारा टैग करें।

फिर प्रत्येक रिलीज के लिए दोहराना।

हालांकि, अगर एक शाखा फिर से टैग की जाती है, तो 1.0.1 रिलीज के लिए कहें, ऐसा लगता है कि यह मास्टर को टैग भी करेगा क्योंकि यह पहले हुआ था?

उत्तर

6

गिट में आप शाखाओं को टैग नहीं करते हैं। आप टैग करते हैं। यदि आप उस शाखा को "चिह्नित" करना चाहते हैं जिसे आप पहले ही प्राप्त कर चुके हैं: शाखा का नाम। :)

हां, git describe आपको 1.0-2-g1ab3183 जैसे पहचानकर्ता प्रदान करता है लेकिन वे टैग नहीं हैं! टैगिंग git tag (जो अनुमान लगाया गया था) के साथ किया जाता है, और git tag का उपयोग करके बनाए गए टैग प्रतिबद्ध पहचानकर्ता git describe बनाता है।

+0

मैं पूरी तरह से समझता हूं कि टैग, शाखाएं, आदि क्या हैं और उनका उपयोग कैसे किया जाता है। समस्या तब होती है जब आप किसी मौजूदा शाखा में नया टैग जोड़ते हैं। मान लें कि मैं 1.0 के लिए एक समर्थन शाखा बना रहा हूं - मास्टर नई सुविधाओं के साथ जारी है, आदि। 1.0 के लिए बगफिक्स उस विशिष्ट शाखा पर होता है। मान लीजिए कि मैं रिलीज 1.0.1 के लिए फिर से टैग करना चाहता हूं या पुनः शाखा/टैग करना चाहता हूं। अगर मैं किसी भी शाखा पर उस संशोधन को टैग करता हूं, तो मेरा मास्टर 1.0.1-1, 1.0.1-2 दिखाता है, जब मैं केवल उस शाखा को टैग करने का इरादा रखता हूं जिस पर प्रतिबद्धता हुई थी। मैं मास्टर और शाखाओं को ऐसे टैग साझा नहीं करना चाहता हूं। – helion3

+0

क्या आपका मतलब है 'गिट वर्णन' '1.0.1-1',' -2', आदि दिखाता है? क्योंकि यह उन टैगों से प्रभावित नहीं होना चाहिए जो वर्तमान प्रतिबद्धता के पूर्वजों नहीं हैं (और यह नहीं होना चाहिए कि यह किसी अन्य शाखा पर है और आपने दोनों शाखाओं के लिए प्रतिबद्ध किया है)। – Bombe

2

गिट में एक टैग एक विशिष्ट प्रतिबद्धता के लिए उपनाम है, न कि शाखा के लिए।

टैग और शाखाएं स्वतंत्र हैं।

तो अगर आप इस पर एक छोटी सी राजस्व करने के लिए एक विशेष संस्करण चेकआउट करना चाहते हैं तो आप कर सकता है:

git checkout -b new_branch_name commit_id 

या,

git checkout -b new_branch_name tag_name 

दोनों एक की चर्चा करते हुए की बस बराबर तरीके हैं विशिष्ट प्रतिबद्धता

अपने बदलाव करें, उन्हें प्रतिबद्ध करें और मामूली संशोधन के साथ प्रतिबद्धता टैग करें।

फिर आप जिस शाखा को चेक आउट करते हैं उसे हटा भी सकते हैं।

4

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

Bombe said गिट में आप शाखाओं को टैग नहीं करते हैं। आप टैग करते हैं। गिट टैग में एक प्रतिबद्धता के लिए सिर्फ (एनोटेटेड) पॉइंटर है।

आपके मामले में आप, मुझे लगता है, तो निम्न

 
         /-- [v1.0] 
         v 
---.---.---.---X---.---A  <-- master 
         \ 
          \-.---B  <-- maint 

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

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

एचटीएच

+0

मुझे लगता है कि मैं बस पर्याप्त स्पष्ट नहीं हूं। मैं आपको और दूसरों ने जो कुछ कहा है, उसके बारे में मुझे पता है, लेकिन मेरी समस्या यह है कि यदि मैं शाखा में एक नया टैग बनाता हूं, तो मास्टर पर गिट वर्णन उस नए टैग को प्रतिबिंबित करना शुरू कर देगा। अनिवार्य रूप से, मैं शाखा और मास्टर दोनों में दो 1.0-1, 1.0-2, 1.0-3 संस्करणों के साथ समाप्त हो सकता हूं, वास्तव में, वे दो अलग-अलग रिलीज का प्रतिनिधित्व करते हैं जो 1.0-1, 1.1- dev-1, आदि मुझे लगता है कि इसके आसपास मेरा एकमात्र तरीका रिलीज के लिए शाखा बनाने के बाद, एक प्रतिबद्ध करने के बाद मास्टर को दोबारा टैग करना है। – helion3

+0

ऐसा तब होगा जब टैग की गई कॉमिट 'मास्टर' से भी उपलब्ध हो ('मास्टर' के पूर्वजों में से एक है)। –

+0

गिट-विवरण से 1.0-1 का उपयोग न करें; टैग रखरखाव रिलीज 1.0.1 के साथ –