हम सबवर्जन जीक्स हैं और हम मर्क्यूरियल के लाभ जानना चाहते हैं [बंद]


22

पढ़ने के बाद , मैं एक तोड़फोड़ करने वाला गिक हूं, मुझे मर्क्यूरियल या गिट या किसी अन्य डीवीसीएस पर विचार क्यों करना चाहिए या नहीं करना चाहिए

मेरा संबंधित अनुवर्ती प्रश्न है। मैं उस प्रश्न को पढ़ता हूं और अनुशंसित लिंक और वीडियो पढ़ता हूं और मुझे लाभ मिलते हैं, लेकिन मुझे नहीं लगता कि समग्र मानसिकता वाले लोग बात कर रहे हैं।

हमारी टीम 8-10 डेवलपर्स की है जो 60 परियोजनाओं से युक्त एक बड़े कोड बेस पर काम करते हैं। हम तोड़फोड़ का उपयोग करते हैं और एक मुख्य ट्रंक है। जब एक डेवलपर एक नया फोगबुग केस शुरू करता है तो वे एक svn शाखा बनाते हैं, शाखा पर काम करते हैं और जब वे कर लेते हैं तो वे वापस ट्रंक में विलय हो जाते हैं। कभी-कभी वे विस्तारित समय के लिए शाखा पर रह सकते हैं और परिवर्तनों को लेने के लिए ट्रंक को शाखा में विलय कर सकते हैं।

जब मैंने लिनस को एक शाखा बनाते हुए लोगों के बारे में बात करते हुए देखा और फिर कभी ऐसा नहीं किया, तो हम बिल्कुल भी नहीं। हम समस्या के बिना एक सप्ताह में संभवतः 50-100 शाखाएं बनाते हैं। सबसे बड़ी चुनौती विलय है, लेकिन हमने उस पर भी बहुत अच्छा काम किया है। मैं शाखा के पूरे रूट के बजाय फोगबुगज़ केस और चेकइन द्वारा विलय करने की कोशिश करता हूं।

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

एक शाखा बनाने के बाद 60k + फ़ाइलों के निम्नलिखित चेकआउट में कुछ समय लगता है लेकिन यह किसी भी स्रोत नियंत्रण प्रणाली के साथ एक समस्या होगी जो हम उपयोग करेंगे।

क्या किसी डीवीसीएस का कोई लाभ है जो हम नहीं देख रहे हैं जो हमारे लिए बहुत मददगार होगा?


यह लगभग ऐसा लगता है जैसे कि आप पहले से ही एक DVCS के रूप में SVN का उपयोग कर रहे हैं (वैसे भी शाखा के संबंध में)। मुझे यकीन है कि आप लगभग सब कुछ कर सकते हैं जो Mercurial SVN (और इसके विपरीत) के साथ कर सकता है; सवाल यह है कि कौन सा उपयोग करना आसान है और आपके विशेष विकास परिदृश्य के लिए अधिक सुविधाजनक है? मुझे लगता है कि आपको अपने आप को देखने के लिए मर्क्यूरियल को आज़माने की ज़रूरत होगी चाहे वह इसके लायक हो या नहीं
कैमरून

मैं मर्क्यूरियल का प्रशंसक हूं और यह स्पष्ट रूप से एसवीएन की विशेषताओं का एक सुपरसेट प्रदान करता है, लेकिन कहा जा रहा है कि उन अतिरिक्त सुविधाओं को केवल परियोजनाओं के एक छोटे से अल्पसंख्यक के लिए वास्तव में उपयोगी है। आपको शायद इसकी आवश्यकता नहीं है, यह आपके जीवन को नहीं बदलेगा, लेकिन आपको अधिक सुविधाएँ मिलेंगी और कुछ भी नहीं खोना होगा, तो क्यों नहीं?
जिग्गी

क्या आपने Hg Init की जाँच की है ? यह एक मर्क्यूरियल ट्यूटोरियल है जोएल स्पोल्स्की द्वारा लिखा गया है। यह तोड़फोड़ उपयोगकर्ताओं के लिए एक अध्याय के साथ शुरू होता है, लेकिन अन्यथा आपको DVCS के बारे में कुछ भी नहीं पता है।
बैरी ब्राउन

जवाबों:


11

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

