"हाय, अमीगो!"

"नमस्ते!"

"आज मैं आपको वर्जन कंट्रोल सिस्टम के बारे में बताऊंगा।"

"जैसा कि आप शायद पहले से ही जानते हैं, प्रोग्राम अक्सर बहुत बड़े होते हैं और लिखने में बहुत लंबा समय लेते हैं। कभी-कभी दर्जनों लोग प्रोग्राम लिखने में वर्षों लगा सकते हैं।"

"कोड की लाखों पंक्तियों वाली परियोजनाएँ एक वास्तविकता हैं।"

"वाह।"

"यह सब बहुत जटिल है। लोग अक्सर एक दूसरे के साथ हस्तक्षेप करते हैं, और अक्सर एक ही कोड को संशोधित करते हैं, और इसी तरह आगे भी।"

"इस गड़बड़ी को ठीक करने के लिए, प्रोग्रामर ने अपने कोड के लिए वर्जन कंट्रोल सिस्टम का उपयोग करना शुरू कर दिया।"

" एक संस्करण नियंत्रण प्रणाली क्लाइंट और सर्वर से मिलकर एक प्रोग्राम है।

"प्रोग्राम एक सर्वर पर डेटा (प्रोग्रामर द्वारा लिखा गया कोड) संग्रहीत करता है, और प्रोग्रामर क्लाइंट का उपयोग करके इसे जोड़ते या बदलते हैं।"

"संस्करण नियंत्रण प्रणाली और कार्यक्रमों के बीच मुख्य अंतर यह है कि यह दस्तावेजों पर सहयोगात्मक रूप से काम करना संभव बनाता है, यह सभी दस्तावेजों (कोड फाइलों) के पिछले सभी संस्करणों को संग्रहीत करता है।"

"क्या आप मुझे और विवरण दे सकते हैं। यह सब कैसे काम करता है?"

"कल्पना करें कि आप एक प्रोग्रामर हैं और आप सर्वर पर रिपॉजिटरी में संग्रहीत प्रोग्राम के स्रोत कोड में छोटे बदलाव करना चाहते हैं।"

"यहाँ आपको क्या करना है:"

"1) सर्वर में लॉग इन करें।"

"2) चेकआउट कमांड का उपयोग करके सभी फाइलों के नवीनतम संस्करण को अपने कंप्यूटर पर कॉपी करें।"

"3) आवश्यक फाइलों में परिवर्तन करें।"

"4) यह सुनिश्चित करने के लिए प्रोग्राम को स्थानीय रूप से चलाएं कि यह संकलित और चलता है।"

"5) कमिट कमांड का उपयोग करके अपने 'परिवर्तन' सर्वर को भेजें।"

"यह आम तौर पर समझ में आता है।"

"लेकिन वहाँ और भी है। कल्पना कीजिए कि आप सुबह काम पर आते हैं, लेकिन यह पहले से ही भारत में दोपहर के भोजन का समय है। इसलिए आपके भारतीय सहयोगियों ने पहले से ही परिवर्तन किए हैं और सर्वर पर आपके रिपॉजिटरी में उनके परिवर्तन किए हैं।"

"आपको कोड के नवीनतम संस्करण के साथ काम करने की आवश्यकता है। इसलिए आप अपडेट कमांड का पालन करें।"

"यह चेकआउट से किस प्रकार भिन्न है ?"

" चेकआउट को रिपॉजिटरी की सभी फ़ाइलों की प्रतिलिपि बनाने के लिए डिज़ाइन किया गया है, लेकिन अपडेट केवल उन फ़ाइलों को अपडेट करता है जिन्हें सर्वर पर अपडेट किया गया है जब से आपने पिछली बार चेकआउट / अपडेट कमांड चलाया था।"

"यह लगभग इस तरह काम करता है:"

चेकआउट :

वर्जन कंट्रोल सिस्टम - 1

"अब, मान लें कि हमने फाइल बी को बदल दिया है और इसे सर्वर पर अपलोड करना चाहते हैं। ऐसा करने के लिए, हमें कमिट कमांड का उपयोग करने की आवश्यकता है।"

वर्जन कंट्रोल सिस्टम - 2

"और यहां बताया गया है कि अपडेट कमांड कैसे काम करता है:"

संस्करण नियंत्रण प्रणाली - 3

"कितना दिलचस्प है! क्या कोई अन्य आदेश हैं?"

