वितरित स्रोत नियंत्रण और निरंतर एकीकरण परस्पर अनन्य अवधारणाएं नहीं हैं। वास्तव में वे एक साथ बहुत अच्छी तरह से खेलते हैं।
भले ही डीवीसीएस अपनी प्रकृति से वितरित हो, फिर भी आपके पास एक केंद्रीय भंडार होगा जो केंद्रीकृत संस्करण सिस्टम में पाए गए पारंपरिक "ट्रंक" का प्रतिनिधित्व करता है। जब आप अपने केंद्रीय भंडार में "प्रकाशित" करते हैं तो आपको किस समय और किस परिवर्तन में परिवर्तन होता है, इसके संदर्भ में आपको अपना विकास मॉडल नहीं बदलना चाहिए। चूंकि डीवीसीएस आपको अपने परिवर्तनों को धक्का देने के लिए मजबूर नहीं करता है इसलिए आपको उस संबंध में बहुत अनुशासित होना चाहिए।
दूसरी ओर, डीवीसीएस डेवलपर्स को अपनी निजी शाखाओं पर छोटे, वृद्धिशील काम करने में सक्षम बनाता है। न केवल इस तरह का पालन करने के लिए परिवर्तन आसान हैं, अंत में विलय करना भी आसान है। एक सुविधा फैलाने या प्रयोगात्मक परिवर्तन करने के दौरान स्थानीय प्रतिबद्धता विशेष रूप से उपयोगी होती है। या जब आपको फीचर ए पर अपने काम को बाधित करने की आवश्यकता है तो बहुत महत्वपूर्ण बग बी
व्यक्तिगत डेवलपर निर्णय लेता है कि जब क्या धक्का दिया जाता है/प्रकाशित किया जाता है। हमेशा के रूप में, अतिरिक्त शक्ति के साथ अतिरिक्त जिम्मेदारी आता है।
जब भी वे तैयार हों, आपको परिवर्तनों को धक्का/प्रकाशित करना चाहिए। उदाहरण के लिए मैं एक वर्ग का नाम बदलना चाहता हूं। यह केवल कुछ लाइनों के बावजूद, 50+ फाइलों को छूएगा। मैं एक रिफैक्टरिंग टूल का उपयोग कर नाम बदलता हूं।
एक केंद्रीकृत प्रणाली में मुझे अब यह तय करना होगा कि क्या वास्तव में यह स्वयं के लिए प्रतिबद्ध है या यदि यह काम के एक बड़े टुकड़े का हिस्सा है, तो मैं वर्तमान में काम कर रहा हूं। अनुभव से बाहर, लोग आमतौर पर दूसरा विकल्प चुनते हैं, क्योंकि आप निश्चित नहीं हैं कि आप अभी तक स्थायी इतिहास का हिस्सा बनना चाहते हैं।
एक वितरित प्रणाली में मैं स्थानीय रूप से परिवर्तन कर सकता हूं, मेरे पास यांत्रिक (रिफैक्टरिंग) और कार्यात्मक कोड परिवर्तनों के बीच एक स्पष्ट इतिहास अलग है। इस बिंदु पर, मैं किसी और को प्रभावित नहीं करता हूं। अंततः मैं अपने परिवर्तनों को धक्का देने से पहले मैं आसानी से उस निर्णय को संशोधित कर सकता हूं। यह तब अपने आप पर एक स्वच्छ प्रतिबद्धता होगी।
इस उदाहरण में समस्या निम्न स्थितियों के साथ है: कल्पना कीजिए कि मैं उस कक्षा का नाम अपनी स्थानीय शाखा या मेरी "स्थगित प्रतिबद्धता" पर बदलता हूं। इस बीच कोई ट्रंक में नया कोड करता है जो उस वर्ग का उपयोग करता है जिसका मैंने अभी नाम बदल दिया है। मेरे नाम बदलने में परेशानी होगी।
निश्चित रूप से आप अभी प्रकाशित कर सकते हैं कि उस क्षण को बदल दें जो आपने किया था। दोनों प्रणालियों में। ज़िम्मेदारी सिर्फ वही है। लेकिन चूंकि डीवीसीएस आपको छोटे, वृद्धिशील काम करने के लिए प्रोत्साहित करता है, विलय करना आसान होगा। यदि आप अपने परिवर्तनों को जल्दी प्रकाशित करते हैं तो दोनों सिस्टम आपको उस स्थिति से बाहर "बाहर निकलने की रणनीति" प्रदान कर सकते थे।
लोग इसका परीक्षण पक्ष का मतलब अक्सर "निरंतर एकीकरण" का उपयोग करते हैं, यानी केंद्रीय भंडार में प्रत्येक प्रतिबद्धता का स्वचालित निर्माण और परीक्षण। – Rup
कुछ मामलों में, हाँ, लेकिन बाकी के बारे में क्या? आमतौर पर यह भी अक्सर काम करता है। –
DVCS के संयोजन के उदाहरण के लिए http://stackoverflow.com/questions/3209208/what-is-the-cleverest-use-of-source-repository-that-you-have-ever-seen/3209767#3209767 यह भी देखें और सीआई। – VonC