वितरित संस्करण नियंत्रण (डिस्ट्रिब्यूटेड वर्जन कंट्रोल)

सॉफ़्टवेयर विकास में, डिस्ट्रिब्यूटेड वर्जन कंट्रोल (जिसे डिस्ट्रिब्यूटेड संशोधन कंट्रोल के रूप में भी जाना जाता है) वर्जन कंट्रोल का रूप है जिसमें संपूर्ण कोडबेस, उसके पूर्ण इतिहास सहित, प्रत्येक डेवलपर के कंप्यूटर पर प्रतिबिंबित होता है। सेंट्रलाइज्ड वर्जन कंट्रोल की तुलना में, यह स्वचालित मैनेजमेंट ब्रांचिंग (वर्जन कंट्रोल) और मर्ज (वर्जन कंट्रोल) को सक्षम बनाता है, इस प्रकार अधिकांश संचालन को गति देता है, ऑफ़लाइन कार्य करने की क्षमता में सुधार करता है, और बैकअप के लिए ही स्थान पर निर्भर नहीं होता है. गिट (सॉफ़्टवेयर), संसार की अधिक लोकप्रिय वर्जन कंट्रोल सिस्टम, एक डिस्ट्रिब्यूटेड वर्जन कंट्रोल सिस्टम है।

2010 में, सॉफ्टवेयर विकास लेखक जोएल स्पोल्स्की ने डिस्ट्रिब्यूटेड वर्जन कंट्रोल सिस्टम्स को संभवतः विगत दस वर्षों में सॉफ्टवेयर विकास प्रौद्योगिकी में अधिक उच्च प्रगति के रूप में वर्णित किया था।

डिस्ट्रिब्यूटेड बनाम सेंट्रलाइज्ड
डिस्ट्रिब्यूटेड वर्जन कंट्रोल सिस्टम्स (डीवीसीएस) सेंट्रलाइज्ड सिस्टम्स के क्लाइंट-सर्वर मॉडल या क्लाइंट-सर्वर दृष्टिकोण के विपरीत, वर्जन कंट्रोल के लिए पीयर-टू-पीयर दृष्टिकोण का उपयोग करती हैं। इस प्रकार डिस्ट्रिब्यूटेड पुनरीक्षण कंट्रोल पैच (यूनिक्स) को सहकर्मी से दूसरे सहकर्मी में स्थानांतरित करके रिपॉजिटरी को सिंक्रनाइज़ करता है। कोडबेस का कोई केंद्रीय वर्जन नहीं है; इसके अतिरिक्त, प्रत्येक उपयोगकर्ता के पास कार्यशील प्रति और पूर्ण परिवर्तन इतिहास होता है।

डीवीसीएस के लाभ (सेंट्रलाइज्ड सिस्टम्स की तुलना में) में सम्मिलित हैं:
 * उपयोगकर्ताओं को नेटवर्क से कनेक्ट न होने पर भी उत्पादक विधि से कार्य करने की अनुमति देता है।
 * डीवीसीएस के लिए सामान्य ऑपरेशन (जैसे कमिट, इतिहास देखना और परिवर्तनों को वापस लाना) तीव्र हैं, क्योंकि केंद्रीय सर्वर के साथ संचार करने की कोई आवश्यकता नहीं है। डीवीसीएस के साथ, संचार केवल तभी आवश्यक है जब अन्य साथियों के बीच परिवर्तन साझा किए जाते है।
 * निजी कार्य की अनुमति देता है, जिससे उपयोगकर्ता अपने परिवर्तनों का उपयोग प्रारंभिक ड्राफ्ट के लिए भी कर सकें जिन्हें वे प्रकाशित नहीं करना चाहते हैं।
 * कार्यशील प्रतियां प्रभावी रूप से रिमोट बैकअप के रूप में कार्य करती हैं, जो विफलता के एकल बिंदु के रूप में भौतिक मशीन पर निर्भर होने से बचाती है।
 * विभिन्न विकास मॉडलों का उपयोग करने की अनुमति देता है, जैसे ब्रांचिंग (वर्जन कंट्रोल) विकास शाखा या कमांडर/लेफ्टिनेंट मॉडल का उपयोग करता है।
 * परियोजना के रिलीज़ वर्जन के सेंट्रलाइज्ड कंट्रोल की अनुमति देता है
 * फॉस सॉफ़्टवेयर परियोजनाओं पर किसी ऐसे प्रोजेक्ट से फ़ोर्क (सॉफ़्टवेयर विकास) बनाना अधिक सरल है जो नेतृत्व संघर्ष या डिज़ाइन असहमति के कारण रुका हुआ है।