"हां, काफी कुछ हैं। लेकिन वे आपके द्वारा चुने गए संस्करण नियंत्रण कार्यक्रम के आधार पर भिन्न होते हैं। इसलिए, मैं केवल सामान्य सिद्धांतों की व्याख्या करने की कोशिश कर रहा हूं।"

"विलय नामक एक ऑपरेशन भी है - दो दस्तावेज़ों का मिलन। मान लीजिए कि दो प्रोग्रामर एक ही समय में एक ही फ़ाइल को संशोधित करते हैं। फिर सर्वर पर प्रोग्राम दोनों परिवर्तनों को कमिट करने की अनुमति नहीं देगा। जो भी पहले कमिट करता है उसे अपना जोड़ना होगा या उसके परिवर्तन।"

"तो दूसरा व्यक्ति क्या करता है?"

"उसे सर्वर से नवीनतम परिवर्तनों को प्राप्त करने के लिए अपडेट ऑपरेशन करने के लिए आमंत्रित किया जाएगा। वैसे, यह - करने से पहले एक अपडेट करना - अच्छा अभ्यास है।"

"फिर, अपडेट ऑपरेशन के दौरान, क्लाइंट प्रोग्राम सर्वर से प्राप्त परिवर्तनों के साथ स्थानीय परिवर्तनों को मर्ज करने का प्रयास करेगा।"

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

"उदाहरण के लिए, ऐसा अक्सर तब होता है जब दोनों प्रोग्रामर फ़ाइल के अंत में कुछ जोड़ते हैं।"

"मैं देख रहा हूँ। कुल मिलाकर, यह उचित लगता है।"

"और एक और बात है: शाखाएं।"

"कल्पना करें कि एक टीम के दो प्रोग्रामर को एक ही मॉड्यूल को फिर से लिखने का काम सौंपा गया है। या इससे भी बेहतर - इसे स्क्रैच से फिर से लिखना। जब तक यह मॉड्यूल पूरा नहीं हो जाता, तब तक प्रोग्राम नहीं चल पाएगा, और शायद कंपाइल भी नहीं होगा।"

"तो उन्हें क्या करना चाहिए?"

"वे रिपॉजिटरी में शाखाओं को जोड़कर आगे बढ़ते हैं। मोटे तौर पर, इसका मतलब है कि रिपॉजिटरी दो भागों में विभाजित हो जाती है। फ़ाइलों या निर्देशिकाओं द्वारा नहीं, बल्कि संस्करणों द्वारा।"

"कल्पना कीजिए कि बिजली की खोज कभी नहीं हुई थी और रोबोट का आविष्कार कभी नहीं हुआ था। तब तीन मुक्ति युद्ध कभी नहीं हुए होंगे, और मानव इतिहास के सभी ने पूरी तरह से अलग रास्ता अपनाया होगा। "

"यह पथ इतिहास की एक वैकल्पिक शाखा है।"

"या आप बस रिपॉजिटरी की एक प्रति के रूप में एक शाखा को चित्रित करने की कोशिश कर सकते हैं। दूसरे शब्दों में, किसी बिंदु पर, हमने सर्वर पर रिपॉजिटरी का एक क्लोन बनाया, ताकि मुख्य रिपॉजिटरी के अलावा (अक्सर ट्रंक कहा जाता है ) ), हमारी एक और शाखा है ।"

"ठीक है, यह अधिक समझ में आता है।

"आप यह क्यों नहीं कह सकते कि हमने रिपॉजिटरी की नकल की?"

"यह साधारण नकल नहीं है।"

"इन शाखाओं को न केवल ट्रंक से अलग किया जा सकता है, बल्कि इसमें विलीन भी किया जा सकता है।"

"दूसरे शब्दों में, शाखा में कुछ काम किया जा सकता है, और फिर जब यह समाप्त हो जाए तो आप भंडार शाखा को भंडार ट्रंक में जोड़ सकते हैं?"

"हां।"

"और फाइलों का क्या होगा?"

"फाइल मर्ज हो जाएगी।"

"ठीक है, यह अच्छा लगता है। मुझे आशा है कि यह कार्रवाई में उतना ही अच्छा है।"

"और फिर कुछ। ठीक है, चलो एक ब्रेक लेते हैं।"

" यहाँ उपयोगी जानकारी का एक समूह है  "