स्रोत कोड और अनुप्रयोग जीवनचक्र के साथ सर्वश्रेष्ठ अभ्यास


10

हम एक छोटी सी आईएसवी दुकान हैं और हम आमतौर पर हर महीने अपने उत्पादों का एक नया संस्करण शिप करते हैं। हम अपने आईडी के रूप में हमारे कोड रिपॉजिटरी और विजुअल स्टूडियो 2010 के रूप में तोड़फोड़ का उपयोग करते हैं। मुझे पता है कि बहुत से लोग मर्क्यूरियल और अन्य वितरित स्रोत नियंत्रण प्रणालियों की वकालत कर रहे हैं, लेकिन इस बिंदु पर मैं यह नहीं देखता कि हम इनसे कैसे लाभान्वित हो सकते हैं, लेकिन मैं गलत हो सकता हूं।

हमारी मुख्य समस्या यह है कि शाखाओं और मुख्य ट्रंक को सिंक में कैसे रखा जाए।

यहाँ है कि हम आज कैसे काम करते हैं:

  1. नया संस्करण जारी करें (स्वचालित रूप से तोड़फोड़ में एक टैग बनाएं)
  2. अगले महीने जारी होने वाली मुख्य ट्रंक पर काम करना जारी रखें

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

ऐसे मामले में हम निम्नलिखित करते हैं:

  1. चरण (1) में हमारे द्वारा बनाए गए टैग से एक शाखा बनाएं
  2. बग ठीक करें
  3. टेस्ट और रिलीज
  4. परिवर्तन को मुख्य ट्रंक पर वापस लाएँ (यदि लागू हो)

हमारी सबसे बड़ी समस्या इन दोनों का विलय (मुख्य के साथ शाखा) है। ज्यादातर मामलों में हम स्वचालित विलय पर भरोसा नहीं कर सकते क्योंकि

  • मुख्य ट्रंक में बहुत सारे बदलाव किए गए हैं
  • मर्जिंग कॉम्प्लेक्स फाइल्स (जैसे विजुअल स्टूडियो एक्सएमएल फाइलें आदि) बहुत अच्छी तरह से काम नहीं करती हैं
  • एक और डेवलपर / टीम में बदलाव किए गए हैं जो आपको समझ नहीं आ रहे हैं और आप इसे मर्ज नहीं कर सकते

तो आपको क्या लगता है इन दो अलग-अलग संस्करणों (शाखा और मुख्य) को सिंक में रखने के लिए सबसे अच्छा अभ्यास है। आप क्या करते हैं?


1
सुनिश्चित करें कि आप tfsbranchingguideiii.codeplex.com की जाँच कर रहे हैं (उत्तर के रूप में पोस्टिंग नहीं है क्योंकि यह सीधे आपके प्रश्न को संबोधित नहीं करता है, लेकिन मैं हमेशा यह सलाह देता हूं कि वे अपने टीएफएस शाखा-फू को बेहतर बनाने के लिए देख रहे हैं)। शायद उनकी एक शाखा योजना आपको अपने सेटअप को बेहतर बनाने के बारे में विचार देगी।
16

जवाबों:


2

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

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

यदि एक प्रमुख वास्तु परिवर्तन की आवश्यकता होती है, तो इसे अपनी शाखा में होना चाहिए, और फिर पूरी तरह से परीक्षण और 'स्थिर' (कारण के भीतर) मुख्य रूप से वापस विलय कर दिया जाना चाहिए। यह दर्दनाक और चुनौतीपूर्ण हो सकता है लेकिन यह भी दुर्लभ होना चाहिए। यदि आपके पास जगह में अच्छा परीक्षण अभ्यास है तो जोखिम कम से कम है।

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

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


2

मैं इसे बहुत विपरीत तरीके से देखता हूं:

  • ट्रंक हमेशा उत्पादन-तैयार कोड होना चाहिए (आपके पहले प्रारंभिक रिलीज के बाद, वह है)।
  • एक विकास-प्रकार की शाखा होनी चाहिए जो ट्रंक के समानांतर चलती है, जहां आपका मासिक विकास होता है। हर महीने जब यह रिलीज होने का समय आता है, तो यह ट्रंक, परीक्षण और फिर रिलीज में विलीन हो जाता है।
  • हॉटफ़िक्स को तब आसानी से अपने ट्रंक में बनाया जा सकता है और चेक इन किया जा सकता है और हमेशा सफलतापूर्वक तैनात किया जाना चाहिए। फिर हॉटफ़िक्स से एक पैच बनाएं, और इसे अपनी विकसित शाखा में लागू करें।

बेशक, यह वर्कफ़्लो कुछ बेहतर है जो एसवीएन के अनुकूल नहीं है, क्योंकि अच्छा ब्रांचिंग और मर्जिंग कुछ ऐसा है जो एसवीएन में काफी दर्दनाक है, आपके वर्कफ़्लो की परवाह किए बिना। मेरे अनुभव में, एसवीएन में विलय लगभग हमेशा मैन्युअल रूप से किया जाना चाहिए, क्योंकि यह सिर्फ काम नहीं करता है, और इसके आसपास कोई वास्तविक तरीका नहीं है।


1

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


2
आपने क्या वीसीएस की कोशिश की है? मर्ज की आसानी VCS के उपयोग पर बहुत निर्भर करती है।
वैकल्पिक

बहुत सारे नए VCS वास्तव में अच्छी तरह से विलय करने का काम करते हैं। कभी-कभी टकराव अभी भी होगा, लेकिन वे वास्तविक संघर्ष होते हैं, न कि नकली लोगों ने एसवीएन द्वारा बहुत समय की सूचना दी।
sevenseacat

मैंने कई SCM सिस्टम आज़माए हैं। अधिकांश मर्ज उपकरण पाठ की दो टुकड़ों को अलग-अलग मात्रा में सफलता के साथ जोड़ सकते हैं। हालांकि, कोई मर्ज टूल यह नहीं बता सकता है कि क्या उसे सही परिणाम मिला है। मैंने बहुत से बग पर्ची देखी है क्योंकि कुछ प्रोग्रामर ने मर्ज टूल पर भरोसा करने का फैसला किया था।
smithco

1
मर्ज टूल को टेक्स्ट के दो टुकड़ों को एक साथ स्लैम करने के लिए नहीं माना जाता है। वे माता-पिता की ओर से परिवर्तनों को मर्ज करने वाले हैं; बहुत बड़ा फर्क।
वैकल्पिक

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

1

एक अनुशासित रिलीज़-ऑन-मुख्य दृष्टिकोण अच्छी तरह से काम करता है।

एसवीएन ब्रांचिंग को लचीला नहीं बनाया गया है। मैं सुझाव दूंगा कि आपकी पहली समस्या एसवीएन में है; उस से आगे बढ़ने पर नए विकल्प खुलेंगे।

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