डीवीसीएस के हानि ( सेंट्रलाइज्ड सिस्टम्स की तुलना में) में सम्मिलित हैं:
 * सेंट्रलाइज्ड वर्जन कंट्रोल सिस्टम में चेकआउट की तुलना में रिपॉजिटरी का प्रारंभिक चेकआउट धीमा है, क्योंकि सभी शाखाएं और संशोधन इतिहास डिफ़ॉल्ट रूप से स्थानीय मशीन पर कॉपी किए जाते हैं।
 * लॉकिंग तंत्र की कमी जो अधिकांश सेंट्रलाइज्ड वीसीएस का भाग है और अभी भी गैर-मर्ज करने योग्य बाइनरी फ़ाइलों जैसे ग्राफिक प्रोपर्टी या अधिक समष्टि एकल फ़ाइल बाइनरी या एक्सएमएल पैकेज (जैसे ऑफिस डाक्यूमेंट, पावरबीआई फ़ाइलें, एसक्यूएल) की बात आती है, तब भी महत्वपूर्ण भूमिका निभाती है। सर्वर डेटा टूल्स बीआई पैकेज, आदि)।
 * प्रत्येक उपयोगकर्ता के लिए संपूर्ण कोडबेस इतिहास की पूर्ण प्रतिलिपि के लिए अतिरिक्त संग्रहण की आवश्यकता है।
 * चूंकि प्रत्येक प्रतिभागी के पास स्थानीय रूप से असुरक्षित प्रतिलिपि होती है, इसलिए कोड आधार का एक्सपोज़र बढ़ जाता है।

कुछ मूल रूप से सेंट्रलाइज्ड सिस्टम्स अब कुछ डिस्ट्रिब्यूटेड सुविधाएँ प्रदान करती हैं। इस प्रकार टीम फाउंडेशन सर्वर और विजुअल स्टूडियो टीम सर्विसेज अब गिट की होस्ट के माध्यम से सेंट्रलाइज्ड और डिस्ट्रिब्यूटेड वर्जन कंट्रोल रिपॉजिटरी की होस्ट करते हैं।

इसी प्रकार, कुछ डिस्ट्रिब्यूटेड सिस्टम्स अब ऐसी सुविधाएँ प्रदान करती हैं जो चेकआउट समय और संग्रहण निवेश के उद्देश्यों को कम करती हैं, जैसे कि माइक्रोसॉफ्ट द्वारा अधिक उच्च कोडबेस के साथ कार्य करने के लिए गिट के लिए वर्चुअल फ़ाइल सिस्टम विकसित किया गया है। जो वर्चुअल फ़ाइल सिस्टम को प्रदर्शित करता है जो फ़ाइलों को स्थानीय स्टोरेज में केवल आवश्यकतानुसार डाउनलोड करता है।

कार्य मॉडल
डिस्ट्रिब्यूटेड मॉडल सामान्यतः आंशिक रूप से स्वतंत्र डेवलपर्स के साथ उच्च परियोजनाओं के लिए उत्तम अनुकूल है, जैसे कि लिनक्स कर्नेल प्रोजेक्ट, क्योंकि डेवलपर्स स्वतंत्र रूप से कार्य कर सकते हैं और मर्ज (या अस्वीकृति) के लिए अपने परिवर्तन सबमिट कर सकते हैं। डिस्ट्रिब्यूटेड मॉडल विधि से कस्टम स्रोत कोड योगदान वर्कफ़्लो को अपनाने की अनुमति देता है। इंटीग्रेटर वर्कफ़्लो सबसे व्यापक रूप से उपयोग किया जाता है। सेंट्रलाइज्ड मॉडल में, विभिन्न वर्जनों के साथ समस्याओं से बचने के लिए, डेवलपर्स को अपने कार्य को क्रमबद्ध करना होता है।

===केंद्रीय और शाखा रिपॉजिटरी                                                                                                                                                                                                                    === वास्तव में डिस्ट्रिब्यूटेड परियोजना में, जैसे कि लिनक्स, प्रत्येक योगदानकर्ता परियोजना का अपना वर्जन बनाए रखता है, विभिन्न योगदानकर्ता अपने स्वयं के संबंधित वर्जनों की होस्ट करते हैं और इस प्रकार आवश्यकतानुसार अन्य उपयोगकर्ताओं से परिवर्तन करते हैं, जिसके परिणामस्वरूप कई अलग-अलग नोड्स से सामान्य सहमति बनती है। इससे फोर्किंग की प्रक्रिया भी सरल हो जाती है, क्योंकि केवल योगदानकर्ता अन्य योगदानकर्ताओं से पुल अनुरोध स्वीकार करना बंद कर देता है और कोडबेस को धीरे-धीरे अलग होने देता है।

चूँकि, इस व्यवस्था को बनाए रखना कठिन हो सकता है, जिसके परिणामस्वरूप कई परियोजनाएँ ऐसे प्रतिमान में स्थानांतरित होने का विकल्प चुनती हैं जिसमें योगदानकर्ता सार्वभौमिक अपस्ट्रीम होता है, रिपॉजिटरी जिससे परिवर्तन लगभग सदैव पुले जाते हैं। इस प्रतिमान के अनुसार, विकास को कुछ सीमा तक नवीनीकृत किया गया है, क्योंकि अब प्रत्येक परियोजना में केंद्रीय रिपॉजिटरी होता है जिसे अनौपचारिक रूप से आधिकारिक रिपॉजिटरी माना जाता है, जिसे परियोजना अनुरक्षकों द्वारा सामूहिक रूप से प्रबंधित किया जाता है। जबकि डिस्ट्रिब्यूटेड वर्जन कंट्रोल सिस्टम्स नए डेवलपर्स के लिए किसी अन्य योगदानकर्ता के रिपॉजिटरी की प्रतिलिपि को क्लोन करना सरल बनाती हैं, केंद्रीय मॉडल में, नए डेवलपर्स सदैव कोड आधार की समान स्थानीय प्रतियां बनाने के लिए केंद्रीय रिपॉजिटरी को क्लोन करते हैं। इस सिस्टम के अनुसार, केंद्रीय रिपॉजिटरी में कोड परिवर्तन समय-समय पर स्थानीय रिपॉजिटरी के साथ सिंक्रनाइज़ किए जाते हैं, और विकास पूर्ण हो जाने पर, परिवर्तन को शीघ्र से शीघ्र केंद्रीय रिपॉजिटरी में एकीकृत किया जाना चाहिए।

इस सेंट्रलाइज्ड पैटर्न का उपयोग करने वाले संगठन अधिकांशतः गिटहब जैसी तीसरी पार्टी सेवा पर केंद्रीय रिपॉजिटरी की होस्ट करना चुनते हैं, जो न केवल स्वयं-होस्ट किए गए रिपॉजिटरी की तुलना में अधिक विश्वसनीय अपटाइम प्रदान करता है, किन्तु ट्रैकर्स जारी करें और निरंतर एकीकरण जैसी सेंट्रलाइज्ड सुविधाएं भी जोड़ सकता है।

पुल रिक्वेस्ट
डिस्ट्रिब्यूटेड वर्जन कंट्रोल सिस्टम का उपयोग करने वाले स्रोत कोड रिपॉजिटरी में योगदान समान्यतः पुल अनुरोध के माध्यम से किया जाता है, जिसे मर्ज अनुरोध के रूप में भी जाना जाता है। पुल रिक्वेस्ट करता है कि परियोजना अनुरक्षक स्रोत कोड परिवर्तन को पुल करते है, इसलिए इसका नाम पुल अनुरोध है। यदि योगदान स्रोत आधार का भाग बनना चाहिए तो अनुरक्षक को पुल अनुरोध को मर्ज करना होता है।