डीवीसीएस को समझने के लिए सोच में एक मौलिक बदलाव की आवश्यकता है। आपको अपने आप से पूछना होगा कि आप जितनी शाखाएँ चाहते हैं उतने से क्या करेंगे जो आप चाहते हैं और केवल उन्हें साझा किया जाता है। इसमें वे शाखाएँ शामिल हैं जो केवल स्वयं द्वारा देखी जाती हैं।

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

इंटरमीडिएट स्थानीय कमिट करने की क्षमता अपने आप ही सभी के लायक है। बस आपको अपने लिए कुछ अनुभव करना है।

आपके रेपो लोकल होने से प्राप्त गति भी इसके लायक है। हां, 60k फाइल रेपो के लिए किसी भी VCS में प्रारंभिक क्लोन अपरिहार्य रूप से धीमा होगा, लेकिन आपके पास एक बार, एक नई शाखा की जाँच करने पर DVCS के साथ तीव्रता का क्रम बढ़ जाता है।


2
+1! इसके अलावा, यदि आप मेधावी को उचित और पूरी तरह से कोशिश करते हैं, तो मुझे यकीन है कि आप वापस नहीं जाना चाहेंगे।
पीट

1
"आपको अपने आप से पूछना होगा कि आप जितनी शाखाओं में से चाहते हैं, उतने शाखाओं के साथ क्या करेंगे जो आप चाहते हैं, और केवल उन्हें" ... "इंटरफ़ेस के विपरीत किनारों पर काम करने वाले दो लोग? उन्हें प्रत्येक के साथ कोड साझा करने की आवश्यकता है? अन्य नियमित रूप से, लेकिन यह अभी तक सभी के साथ साझा करने के लिए पर्याप्त स्थिर नहीं है। वे आपस में साझा करने के लिए एक शाखा बना सकते हैं, फिर इसे तैयार होने पर केंद्रीय भंडार में वापस मर्ज कर सकते हैं। " हम सब अब तोड़फोड़ के साथ है।
मैट

@ मैट, फिर आप भाग्यशाली हैं क्योंकि आपका व्यवसाय नियम से अधिक अपवाद है। ज्यादातर कंपनियों के केंद्रीय सर्वर के सीमित संसाधन पर शाखाएं बनाने के बारे में बहुत सख्त नियम हैं, इसलिए लोग अस्थायी कारणों से उन्हें बनाने के बारे में सोचते भी नहीं हैं।
कार्ल बेवफेल्ट

3
मुझे लगता है कि यह उत्तर इस तथ्य को याद कर रहा है कि मूल पोस्टर पहले से ही एसवीएन को काम करने के लिए मजबूर कर रहा है जो कि डीवीसीएस वर्कफ़्लो के बहुत करीब है, एसवीएन के अधिकांश उपयोगकर्ता व्यवहार्य समझेंगे। संक्षेप में, उनके पास पहले से ही डीवीसीएस मानसिकता है, इसलिए सोच में कोई मौलिक बदलाव की आवश्यकता नहीं है।
मार्क बूथ

अच्छी बात @ मर्क। इतनी छोटी टीम पर, बड़ी टीमों के लिए बहुत सारे सामान्य सम्मेलन खिड़की से बाहर चले जाते हैं। मुझे अभी भी लगता है कि यह गति कारणों से इसके लायक है।
कार्ल बेवफेल्ट

1

आपके विशेष मामले के लिए, डीवीसीएस पर स्विच करने में कोई लाभ नहीं है। आप अपने मौजूदा सिस्टम से खुश हैं, यह आपकी ज़रूरत की हर चीज़ को पूरा करता है, तो क्यों स्विच करें? SVN अभी भी एक सक्रिय ओपन सोर्स प्रोजेक्ट है, और इसमें hg या git की तुलना में सभी प्रमुख IDE और डेवलपमेंट टूल्स के साथ बेहतर, अधिक परिपक्व एकीकरण है। आपकी टीम के आकार और परियोजनाओं की संख्या को देखते हुए, क्या आप वास्तव में एक नए टूल में बदलने के लिए समय लेना चाहते हैं जब मौजूदा एक ही ठीक काम कर रहा है?

यदि आपके पास ऐसे डेवलपर हैं जो बिना DVCS के कार्य नहीं कर सकते हैं, तो उन्हें hg या git के लिए svn के प्रवेश द्वार की ओर इंगित करें। यह उनके लिए बहुत स्पष्ट है कि svn रिपॉजिटरी के लिए उनके चेकइन को उन प्रक्रियाओं के अनुरूप होना चाहिए जो बाकी टीम के उपयोग की प्रक्रियाएं और प्रक्रियाएं हैं। इस दृष्टिकोण का एक और लाभ यह है कि सच्चे DVCS zealots जो पहले से ही बिना बताए गेटवे का उपयोग कर रहे हैं, अब आप क्लोजर :-) से बाहर आ सकते हैं।


क्या हम बदलाव के लिए समय निकालना चाहते हैं? नहीं, विशेष रूप से तब नहीं जब हमने पिछले 2 वर्षों में केवल svn पर स्विच किया था। आपकी टिप्पणियों के लिए आभार।
मैट

1

यह मुझे लगता है कि आप पहले से ही एक वर्कफ़्लो का उपयोग कर रहे हैं जो कि डीवीसी का उपयोग शुरू करने के बाद बहुत से लोगों द्वारा अपनाए जाने वाले कार्य प्रवाह के समान है।

आपके दृष्टिकोण से, एक DVCS में SVN पर निम्नलिखित महत्वपूर्ण लाभ होंगे:

  • एक बार जब आप अपने रेपो (ओं) को क्लोन कर लेते हैं तो कई ऑपरेशन स्थानीय स्तर पर किए जा सकते हैं।
    • रिपॉजिटरी लॉग को देखते हुए svn सर्वर को छूने की जरूरत नहीं है, इसलिए अविश्वसनीय रूप से तेज हो सकता है ।
    • इसी तरह, स्विचिंग शाखाओं को सर्वर तक पहुंच की आवश्यकता नहीं होती है, न ही स्थानीय क्लोन की।
  • चूँकि शाखाएँ इतिहास के माध्यम से सिर्फ अव्यवस्थित पथ हैं, आपकी रिपॉजिटरी हर शाखा के पास नहीं है जिसे किसी ने भी बनाया है (हम वास्तव में एसवीएन में केवल शाखाएँ जारी करते हैं, लेकिन branchesनिर्देशिका में अभी भी कई उपनिर्देशिकाएँ हैं जो अब प्रासंगिक नहीं हैं)।
    • Git में, एक बार एक शाखा को वापस मर्ज कर दिए जाने और रेफरी को हटा दिए जाने के बाद, आप शायद कभी नहीं जान पाएंगे कि यह वहां भी था।
    • मर्क्यूरियल में आपके पास एक शाखा का नामकरण करने का विकल्प होता है (जिस स्थिति में यह प्रत्येक परिवर्तन प्रति-व्यक्ति में एन्कोडेड होता है) या सिर्फ एक अनाम (टोपोलॉजिकल) शाखा का निर्माण करता है, जो चुपचाप इतिहास में विलय हो जाएगा जब यह mergeवापस d default( trunk) होगा
  • एसवीएन में, शाखाओं की शाखाएं उपयोगी होने के लिए बहुत अस्पष्ट हैं। में gitऔर hgवे कोर्स के लिए बराबर हैं।
  • DVCS 'यह समझता है कि सॉफ्टवेयर विकास एक DAG है , अर्थात जब आप विलय करते हैं, तो आप कई अभिभावकों के साथ बदलाव के साथ समाप्त होते हैं। एसवीएन (कम से कम संस्करण मैंने उपयोग किया है) वास्तव में इसे नहीं समझता है।

उस आखिरी बिंदु पर, आप कहते हैं

संघर्ष संघर्ष हैं, मैं यह नहीं देखता कि किसी भी प्रणाली को अधिकांश समय सही कैसे मिल सकता है जब तक कि कोड को समझने के लिए यह पर्याप्त स्मार्ट नहीं था।

hgविशेष रूप से svnअकेले उपयोग करने से स्विच करने में और फिर gitsvnयह मेरा अनुभव है कि विलय बहुत सरल और परेशानी से मुक्त हैं hgऔर gitsvnउनके साथ हैं svn। के साथ विलय svn(कम से कम संस्करण हम उपयोग करते हैं) काफी अधिक संघर्षों का उत्पादन करते हैं जिन्हें मैन्युअल रूप से हल करने की आवश्यकता होती है।

एसवीएन में विलय के कारणों में से एक अधिक कठिन है, यह केवल आपको प्रत्येक पंक्ति के लिए दो विकल्प देता है जो अलग-अलग होते हैं,

  • उस शाखा से पाठ जिसे आप मर्ज कर रहे हैं
  • उस शाखा से पाठ जिसे आप मर्ज कर रहे हैं

डीवीसीएस से विलय होने पर आमतौर पर आपको एक तीसरा विकल्प मिलेगा, जो है

  • दोनों शाखाओं के सामान्य पूर्वज से पाठ जिसे आप मर्ज कर रहे हैं

कम मत समझना यह सिर्फ कैसे फायदेमंद है, यह प्रदान करता है बहुत एक सरल दो तरह से कर सकते थे diff से परिवर्तन के लिए बेहतर संदर्भ।

सभी के सभी, मैं सुझाव दूंगा कि आप इसे आजमाएं। जैसे उपकरणों के साथ gitsvnऔर hgsubversion, आप अपने वर्तमान एसवीएन रिपोज के साथ भी उन्हें आज़मा सकते हैं

ध्यान दें, पहली बार में क्लोन बनाना एक शाही PItA है, लेकिन एक बार जब आप ऐसा कर लेते हैं, तो आपको अपने मौजूदा CVCS के साथ DVCS की अधिकांश शक्ति मिल जाती है।


1
एसवीएन आपके द्वारा बताए गए मामले में कोई संघर्ष नहीं करता है। यह तभी पॉप अप होता है जब आप दोनों एक ही लाइन बदलते हैं। विलय आम तौर पर फ़ाइल नाम बदलने / चालने या svn में जोड़ने / हटाने के साथ एक समस्या है क्योंकि यह विलय निर्देशिकाओं को अच्छी तरह से संभाल नहीं करता है। एसवीएन मर्ज आपको उन 2 की तुलना में अधिक विकल्प देता है, आमतौर पर मैं "उनका उपयोग करें फिर मेरा" का उपयोग करता है जैसा कि आप आम तौर पर दोनों परिवर्तनों के सेट को रखना चाहते हैं, न कि उन दोनों को हटाएं!
gbjbaanb 16

@gbjbaanb - यह वह नहीं है जो मैंने पाया है, यही वजह है कि मैंने एसवीएन के साथ अपने अनुभव को प्राप्त किया at least the version I've used। मैं समझता हूँ कि SVN का नवीनतम संस्करण है करता आम पूर्वजों के बारे में समझते हैं, लेकिन मुझे लगता है कि का कोई अनुभव नहीं है और मुझे लगता है वहाँ कई सर्वर है जो एक ही समस्या है SVN के पुराने संस्करण चला रहे हैं।
मार्क बूथ

संयोग से, मुझे इस तथ्य से प्यार है कि hg(और लगभग निश्चित रूप से git, लेकिन मैंने इसे आज़माया नहीं है) आप तीन वर्गों के साथ एक फ़ाइल ले सकते हैं, इसे एक कक्षा के साथ तीन फ़ाइलों में विभाजित कर सकते हैं, फिर बाद में एक शाखा के साथ परिवर्तनों के बीच विलय कर सकते हैं। 'संयुक्त' फ़ाइल और अलग-अलग फ़ाइलों वाली एक शाखा, जो अलग-अलग वर्गों में परिवर्तन करके सही फ़ाइलों पर लागू होती है। शुद्ध जादू। * 8 ')
मार्क बूथ

1
gbjbaanb सही है; आपके द्वारा वर्णित परिदृश्य में SVN का विरोध नहीं होगा। यह अपने आप को प्रदर्शित करना बहुत आसान है।
जेरेमी

@Jeremy @gbjaanb - क्या संपादित अनुभाग आपके लिए बेहतर काम करता है? मैं आपसे इस बारे में बहस नहीं करने जा रहा हूं कि svnविलय कैसे काम करना चाहिए, मेरे पास इसका अपना अनुभव है और svnकमांड लाइन और SVNKit एक्लिप्स के तहत जहां अपडेट में केवल खींचने से 'टकराव' हो सकता है जिसे मैन्युअल रूप से कट और पेस्ट से हल करना होगा। (मैं आसानी से नहीं कह सकता 'मैं इस क्रम में, इन दोनों परिवर्तनों को चाहता हूं)।
मार्क बूथ

0

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

लेकिन, वास्तव में, मैं वास्तव में तोड़फोड़ से दूर नहीं गया हूं। मैं सिर्फ अपने स्थानीय svn ग्राहक के रूप में git का उपयोग कर रहा हूं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.