नोट: वर्तमान प्रश्न के उत्तर के लिए "EDIT" देखें
सबसे पहले, जोएल स्पोल्स्की द्वारा तोड़फोड़ फिर से शिक्षा पढ़ें । मुझे लगता है कि आपके अधिकांश सवालों का जवाब वहां दिया जाएगा।
एक और सिफारिश, लिनस टॉर्वाल्ड्स की चर्चा Git पर: http://www.youtube.com/watch?v=4XpnKHJok8 । यह अन्य भी आपके अधिकांश प्रश्नों का उत्तर दे सकता है, और यह काफी मनोरंजक है।
BTW, कुछ मुझे काफी मज़ेदार लगता है: यहां तक कि ब्रायन फिट्ज़पैट्रिक और बेन कॉलिन्स-सूसमैन, दो तोड़फोड़ के मूल रचनाकारों ने एक गूगल टॉक में कहा कि "इस बारे में खेद है" कि तोड़फोड़ का जिक्र मर्क्यूरियल (और सामान्य रूप से डीवीसीएस) से किया जा रहा है।
अब, IMO और सामान्य रूप से, टीम की गतिशीलता किसी भी DVCS के साथ स्वाभाविक रूप से विकसित होती है, और एक उत्कृष्ट लाभ यह है कि आप ऑफ़लाइन कर सकते हैं क्योंकि यह निम्नलिखित बातों का तात्पर्य करता है:
- आप एक सर्वर और एक कनेक्शन पर निर्भर नहीं करते हैं, जिसका अर्थ है तेज समय।
- उन जगहों पर गुलाम नहीं होना चाहिए जहां आप इंटरनेट एक्सेस (या वीपीएन) प्राप्त कर सकते हैं, बस करने में सक्षम होने के लिए।
- हर किसी के पास हर चीज (फाइल, इतिहास) का बैकअप होता है, न कि सर्वर का। मतलब कोई भी सर्वर बन सकता है ।
- यदि आप दूसरों के कोड को गड़बड़ाने के बिना ज़रूरत है तो आप अनिवार्य रूप से कर सकते हैं । कमिट स्थानीय हैं। आप एक दूसरे के पैर की उंगलियों पर कदम नहीं रखते। आप केवल कमिट करके अन्य बिल्ड या वातावरण को नहीं तोड़ते हैं।
- "प्रतिबद्ध पहुंच" के बिना लोग प्रतिबद्ध हो सकते हैं (क्योंकि डीवीसीएस में आने से कोड को अपलोड करने का मतलब नहीं है), योगदान के लिए बाधा कम करके, आप उनके बदलावों को खींचने का फैसला कर सकते हैं या एक इंटीग्रेटर के रूप में नहीं।
- यह डीवीसी के बाद से प्राकृतिक संचार को सुदृढ़ कर सकता है। यह आवश्यक है ... तोड़फोड़ में आपके पास इसके बजाय प्रतिबद्ध दौड़ हैं, जो संचार को बाध्य करते हैं, लेकिन आपके काम में बाधा डालते हैं।
- योगदानकर्ता अपनी मर्जिंग को संभाल सकते हैं और अंत में इंटीग्रेटर्स के लिए कम काम कर सकते हैं।
- योगदानकर्ताओं की दूसरों को प्रभावित किए बिना अपनी शाखाएं हो सकती हैं '(लेकिन यदि आवश्यक हो तो उन्हें साझा करने में सक्षम)।
अपने अंकों के बारे में:
- DVCSland में विलय नरक मौजूद नहीं है; को संभालने की जरूरत नहीं है। अगले अंक देखें ।
- डीवीसीएस में, हर कोई एक "शाखा" का प्रतिनिधित्व करता है, जिसका अर्थ है कि विलय हैं हर परिवर्तन को खींच लिया जाता है। नामित शाखाएं एक और चीज हैं।
- आप चाहें तो निरंतर एकीकरण का उपयोग कर सकते हैं। आईएमएचओ आवश्यक नहीं है, फिर भी जटिलता क्यों जोड़ें ?, बस अपने परीक्षण को अपनी संस्कृति / नीति के हिस्से के रूप में रखें।
- कुछ चीजों में मर्क्यूरियल तेज होता है, अन्य चीजों में गिट तेज होता है। वास्तव में DVCSs के लिए सामान्य रूप से नहीं, लेकिन उनके विशेष कार्यान्वयन AFAIK तक।
- हर किसी के पास हमेशा पूरा प्रोजेक्ट होगा, केवल आप ही नहीं। वितरित की गई चीज़ों का यह करना है कि आप स्थानीय रूप से / अपडेट कर सकते हैं, अपने कंप्यूटर के बाहर साझा / लेना-देना पुश / पुलिंग कहलाता है।
- फिर से, तोड़फोड़ पुनः शिक्षा पढ़ें। DVCS आसान और अधिक प्राकृतिक हैं, लेकिन वे अलग-अलग हैं, यह सोचने की कोशिश न करें कि सभी संस्करणों के cvs / svn === आधार।
मैं DVCS के माइग्रेशन का प्रचार करने में मदद करने के लिए जूमला परियोजना में कुछ प्रलेखन का योगदान दे रहा था, और यहाँ मैंने केंद्रीकृत बनाम वितरित चित्रण के लिए कुछ आरेख बनाए।
केन्द्रीकृत
सामान्य व्यवहार में वितरित
पूरा बांट दिया
आप चित्र में देखते हैं कि अभी भी एक "केंद्रीकृत भंडार" है, और यह केंद्रीकृत संस्करण प्रशंसकों के पसंदीदा तर्कों में से एक है: "आप अभी भी केंद्रीकृत हो रहे हैं", और नहीं, आप नहीं हैं, क्योंकि "केंद्रीकृत" भंडार सिर्फ भंडार है सभी सहमत हैं (उदाहरण के लिए एक आधिकारिक गीथूब रेपो), लेकिन यह किसी भी समय आपकी आवश्यकता के अनुसार बदल सकता है।
अब, यह ओपन-सोर्स प्रोजेक्ट्स के लिए विशिष्ट वर्कफ़्लो है (उदाहरण के लिए DVCS का उपयोग करके बड़े पैमाने पर सहयोग वाला प्रोजेक्ट):
Bitbucket.org कुछ हद तक मर्क्यूरियल के बराबर है, यह जान लें कि उनके पास असीमित स्थान के साथ असीमित निजी रिपॉजिटरी हैं, यदि आपकी टीम पांच से छोटी है तो आप इसे मुफ्त में उपयोग कर सकते हैं।
सबसे अच्छा तरीका है कि आप अपने आप को एक डीवीसीएस का उपयोग करने के लिए मना सकते हैं, एक डीवीसीएस की कोशिश कर रहे हैं, हर अनुभवी डीवीसीएस डेवलपर जिसने svn / cv का उपयोग किया है, आपको बताएगा कि यह इसके लायक है और वे नहीं जानते कि वे इसके बिना अपना सारा समय कैसे बचाते हैं।
संपादित करें : आपके दूसरे संपादन का उत्तर देने के लिए मैं सिर्फ यह दोहरा सकता हूं कि DVCS के साथ आपके पास एक अलग वर्कफ़्लो है, मैं आपको सलाह दूंगा कि सर्वोत्तम प्रथाओं के कारण इसे नहीं आज़माने के कारणों की तलाश करें , ऐसा लगता है जब लोग तर्क देते हैं कि OOP नहीं है आवश्यक है क्योंकि वे जटिल डिजाइन पैटर्न के साथ प्राप्त कर सकते हैं जो वे हमेशा प्रतिमान XYZ के साथ करते हैं; आप किसी भी तरह से लाभ उठा सकते हैं।
इसे आज़माएँ, आप देखेंगे कि "प्राइवेट ब्रांच" में काम करना वास्तव में एक बेहतर विकल्प है। एक कारण मैं इस बारे में बता सकता हूं कि अंतिम सत्य क्यों है क्योंकि आप प्रतिबद्ध होने के डर को खो देते हैं , जिससे आप किसी भी समय आपको फिट होने और अधिक प्राकृतिक तरीके से काम करने की अनुमति दे सकते हैं।
"विलय नरक" के बारे में, आप कहते हैं "जब तक हम प्रयोग नहीं कर रहे हैं", मैं कहता हूं "भले ही आप प्रयोग कर रहे हों + एक ही समय में v2.0 पुर्नोत्थान में काम कर रहे हैं "। जैसा कि मैं पहले कह रहा था, नरक का विलय नहीं होता, क्योंकि:
- हर बार जब आप प्रतिबद्ध होते हैं तो आप एक अनाम शाखा उत्पन्न करते हैं, और हर बार आपके परिवर्तन अन्य व्यक्तियों के परिवर्तनों से मिलते हैं, एक प्राकृतिक मर्ज होता है।
- क्योंकि DVCS प्रत्येक कमिट के लिए अधिक मेटाडेटा एकत्र करते हैं, विलय के दौरान कम संघर्ष होते हैं ... इसलिए आप इसे "बुद्धिमान मर्ज" भी कह सकते हैं।
- जब आप मर्ज संघर्ष में टकराते हैं, तो यह वह है जो आप उपयोग कर सकते हैं:
इसके अलावा, परियोजना का आकार मायने नहीं रखता है, जब मैं तोड़फोड़ से बदल गया था मैं वास्तव में पहले से ही लाभ देख रहा था जबकि अकेले काम कर रहा था, सब कुछ बस सही लगा। Changesets (वास्तव में नहीं एक संशोधन है, लेकिन आप एक प्रतिबद्ध शामिल विशिष्ट फ़ाइलों के लिए परिवर्तन, codebase के राज्य से अलग का एक विशिष्ट सेट), तो आप कल्पना कर आप फ़ाइलों की एक विशिष्ट समूह के लिए क्या कर रहे थे द्वारा वास्तव में क्या मतलब है चलो पूरे कोडबेस नहीं।
परिवर्तन कैसे काम करता है और प्रदर्शन को बढ़ावा देता है। मैं इसे एक उदाहरण से स्पष्ट करना चाहूंगा जो मैं देना चाहता हूं: svn से mootools प्रोजेक्ट स्विच उनके github नेटवर्क ग्राफ में सचित्र ।
इससे पहले
उपरांत
आप जो देख रहे हैं, डेवलपर्स को शुरू करते समय अपने स्वयं के काम पर ध्यान केंद्रित करने में सक्षम होना चाहिए, दूसरों के कोड को तोड़ने के डर के बिना, वे धक्का देने / खींचने के बाद दूसरों के कोड को तोड़ने के बारे में चिंता करते हैं (डीवीसीएस: पहले प्रतिबद्ध, फिर धक्का / खींच, फिर अपडेट करें ) लेकिन चूंकि विलय यहां अधिक होशियार है, वे अक्सर ऐसा नहीं करते हैं ... यहां तक कि जब कोई मर्ज संघर्ष होता है (जो कि दुर्लभ है), तो आप केवल 5 मिनट या उससे कम समय बिताते हैं।
मेरी आपसे सिफारिश है कि आप किसी ऐसे व्यक्ति की तलाश करें, जो यह जानता हो कि किस तरह से मर्क्यूरियल / गिट का उपयोग करना है और उसे अपने हाथों से समझाने के लिए उसे बताना है। कमांड लाइन में कुछ दोस्तों के साथ लगभग आधे घंटे का समय बिताते हुए, हमारे डेस्कटॉप और बिटकॉइन खातों के साथ मर्क्यूरियल का उपयोग करते हुए उन्हें मर्ज करने का तरीका दिखाया गया, यहां तक कि उनके लिए संघर्षों को गढ़ते हुए यह देखने के लिए कि कैसे एक हास्यास्पद समय में ठीक करने के लिए, मैं दिखाने में सक्षम था उन्हें एक DVCS की असली शक्ति।
अंत में, मैं आपको git + github के बजाय mercurial + bitbucket का उपयोग करने की सलाह दूंगा यदि आप windows लोगों के साथ काम करते हैं। मर्क्यूरियल भी एक सरल और अधिक सरल है, लेकिन अधिक जटिल रिपॉजिटरी प्रबंधन (जैसे गिट रीबेस ) के लिए git अधिक शक्तिशाली है ।
कुछ अतिरिक्त अनुशंसित रीडिंग: