क्या आपको एसवीएन शाखाओं से परेशान होना चाहिए यदि आपके पास केवल एक ही है?


10

यदि हम केवल तोड़फोड़ में एक शाखा के साथ काम करते हैं, तो क्या हमें भी परेशान होना चाहिए? क्या हम सिर्फ चीजों को गति देने के लिए ट्रंक पर काम नहीं कर सकते?

यह है कि हम तोड़फोड़ के साथ कैसे विकसित होते हैं:

  • एक कुंड है
  • हम एक नई विकास शाखा बनाते हैं
  • हम उस शाखा पर एक नई सुविधा विकसित करते हैं
  • जब सुविधा हो जाती है, तो इसे ट्रंक में मिला दिया जाता है, शाखा को हटा दिया जाता है और ट्रंक से एक नई विकास शाखा बनाई जाती है

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

यही कारण है कि हम एक सुविधा होने के बाद एक नई विकास शाखा बनाते हैं। इस तरह, बगफिक्स हमारे नए कोड में जल्द ही शामिल हो जाता है।

नीचे एक आरेख है जिसे स्पष्ट करना चाहिए:

हमारी तोड़फोड़ की रणनीति

अब, यह महसूस कर रहा है कि यह काम करने का सबसे कारगर तरीका नहीं है। हम प्रतिबद्ध होने से पहले स्थानीय स्तर पर निर्माण करते हैं, जिसमें लगभग 5-10 मिनट लगते हैं। आप समझ सकते हैं कि यह काफी लंबे समय के इंतजार के रूप में अनुभव किया गया है।

एक विकास शाखा का विचार है कि ट्रंक हमेशा रिलीज-रेडी होता है। लेकिन यह अब हमारी स्थिति में सच नहीं है। कभी-कभी, एक सुविधा लगभग तैयार हो जाती है, और कुछ डेवलपर्स पहले से ही अगली सुविधा को कोडित करना शुरू कर देंगे (अन्यथा, वे एक या दो डेवलपर्स के खत्म होने और विलय के इंतजार में बैठे होंगे)।

फिर, जब सुविधा 1 समाप्त हो जाती है, तो इसे ट्रंक में मिला दिया जाता है, लेकिन सुविधा 2 के कुछ कमिट के साथ शामिल है।

तो, क्या हमें भी विकास शाखा से परेशान होना चाहिए, क्योंकि हमारे पास केवल एक शाखा है? मैं ट्रंक-आधारित विकास और शाखा-दर-अमूर्तता के बारे में पढ़ रहा हूं, लेकिन अधिकांश लेख मैंने शाखा-दर-अमूर्त भाग पर ध्यान केंद्रित किया है। मुझे लगता है कि बड़े बदलावों के लिए यह धारणा है कि कई रिलीज होगी। यह कोई समस्या नहीं है जो हम कर रहे हैं।

तुम क्या सोचते हो? क्या हम सिर्फ ट्रंक पर काम कर सकते हैं? सबसे खराब स्थिति यह है (मुझे लगता है) कि हमें ट्रंक और चेरी से एक टैग बनाना होगा जो हमें चाहिए, क्योंकि कुछ कमिट / सुविधाएँ अभी तक तैयार नहीं हैं।


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

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

जवाबों:


6

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

हम केवल रिलीज से पहले एक शाखा बनाते हैं, या यदि एक सुविधा को लागू करने में लंबा समय लगता है (यानी कई पुनरावृत्तियों / रिलीज़ को फैलाता है)। किसी कार्य का मोटा आकार लगभग हमेशा अच्छी तरह से अनुमानित किया जा सकता है ताकि हम पहले से जान सकें कि क्या हमें इसके लिए एक अलग शाखा की आवश्यकता है। हम यह भी जानते हैं कि अगली रिलीज़ से पहले कितना समय बचा हुआ है (हम लगभग 2 महीने में रिलीज़ प्रकाशित करते हैं) इसलिए यह देखना आसान है कि कोई कार्य अगली रिलीज़ से पहले उपलब्ध समय में फिट बैठता है या नहीं। यदि संदेह है, तो हम इसे तब तक के लिए स्थगित कर देते हैं जब तक कि रिलीज शाखा नहीं बनाई जाती है, फिर ट्रंक पर इस पर काम करना शुरू करना ठीक है। अब तक हमें केवल एक बार (लगभग 3 वर्षों में) एक कार्य-विशिष्ट शाखा बनाने की आवश्यकता थी। बेशक आपका प्रोजेक्ट अलग हो सकता है।


