एक सरल तरीका होता जो आपके नए विकास को इस दुर्भाग्यपूर्ण स्थिति में लाए बिना आपको मुख्य शाखा से अलग रखता था : ट्रंक से किसी भी परिवर्तन को दैनिक आधार पर आपकी देव शाखा में विलय कर दिया जाना चाहिए था । (क्या आपका मुवक्किल वास्तव में इतना छोटा था कि वह अनुमान नहीं लगा सकता था कि आपकी शाखा को अगले दिन मुख्य लाइन में वापस जाने की आवश्यकता है?)
वैसे भी, सबसे अच्छा तरीका IMHO है जो पहले हाथ पर क्या होना चाहिए, इसे फिर से करने की कोशिश कर रहा है:
- शाखा बनने के बाद दिन 1 के लिए मुख्य लाइन पर परिवर्तनों के शब्दार्थ की पहचान करें । उन्हें अपने वर्तमान कोड आधार पर लागू करें और साथ ही आप कर सकते हैं। यदि यह एक "स्थानीय परिवर्तन" था, तो यह सरल होना चाहिए, अगर यह "क्रॉस कटिंग रिफैक्टिंग" था जैसे कि व्यापक रूप से इस्तेमाल किए गए वर्ग का नाम बदलने के लिए, इसे अपने वर्तमान कोड आधार पर एक समान रूप से समकक्ष तरीके से लागू करें। उम्मीद है कि उस वर्ष के दौरान कोड आधार में कोई विरोधाभासी क्रॉस-कटिंग परिवर्तन "आपकी" शाखा पर नहीं किया गया था, अन्यथा यह एक वास्तविक मस्तिष्क-टीज़र बन सकता है
- परिणाम का परीक्षण करें (क्या मैंने उल्लेख किया है कि आपको इस कार्य के लिए एक अच्छे परीक्षण सूट की आवश्यकता है)? परीक्षण द्वारा प्रकट सभी कीड़े को ठीक करें
- अब इस प्रक्रिया को दिन 2 के लिए मुख्य लाइन, फिर दिन 3, और इसी तरह के बदलावों के लिए दोहराएं।
यह तब काम कर सकता है जब टीमों ने सख्ती से संस्करण नियंत्रण के क्लासिक नियमों का पालन किया ("केवल प्रतिबद्ध, परीक्षण किए गए राज्य" और "जल्दी और अक्सर जांच")।
365 पुनरावृत्तियों (या 250 के बाद, यदि आप भाग्यशाली हैं और आप सप्ताहांत के बदलाव के लिए काम को बंडल कर सकते हैं), तो आप लगभग समाप्त हो जाएंगे (लगभग, क्योंकि आपको एकीकरण की अवधि के दौरान मुख्य पंक्ति में होने वाले परिवर्तनों की संख्या जोड़ने की आवश्यकता है )। अंतिम चरण अद्यतन देव शाखा को फिर से ट्रंक में विलय करना होगा (ताकि आप ट्रंक के इतिहास को ढीला न करें)। यह आसान होना चाहिए, क्योंकि तकनीकी रूप से यह केवल प्रभावित फ़ाइलों का प्रतिस्थापन होना चाहिए।
और हां, मैं गंभीर हूं, इसका कोई शॉर्टकट नहीं है। यह पता चला है कि "दैनिक भाग" कभी-कभी बहुत छोटा हो सकता है, लेकिन मुझे इसकी उम्मीद नहीं होगी, मुझे लगता है कि यह अधिक संभावना है कि दैनिक भाग बहुत बड़ा हो सकता है। मुझे आशा है कि आपका ग्राहक आपको इसके लिए वास्तव में अच्छी तरह से भुगतान करता है, और यह उसके लिए इतना महंगा है कि वह अपनी विफलता से सीख लेगा।
मुझे यह जोड़ना चाहिए कि आप स्विच किए गए पक्षों के साथ भी यह कोशिश कर सकते हैं - अपनी शाखा से मुख्य लाइन में छोटे हिस्सों में बदलावों को फिर से लाना। यह तब सरल हो सकता है जब आपकी देव शाखा में ट्रंक की तुलना में बहुत कम परिवर्तन थे, या अधिकांश नए स्रोत फ़ाइलों में बदलाव हुए, जो वर्तमान में ट्रंक का हिस्सा नहीं हैं। कोई इसे उत्पाद ए (देव शाखा) की एक विशेषता को कुछ अलग उत्पाद बी (ट्रंक की वर्तमान स्थिति) के रूप में "पोर्टिंग" के रूप में देख सकता है। लेकिन अगर अधिकांश क्रॉस-कटिंग रिफ्लेक्टरिंग मुख्य लाइन पर किए गए थे, और वे आपके नए कोड को प्रभावित करते हैं (6500 मर्ज की टक्कर इसके लिए कुछ सबूत लगती है), तो यह आसान हो सकता है जिस तरह से मैंने इसे पहले वर्णित किया।