मैं अभी तक एक और तोड़फोड़ उपयोगकर्ता हूं जो वितरित संस्करण नियंत्रण के ताओ में खुद को फिर से शिक्षित करने के लिए संघर्ष कर रहा है।
तोड़फोड़ का उपयोग करते समय, मैं प्रोजेक्ट-माइनर दृष्टिकोण का एक बड़ा प्रशंसक था, और, मेरे अधिकांश पूर्व नियोक्ताओं के साथ, हम अपनी रिपॉजिटरी शाखाओं की संरचना करेंगे; टैग और ट्रंक निम्नानुसार हैं:
branches-+
+-personal-+
| +-alice-+
| | +-shinyNewFeature
| | +-AUTOMATED-+
| | +-shinyNewFeature
| +-bob-+
| +-AUTOMATED-+
| +-bespokeCustomerProject
+-project-+
+-shinyNewFeature
+-fixStinkyBug
tags-+
+-m20110401_releaseCandidate_0_1
+-m20110505_release_0_1
+-m20110602_milestone
trunk
वास्तविक स्रोत वृक्ष के भीतर, हम निम्नलिखित संरचना का उपयोग करेंगे (जैसे कुछ):
(src)-+
+-developmentAutomation-+
| +-testAutomation
| +-deploymentAutomation
| +-docGeneration
| +-staticAnalysis
| +-systemTest
| +-performanceMeasurement
| +-configurationManagement
| +-utilities
+-libraries-+
| +-log-+
| | +-build
| | +-doc
| | +-test
| +-statistics-+
| | +-build
| | +-doc
| | +-test
| +-charting-+
| | +-build
| | +-doc
| | +-test
| +-distributedComputing-+
| | +-build
| | +-doc
| | +-test
| +-widgets-+
| +-build
| +-doc
| +-test
+-productLines-+
| +-flagshipProduct-+
| | +-coolFeature
| | +-anotherCoolFeature
| | +-build
| | +-doc
| | +-test
| +-coolNewProduct
+-project-+
+-bigImportantCustomer-+
| +-bespokeProjectOne
| +-bespokeProjectTwo
+-anotherImportantCustomer-+
+-anotherBespokeProject
इंजीनियरिंग टीम के बीच संरचना संचार में मदद करने के लिए रिपॉजिटरी की संरचना का उपयोग करने के लिए यह विचार (और अभी भी है) था; व्यवसाय का ग्राहक-सामना करने वाला हिस्सा और विभिन्न अन्य हितधारक और डोमेन विशेषज्ञ।
बुद्धि के लिए: "प्रोजेक्ट" निर्देशिकाओं में से एक में बैठने वाले स्रोत दस्तावेज केवल एक बार उपयोग किए जाते हैं (और पैसा कमाते हैं)। "प्रोडक्टलाइन" निर्देशिकाओं में से एक में बैठने वाले दस्तावेज़ पैसे कमाते हैं जितनी बार उस विशेष लाइन से उत्पाद बेचा जाता है। दस्तावेज़ जो "पुस्तकालयों" निर्देशिकाओं में से एक में बैठते हैं, वे कई बार पैसा कमाते हैं जितना कि उन उत्पादों में से कोई भी जो उन्हें बेच देता है।
यह लागतों के परिशोधन की धारणा को स्पष्ट करता है, और व्यापार में स्रोत दस्तावेज़ पुन: उपयोग के लिए समर्थन बनाने में मदद करता है।
इसका मतलब यह भी है कि एक सामान्य संरचना है, जिस पर हमारे निर्माण स्वचालन उपकरण काम कर सकते हैं। (हमारी बिल्ड स्क्रिप्ट "निर्माण" फ़ोल्डरों की तलाश में स्रोत ट्री पर चलती है, जिसके भीतर वे कॉन्फ़िगरेशन फ़ाइलों को निर्दिष्ट करते हैं कि प्रत्येक घटक का निर्माण कैसे किया जाता है? प्रलेखन पीढ़ी और परीक्षण के लिए एक समान प्रक्रिया होती है)।
गौरतलब है कि जिन उत्पादों पर मैं काम करता हूं उनमें आम तौर पर प्रदर्शन माप और लक्षण वर्णन परीक्षण चलाने के लिए एक लंबा समय लगता है; 20 से 200 घंटे तक; संसाधित परीक्षण परिणामों / मध्यवर्ती डेटा के कई टीबी से कई जीबी के बीच कहीं उत्पन्न करना (जो कि एक विशेष सिस्टम कॉन्फ़िगरेशन में संग्रहीत और बंधा होना चाहिए ताकि समय के साथ प्रदर्शन में सुधार किया जा सके)। यह समस्या कॉन्फ़िगरेशन प्रबंधन को एक महत्वपूर्ण विचार बनाती है, और केंद्रीकरण के लिए कुछ आवश्यकता भी लगाती है, क्योंकि आमतौर पर प्रदर्शन मापन और लक्षण वर्णन परीक्षण चलाने के लिए आवश्यक कम्प्यूटेशनल संसाधन सीमित होते हैं; (64-128 कोर का एक छोटा समूह)।
एक अंतिम नोट के रूप में; निरंतर एकीकरण प्रणाली को पता है कि इसे एक बिल्ड को ट्रिगर करने की आवश्यकता है; स्थिर विश्लेषण; हर बार ट्रंक को संशोधित करने के लिए हर बार ट्रंक को संशोधित किया जाता है, और हर बार किसी भी "टैग" शाखा को संशोधित किया जाता है। इस तरह, व्यक्तिगत डेवलपर्स अपनी व्यक्तिगत शाखाओं, एक महत्वपूर्ण क्षमता, IMHO के साथ CI सिस्टम का उपयोग कर सकते हैं।
अब, यहाँ मेरा सवाल है: मैं उपरोक्त सभी को कैसे दोहरा सकता हूं (और यदि संभव हो तो इसे सुधारें), मर्क्यूरियल के साथ।
--edit:
मेरी सोच की वर्तमान पंक्ति एक केंद्रीय सबवर्सन रिपॉजिटरी का उपयोग करना है, समग्र संरचना को परिभाषित करना है, लेकिन एक ग्राहक के रूप में hg के उपयोग की अनुमति देने के लिए ताकि डेवलपर्स स्थानीय रूप से उपलब्ध रिपोज हो सकें।