इस लंबे पोस्ट के बारे में क्षमा करें, लेकिन मुझे लगता है कि यह इसके लायक है।
मैंने अभी एक छोटी सी .NET दुकान से शुरुआत की है, जो मेरे द्वारा काम की गई अन्य जगहों से काफी अलग है। मेरी पिछली किसी भी स्थिति के विपरीत, यहां लिखा गया सॉफ़्टवेयर कई ग्राहकों को लक्षित करता है और प्रत्येक ग्राहक को एक ही समय में सॉफ़्टवेयर की नवीनतम रिलीज़ नहीं मिलती है। जैसे, "कोई वर्तमान उत्पादन संस्करण नहीं है।" जब किसी ग्राहक को कोई अपडेट मिलता है, तो वे अपने पिछले अपडेट के बाद से सभी सुविधाओं को सॉफ्टवेयर में जोड़ देते हैं, जो कि बहुत समय पहले हो सकता है। सॉफ्टवेयर अत्यधिक विन्यास योग्य है और सुविधाओं को चालू और बंद किया जा सकता है: तथाकथित "फ़ीचर टॉगल।" रिलीज़ साइकिल यहां बहुत तंग हैं, वास्तव में वे एक समय पर नहीं हैं: जब एक विशेषता पूरी होती है तो सॉफ्टवेयर संबंधित ग्राहक को तैनात किया जाता है।
टीम पिछले साल ही विजुअल सोर्स सेफ से टीम फाउंडेशन सर्वर में चली गई थी। समस्या यह है कि वे अभी भी TFS का उपयोग करते हैं जैसे कि यह VSS था और एकल कोड शाखा पर Checkout ताले लागू करता है। जब भी बग फिक्स (एकल ग्राहक के लिए भी) फील्ड में डाला जाता है तो वे टीएफएस में जो कुछ भी बनाते हैं, टेस्ट करते हैं कि बग को ठीक किया गया और ग्राहक को तैनात किया गया! (एक फार्मा और मेडिकल डिवाइसेज सॉफ्टवेयर बैकग्राउंड से आने वाला यह अविश्वसनीय है!)। नतीजा यह है कि आधा बेक्ड देव कोड भी परीक्षण किए बिना उत्पादन में डाल दिया जाता है। कीड़े हमेशा रिलीज बिल्ड में खिसक रहे हैं, लेकिन अक्सर एक ग्राहक जिसे सिर्फ एक बिल्ड मिला है वह बग को नहीं देखेगा यदि वे उस फीचर का उपयोग नहीं करते हैं जो बग में है। निर्देशक को पता है कि यह एक समस्या है क्योंकि कंपनी सभी विकसित करना शुरू कर रही है। बोर्ड पर आने वाले कुछ बड़े ग्राहकों के साथ अचानक और अधिक छोटे लोगों के साथ।
मुझे बग्गी या अधूरे कोड की तैनाती को समाप्त करने के लिए स्रोत नियंत्रण विकल्पों को देखने के लिए कहा गया है, लेकिन टीमों के रिलीज के कुछ अतुल्यकालिक प्रकृति का त्याग नहीं करने के लिए। मैंने अपने करियर में वीएसएस, टीएफएस, एसवीएन और बाजार का उपयोग किया है, लेकिन टीएफएस वह है जहां मेरा अधिकांश अनुभव रहा है।
पहले की अधिकांश टीमों ने मैंने देव-टेस्ट-प्रोडक्शन के दो या तीन शाखा समाधानों का उपयोग करने के साथ काम किया है, जहां एक महीने के लिए डेवलपर्स सीधे देव में काम करते हैं और फिर बदलावों को फिर टेस्ट में मिला दिया जाता है, फिर उत्पादन किया जाता है, या "जब किया जाता है" के बजाय प्रचारित किया जाता है एक निश्चित चक्र। क्रूज़ कंट्रोल या टीम बिल्ड का उपयोग करके स्वचालित बिल्ड का उपयोग किया गया था। मेरी पिछली नौकरी में एसवीएन के शीर्ष पर बाज़ार का उपयोग किया गया था: देवों ने अपनी छोटी फीचर शाखाओं में काम किया और फिर अपने बदलावों को एसवीएन (जिसे टीमसिटी में बांधा गया था) में धकेल दिया। यह अच्छा था कि इसमें परिवर्तन को अलग करना और उन्हें अन्य लोगों की शाखाओं के साथ साझा करना आसान था।
इन दोनों मॉडलों के साथ एक केंद्रीय देव और ठेस (और कभी-कभी परीक्षण) शाखा थी जिसके माध्यम से कोड को धक्का दिया गया था (और लेबल का उपयोग उन उत्पादों के निर्माण में चिह्नित करने के लिए किया गया था जहां से रिलीज़ किए गए थे ... और ये बग फिक्स के लिए शाखाओं में बने थे रिलीज और वापस देव में विलय)। यह वास्तव में यहां काम करने के तरीके के अनुरूप नहीं है, हालांकि: विभिन्न सुविधाओं को जारी करने के लिए कोई आदेश नहीं है, वे पूर्ण होने पर धकेल दिए जाते हैं।
इस आवश्यकता के साथ "निरंतर एकीकरण" दृष्टिकोण जैसा कि मैं देखता हूं कि यह टूट जाता है। निरंतर एकीकरण के साथ एक नई सुविधा प्राप्त करने के लिए इसे देव-परीक्षण-ठेस के माध्यम से धकेलना होगा और यह देव में किसी भी अधूरे काम को पकड़ लेगा।
मैं सोच रहा हूं कि इसे दूर करने के लिए हमें NO देव-परीक्षण-ठेस शाखाओं के साथ एक भारी फीचर वाले ब्रांच्ड मॉडल को छोड़ देना चाहिए, बल्कि स्रोत को उन शाखाओं की श्रृंखला के रूप में मौजूद होना चाहिए, जब विकास कार्य पूरा हो जाए, परीक्षण किया जाए, तय किया जाए, लॉक किया जाए , परीक्षण किया गया और फिर जारी किया गया। अन्य फीचर शाखाएं जरूरत पड़ने पर / चाहने पर अन्य शाखाओं से परिवर्तन हड़प सकती हैं, इसलिए अंत में सभी परिवर्तन सभी में समा जाते हैं। यह मेरी पिछली नौकरी में मेरे द्वारा अनुभव किए गए शुद्ध बाज़ार मॉडल से बहुत अधिक फिट बैठता है।
जैसा कि यह लचीला लगता है यह सिर्फ एक अजीब ट्रंक या ठेस शाखा नहीं होने के लिए अजीब लगता है, और मैं शाखाओं के बारे में चिंतित हूं कि कभी भी फिर से एकीकृत नहीं होने के लिए, या छोटे बाद के बदलावों की वजह से अन्य शाखाओं और डेवलपर्स के बारे में शिकायत करने वाले डेवलपर्स को कभी भी खींचा नहीं जाता है। आपदाओं को मर्ज करें ...
इस पर लोगों के क्या विचार हैं?
एक दूसरा अंतिम प्रश्न: मैं वितरित स्रोत नियंत्रण की सटीक परिभाषा के बारे में कुछ उलझन में हूं: कुछ लोगों का सुझाव है कि यह टीएफएस या एसवीएन जैसे केंद्रीय भंडार के बारे में नहीं है, कुछ का कहना है कि यह डिस्कनेक्ट होने के बारे में है (एसवीएन 90% काट दिया गया है और TFS के पास पूरी तरह कार्यात्मक ऑफ़लाइन मोड है) और अन्य लोगों का कहना है कि यह फीचर ब्रांचिंग के बारे में है और बिना माता-पिता के बच्चे के संबंधों के साथ शाखाओं के बीच विलय करने में आसानी (टीएफएस में आधारहीन विलय भी है!)। शायद यह एक दूसरा सवाल है!