1
मैं पीटर के साथ हूं। हमारे पास प्रत्येक समर्थित रिलीज़ के लिए एक शाखा है, लेकिन अन्यथा ट्रंक में काम करते हैं। हम कंटीन्यूअस इंटीग्रेशन का भी उपयोग करते हैं, लेकिन इसके बारे में जागरूक रहें इसका मतलब यह है कि यह संकलित नहीं है और यह मौजूदा कार्यक्षमता को तोड़ नहीं पाया है, यहां तक ​​कि यूनिट परीक्षणों के साथ भी।
इयान

@ इयान, निश्चित रूप से कोई भी परीक्षण वास्तविक जीवन में यह सुनिश्चित नहीं कर सकता है कि कोड 100% बग-मुक्त है ... सीमित संसाधनों के साथ, हम एक उचित स्तर की सुरक्षा के लिए लक्ष्य रखते हैं (जिसकी परिभाषा डोमेन- और परियोजना-विशिष्ट है)। यह भी ध्यान दें कि CI केवल यूनिट परीक्षण ही नहीं, एकीकरण आदि परीक्षण भी चला सकता है।
Péter Török

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

@Chad, नवीनतम रिलीज के लिए पैच ट्रंक से कोई हस्तक्षेप नहीं है, इसी रिलीज शाखा पर किया जाता है। और हम नई सुविधाओं का बड़े पैमाने पर परीक्षण करते हैं ताकि हम जान सकें कि वे प्राइम टाइम के लिए कब तैयार हैं। दी, हमारी परियोजना में अपेक्षाकृत कुछ बड़ी विशेषताएं हैं। और चूँकि यह एक सर्वर साइड वेब ऐप है, इसलिए चुनिंदा सुविधाओं को चालू / बंद करने के लिए DB फ्लैग जोड़ना भी काफी आसान है। YMMV।
पेरेट टॉरक

LOL ठीक है, मैंने गलत समझा और सोचा कि आपके पास सिर्फ ट्रंक था (एक अपवाद के साथ) मैंने इस पद्धति का उपयोग किया है और साथ ही एक छोटे समूह के लिए भी इसका ठीक उपयोग किया है और लगातार छोटे रिलीज ने हमें नियमित रूप से बड़ी रिलीज (3-6 महीने) करने के लिए अच्छा काम नहीं किया ) पूर्णांक।
सॉयलेंटग्रे

1

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

ऐसा करने का दूसरा तरीका, डिफ़ॉल्ट रूप से ट्रंक से बाहर काम करना होगा, लेकिन यदि आप अपने कार्य को अगले रिलीज से आगे बढ़ाने की उम्मीद करते हैं तो एक शाखा बनाएं। आप हमेशा पाठ्यक्रम के रिलीज को टैग करते हैं।

आप वास्तव में किस दृष्टिकोण को अपनाते हैं यह इस बात पर निर्भर करता है कि आप कितना प्रबंधन कर सकते हैं। यदि सामान्य रिलीज में वास्तव में समानांतर विकास नहीं होता है, तो मैं दूसरा तरीका अपनाऊंगा।


मैं सहमत हूं और ओपी ने इसकी पुष्टि की: 'कभी-कभी, एक फीचर लगभग तैयार हो जाता है, और कुछ डेवलपर्स पहले से ही अगली फीचर कोडिंग शुरू कर देंगे ...'
क्रिस

हां, लेकिन हमें कभी भी पुन: प्रस्ताव नहीं करना है। सुविधाएँ कालानुक्रमिक रूप से कार्यान्वित की जाती हैं और उदाहरण के लिए, 1-4 सभी सुविधाएँ अगली रिलीज़ में होनी चाहिए (1.0 कहें)। यह एकमात्र समय समस्याग्रस्त हो सकता है जब विकास 5 फ़ीचर पर शुरू हो गया है, जो उसके बाद रिलीज़ होने के लिए है (2.0)। तब हमें यह सुनिश्चित करना चाहिए कि टैग / रिलीज़ (1.0) में इन परिवर्तनों को साथ नहीं लिया जाए। रिलीज से पहले एक शाखा बनाना वास्तव में इसे ठीक कर सकता है।
पीटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.