मुझे GitHub पर अपनी परियोजना के संस्करणों को कैसे नियंत्रित करना चाहिए


13

मैं आजकल जितने समय GitHub पर कर सकता हूं उतना ही खर्च करने की कोशिश कर रहा हूं (यहां तक ​​कि मैं काम पर टीम में एकमात्र व्यक्ति हूं) वास्तव में यह महसूस करने के लिए कि यह वास्तविक विश्व कॉर्पोरेट एप्लिकेशन के लिए कैसा होने जा रहा है।

एक प्रश्न जो मेरे पास है वह है संस्करण को नियंत्रित करना । मान लीजिए कि हमने एक परियोजना शुरू की है। फिर, टीम के सदस्यों ने कुछ शाखाएँ बनाईं और वहाँ विकास किया। जब हम उत्पादन के लिए तैयार होते हैं, तो हम सभी शाखाओं को masterशाखा में मिला देते हैं । अंत में, हम संस्करण के साथ लाइव होते हैं 1.0

अब वह संस्करण 1.0लाइव है और हमारे पास उस सॉफ़्टवेयर के संस्करण के लिए कुछ समस्याएँ हैं। हम 1.1उन मुद्दों को ठीक करने के लिए संस्करण के लिए विकसित करना शुरू करना चाहते हैं जिन्हें हमने परियोजना को शुरू करके शुरू किया था।

अब, सवाल यह है:

हमें यहाँ संस्करण को कैसे नियंत्रित करना चाहिए?

क्या हमें इसके लिए एक नई शाखा तैयार करनी चाहिए v1.0और 1.0सॉफ्टवेयर के संस्करण को वहां रखना चाहिए और कुछ शाखाओं पर विकास करना चाहिए (या नहीं), उनके साथ विलय कर दिया है master, संस्करण के साथ लाइव हैं 1.1?

क्या इस तरह की स्थितियों के लिए वहां कोई सम्मेलन है?

जवाबों:


19

मैंने निम्नलिखित शाखा मॉडल पाया है (और अपनाना शुरू किया है) :

Nvie.com से छवि

(लेख से छवि)

उस लेख में बहुत सारी महान प्रथाओं और सख्त नियमों का वर्णन किया गया है, मैं इसकी अत्यधिक अनुशंसा करता हूं।

रूचि के बिंदु:

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

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


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

1
Git में, टैगिंग का लक्ष्य एक प्रतिबद्धता है। इसका मतलब है कि आप कहते हैं: "यहाँ यह प्रतिबद्ध है, और मैं इसे अभी से 'v1.3' कहता हूं।" व्यवहार में, जिसका अर्थ है कि आप मास्टर शाखा में जाते हैं, (अब स्थिर) डेवेल शाखा, कमिट और टैग में विलय करें। फिर आप सभी टैगों को सूचीबद्ध कर सकते हैं, उस कोड में वापस आ सकते हैं जब आपको यह देखना होगा कि पिछले रिलीज में क्या हुआ था। उस से टैग के लिए थोड़ा और अधिक है (जो बड़े पैमाने पर वितरित विकास के लिए उपयोगी है जैसे कि लिनक्स कर्नेल)। यदि आप रुचि रखते हैं, तो मैं प्रोजिट बुक का सुझाव देता हूं
तमसे सजेलेई

ProGit उन पुस्तकों में से एक है जिन्हें मैं निश्चित रूप से खरोंच से पढ़ूंगा। अभी के लिए मैं केवल उन हिस्सों को पढ़ रहा हूं जिन्हें मैं काम करने के लिए इच्छुक हूं। अब तक, हमने मास्टर ब्रांच पर विकास किया है और मुझे लगता है कि मुझे इसे बनाए रखना चाहिए। लेकिन मैं एक और शाखा खोलेगा जिसे उपर्युक्त मॉडल के अनुसार शाखा के productionरूप में उपयोग किया जाएगा master
tugberk

जब मैं इस मॉडल को आज़मा रहा हूं, तो एक बात जो मैं संघर्ष कर रहा हूं वह यह है: कुछ सहायक शाखाएं हैं जैसा कि दिए गए लेख, फीचर और रिलीज शाखाओं पर चर्चा की गई है। भविष्य की कई शाखाएं हो सकती हैं। उदाहरण के लिए, FeedbackForm एक भविष्य की शाखा है और ContactForm एक और है। मुझे लगता है कि इस मॉडल के लिए यह ठीक है? क्या कई रिलीज़ शाखाएँ भी होनी चाहिए? और यदि हां, तो मुझे उनका नाम कैसे देना चाहिए?
tugberk

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

1

मैंने ज्यादातर समय जो देखा है वह है:

  • मास्टर आपके लिए उत्पाद है। आखिरकार आपका सारा भविष्य संस्करण x.0 मास्टर पर होगा।
  • आप उत्पादन में प्रत्येक संस्करण के लिए एक टैग / शाखा बनाते हैं ताकि आप अभी भी किसी भी ग्राहक के लिए उनका समर्थन कर सकें जिसके लिए इसकी आवश्यकता है।
  • प्रति मामले के आधार पर एक या दूसरे से फिक्सिंग को जोड़ना है।

धन्यवाद! तो आपको लगता है कि v1.0 नामक एक शाखा रखना उचित है, v1.2 उचित है?
टगबरक

@tugberk जब तक संबंधित सॉफ़्टवेयर उस संस्करण में मौजूद रहता है, तब तक शाखाओं को इधर-उधर रखने के लिए समझ में आता है कि यदि आप एक विशिष्ट हॉटफ़िक्स शाखा की आवश्यकता है, तो आप उन्हें तुरंत बंद कर सकते हैं। जब सॉफ्टवेयर उस संस्करण में अब मौजूद नहीं है (अब समर्थित नहीं है तो कोई और काम नहीं हो सकता है) यह शाखा के अंतिम विलय को करने और फिर इसे हटाने के लिए समझ में आता है। आप एक अंतिम खाली प्रतिबद्ध भी बना सकते हैं (मैं इसे शाखा की शुरुआत में अक्सर करता हूं), बस "क्लोजिंग शाखा XXXX" कहने के लिए, अन्यथा आप शाखा इतिहास नहीं रखेंगे (रिफ्लॉग थोड़ी मदद कर सकता है लेकिन यह प्रति भंडार है)
पैट्रिक मेव्ज़ेक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.