सबवर्सन (और सीवीएस) में, रिपॉजिटरी पहले और सबसे महत्वपूर्ण है। गिट और मर्क्यूरियल में वास्तव में उसी तरह एक रिपॉजिटरी की अवधारणा नहीं है; यहाँ परिवर्तन केंद्रीय विषय हैं।
+1
सीवीएस / एसवीएन में परेशानी इस तथ्य से आती है कि इन प्रणालियों
को परिवर्तनों के पितृत्व को याद नहीं है। Git और Mercurial में, न केवल एक प्रतिबद्ध कई बच्चे हो सकते हैं, इसमें कई माता-पिता भी हो सकते हैं!
यह आसानी से एक ग्राफिकल टूल का उपयोग करके देखा जा सकता है, gitk
या hg
view
। निम्नलिखित उदाहरण में, शाखा # 2 को कमिट ए में # 1 से लिया गया था, और तब से एक बार (एम में, कमिट बी में विलय कर दिया गया है):
o---A---o---B---o---C (branch #1)
\ \
o---o---M---X---? (branch #2)
ध्यान दें कि A और B के दो बच्चे हैं, जबकि M के दो माता-पिता हैं । ये संबंध भंडार में दर्ज हैं । मान लीजिए कि शाखा # 2 के अनुरक्षक अब शाखा # 1 से नवीनतम परिवर्तनों को मर्ज करना चाहते हैं, वे इस तरह के रूप में एक आदेश जारी कर सकते हैं:
$ git merge branch-1
और उपकरण को स्वचालित रूप से पता चल जाएगा कि आधार B है - क्योंकि यह प्रतिबद्ध M में दर्ज किया गया था, # 2 की नोक के पूर्वज - और यह है कि B और C. CVS के बीच जो कुछ भी हुआ है, उसे इस जानकारी को रिकॉर्ड नहीं करना है। , और न ही संस्करण 1.5 से पहले SVN। इन प्रणालियों में, ग्राफ ऐसा दिखेगा:
o---A---o---B---o---C (branch #1)
\
o---o---M---X---? (branch #2)
जहाँ M, A और B के बीच होने वाली हर चीज़ के लिए केवल एक विशाल "विवादित" प्रतिबद्ध है, जो एम। के शीर्ष पर लागू होता है कि विलेख किए जाने के बाद, जहाँ M का कोई निशान नहीं बचा है (संभवतः मानव-पठनीय टिप्पणियों में) से उत्पन्न हुआ था, न ही कितने कमिट एक साथ ढह गए थे - इतिहास को और अधिक अभेद्य बना दिया।
इससे भी बदतर, एक दूसरे मर्ज का प्रदर्शन दुःस्वप्न बन जाता है: किसी को यह पता लगाना होगा कि पहले मर्ज के समय मर्ज का आधार क्या था (और किसी को यह जानना होगा
कि पहले स्थान पर मर्ज हो गया है!), फिर उसे प्रस्तुत करें! उपकरण की जानकारी ताकि वह एम के शीर्ष पर A..B को फिर से चलाने की कोशिश न करे। यह सब काफी मुश्किल है जब करीबी सहयोग में काम कर रहा है, लेकिन वितरित वातावरण में बस असंभव है।
ए (संबंधित) समस्या यह है कि सवाल का जवाब देने का कोई तरीका नहीं है: "क्या एक्स में बी शामिल है?" जहां B एक संभावित महत्वपूर्ण बग फिक्स है। तो, क्यों न केवल उस जानकारी को कमिट में दर्ज किया जाए, क्योंकि यह मर्ज के समय पर जानी जाती है !
P.-S. - मुझे SVN 1.5+ मर्ज रिकॉर्डिंग क्षमताओं के साथ कोई अनुभव नहीं है, लेकिन वर्कफ़्लो वितरित सिस्टम की तुलना में बहुत अधिक विपरीत प्रतीत होता है। यदि वास्तव में ऐसा है, तो शायद ऐसा इसलिए है - जैसा कि ऊपर की टिप्पणी में बताया गया है - ध्यान स्वयं परिवर्तनों के बजाय रिपॉजिटरी संगठन पर केंद्रित है।