डेवलपर नए परिवर्तन के अनुरक्षकों को सूचित करने के लिए पुल अनुरोध बनाता है; प्रत्येक पुल अनुरोध के साथ टिप्पणी थ्रेड जुड़ा हुआ है। यह कोड समीक्षा की अनुमति देता है। सबमिट किए गए पुल अनुरोध रिपॉजिटरी एक्सेस वाले किसी भी व्यक्ति को दिखाई देते हैं। पुल अनुरोध को अनुरक्षकों द्वारा स्वीकार या अस्वीकार किया जा सकता है। एक बार पुल अनुरोध की समीक्षा और अनुमोदन हो जाने के पश्चात्, इसे रिपॉजिटरी में विलय कर दिया जाता है। स्थापित वर्कफ़्लो के आधार पर, आधिकारिक रिलीज़ में सम्मिलित किए जाने से पहले कोड का परीक्षण करने की आवश्यकता हो सकती है। इसलिए, कुछ परियोजनाओं में अप्रयुक्त पुल अनुरोधों को मर्ज करने के लिए विशेष शाखा होती है। अन्य परियोजनाएं निरंतर एकीकरण उपकरण का उपयोग करके प्रत्येक पुल अनुरोध पर स्वचालित परीक्षण सूट चलाती हैं, और समीक्षक यह जांचता है कि किसी भी नए कोड में उचित परीक्षण कवरेज है या नहीं है।

इतिहास
पहले ओपन-सोर्स डीवीसीएस सिस्टम में जीएनयू आर्क, मोनोटोन (सॉफ्टवेयर), और डार्क्स सम्मिलित थे। चूँकि, गिट (सॉफ़्टवेयर) और मर्क्यूरियल (सॉफ़्टवेयर) के रिलीज़ होने तक ओपन सोर्स डीवीसीएस कभी भी अधिक लोकप्रिय नहीं थे।

बिटकीपर का उपयोग 2002 से 2005 तक लिनक्स कर्नेल के विकास में किया गया था। गिट (सॉफ़्टवेयर) का विकास, जो अब संसार की अधिक लोकप्रिय वर्जन कंट्रोल सिस्टम है, उस कंपनी के निर्णय से प्रेरित हुआ जिसने बिटकीपर को उस फ्री लाइसेंस को निरस्त करने के लिए प्रेरित किया जिसका लिनस टोरवाल्ड्स और कुछ अन्य लिनक्स कर्नेल डेवलपर्स ने पहले लाभ उठाया था।

यह भी देखें
• वर्जन कंट्रोल

• वर्जन-कंट्रोल सॉफ्टवेयर की सूची

• वर्जन-कंट्रोल सॉफ़्टवेयर की तुलना

• वितरित वर्जन कंट्रोल का उपयोग करने वाला सॉफ़्टवेयर

• रिपोजिटरी क्लोन

• गिट, एक ओपन सोर्स लिनक्स कर्नेल विकास के लिए डीवीसीएस विकसित किया गया

• मर्क्यूरियल, गिट के समान एक क्रॉस-प्लेटफ़ॉर्म सिस्टम

• फ़ॉसिल, एक वितरित संस्करण नियंत्रण सिस्टम, बग ट्रैकिंग सिस्टम और विकी सॉफ़्टवेयर

• बिटकीपर

• जीएनयू बाज़ार

• समवर्ती वर्जन सिस्टम, वितरित वर्जन कंट्रोल सिस्टम का पूर्ववर्ती

• टोरटोइजएचजी, मर्क्यूरियल के लिए एक ग्राफिकल इंटरफ़ेस

• कोड को-ऑप, एक पीयर-टू-पीयर वर्जन कंट्रोल सिस्टम

बाहरी संबंध

 * Essay on various revision control systems, especially the section "Centralized vs. Decentralized SCM"
 * Introduction to distributed version control systems - IBM Developer Works article

Versionsverwaltung Gestion de version décentralisée 分散型バージョン管理システム