मैं अपनी कंपनी के लिए संस्करण नियंत्रण के लिए एक रणनीति के साथ आने की कोशिश कर रहा हूं और उस घड़ी को बंद कर दूंगा; हम वर्तमान में SVN का उपयोग करते हैं, लेकिन इसकी कोई संरचना नहीं है - हम मूल रूप से केवल एक ट्रंक है और केवल उसी के लिए प्रतिबद्ध हैं। हाल ही में विकास प्रबंधक ने एक दूसरा रिपॉजिटरी शुरू किया जो हमारे "टैग" के रूप में कार्य करता है, लेकिन इसे "ट्रंक" के साथ मैन्युअल रूप से विलय करना होगा क्योंकि यह उसी रिपॉजिटरी का हिस्सा नहीं है, लेकिन पूरी तरह से अलग है। वास्तव में, "देव" नामक केवल एक फ़ोल्डर है (विभिन्न तिथियों में वास्तव में अलग-अलग "देव" फ़ोल्डर हैं लेकिन सिर्फ "देव" मुख्य एक है) और इसके तहत बाकी सब कुछ है; अन्य सभी परियोजनाएँ। यह परियोजना द्वारा आयोजित नहीं है, इसकी शाखाओं / टैग / ट्रंक या किसी भी चीज की कोई अवधारणा नहीं है। शुरू में इसे स्थापित करने वाले व्यक्ति (लंबे समय तक चले गए, बेशक) यह नहीं पता था कि एसवीएन को कैसे स्थापित किया जाए, और तब से किसी ने यह जानने की जहमत नहीं उठाई कि किसी चीज को तोड़ने के डर से चीजों को ठीक से कैसे किया जाए। हम किसी भी प्रकार के CI (या स्वचालित परीक्षण, दुर्भाग्य से) का उपयोग नहीं करते हैं।
पहले, क्या हमें इसे परियोजना द्वारा अलग करना चाहिए था? उदाहरण के लिए, हमारे पास: दो ASP.NET वेब साइटें (वेब अनुप्रयोग नहीं, वेब साइटें), एक वेब सेवा, सभी तालिका स्क्रिप्ट और संग्रहीत कार्यविधियों के लिए परिनियोजन फ़ोल्डर, बाहरी प्रोजेक्ट्स के लिए दो कमांड-लाइन क्लाइंट जिन्हें कॉल किया जाता है। वैबसाइट और एक साझा फ़ोल्डर जिसमें सामान्य व्यावसायिक वस्तुएँ और पसंद हैं। क्या इनमें से प्रत्येक की अपनी शाखाएं / टैग / ट्रंक सेटअप वाली अपनी परियोजना होनी चाहिए, या यह इस तरह होनी चाहिए:
dev/
branches/
tags/
trunk/
Site1/
Site2/
WebService/
SharedCode/
और सभी शाखाओं और सब कुछ पूरे देव फ़ोल्डर की एक प्रति है? यह दृष्टिकोण निगलने में आसान हो सकता है क्योंकि हमारे पास अक्सर ऐसी परिस्थितियां होती हैं जहां हमें साझा कोड लाइब्रेरी में बदलाव करने की आवश्यकता होती है और साथ ही साथ वेब साइटों के कम से कम एक (आमतौर पर दोनों)।
दूसरा, हम अपने देव सर्वर और जियो सर्वर पर नियमित रूप से (हमारे पार्लरों में "धक्का") करते हैं। इससे निपटने के लिए मैंने जो सबसे अच्छा तरीका पढ़ा है वह यह होगा कि सभी विकास ट्रंक / में चले जाते हैं, शाखाएं "अस्थायी" होती हैं और एक नई सुविधा को जोड़ने के लिए उपयोग की जाती हैं जो ट्रंक को प्रभावित कर सकती हैं, और टैग रिलीज़ के लिए हैं? इसलिए, हम हर महीने कहते हैं कि चलो, और मैं एक नए मॉड्यूल पर काम कर रहा हूं। मैं ट्रंक को शाखा देता हूं, और उस शाखा का उपयोग अपने कोड के लिए करता हूं, इसे लिखना और इसका परीक्षण करना और जो भी हो। जब मॉड्यूल हो जाता है, तो मैं इसे वापस ट्रंक में विलय कर दूंगा (और शायद शाखा को हटा दूंगा), और जब हम तैनात करने के लिए तैयार होंगे तो हम इसे टैग करेंगे ("May2011" चलिए बताते हैं)। अगर लाइव होने के बाद हमारे पास बग फिक्स है, तो इसे मई2011 के टैग में तय किया जाएगा और ट्रंक में विलय कर दिया जाएगा (ताकि ट्रंक को भी ठीक हो जाए), और फिर May2011 को फिक्स के साथ फिर से बाहर कर दिया जाएगा? क्या यह टैगिंग का इरादा है?