svn मुझे वितरित संशोधन नियंत्रण बेचें




cvs dvcs (8)

मेरे जैसे डीवीसीएस बहुत दिलचस्प है:

  • स्रोत नियंत्रण प्रक्रिया में एक नया आयाम जोड़ता है: प्रकाशन
    आपके पास एक मर्ज वर्कफ़्लो नहीं है , आपके पास एक प्रकाशन वर्कफ़्लो भी है (जिस पर आप रिपोजिटरी को धक्का देंगे / खींचेंगे), और इसमें कई निहितार्थ हो सकते हैं:

    • विकास जीवन चक्र (केवल एक निश्चित प्रकार के काम के लिए भंडारित किया गया है, जैसे कि तैनाती के उद्देश्यों के लिए, नीलामी के उद्देश्यों के लिए)
    • एकल कार्य (आप बैकअप रेपो को धक्का और अद्यतन कर सकते हैं, यहां तक ​​कि केवल एक फ़ाइल के रूप में )
    • इंटर-निर्भरता प्रोजेक्ट (जब प्रोजेक्ट ए की एक टीम टीम पोरजेक्ट बी के लिए इंतजार कर रही है, अंत में केंद्रीय रिपो को प्रतिबद्ध करने के लिए, यह बी से पूछताछ कर सकती है कि मेल में एक संलग्न ज़िप फ़ाइल के रूप में एक मध्यवर्ती विकास को "पास" करें। अब, सब ए को करना है कि एक संभावित रिमोट के रूप में बी रेपो जोड़ें, इसे लाएं और एक चोटी लें)
  • संशोधन के साथ संशोधन / उपभोग करने का एक नया तरीका लाता है:

    • नए संशोधन का एक निष्क्रिय तरीका (केवल वह जो आपके रेपो से सक्रिय रूप से खींच रहा है, उन्हें उनकी शाखाओं में देखेगा)
    • दूसरों से संशोधन का उपभोग करने का एक सक्रिय तरीका (रिमोट के रूप में अपने रेपो को जोड़कर और उनसे विलय / विलय करना जो आपको चाहिए)।

इसका मतलब है कि आप अपने काम को केंद्रीय रिपो को वितरित करने पर निर्भर नहीं हैं, लेकिन आप विभिन्न अभिनेताओं और उनके प्रतिनिधि के साथ अधिक प्रत्यक्ष संबंध रख सकते हैं।

मैं आसपास के तैरने वाले समान विषयों के 1000s को जानता हूं। मैंने एसओ में यहां 5 धागे को पढ़ा लेकिन मैं अभी भी डीवीसीएस के बारे में क्यों आश्वस्त नहीं हूं?

मेरे पास केवल निम्नलिखित प्रश्न हैं (ध्यान दें कि मैं केवल जावा परियोजनाओं के बारे में चिंतित हूं)

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

मुझे पिच करो!


सबसे अधिक संभावना है, कोई भी आपको यहां कुछ भी बेच नहीं देगा। यदि आपको गिट की विशेषताओं की आवश्यकता है, तो बस git init । अगर यह आपके लिए फिट नहीं है, तो बस मत करो।

यदि आप अभी तक गिट फीचर्स नहीं जानते हैं, तो Google खोज में git vs (एंडिंग स्पेस नोट करें) टाइप करें, और स्वतः पूर्ण से परिणाम देखें।

जब तक मुझे नेटबीन्स की ज़रूरत नहीं थी तब तक मैंने आईडीई पर नोटपैड पसंद किया। ऐसा लगता है कि यह वही मामला है।

जैसा कि आप जानते हैं, वीसीएस के बिना कई सफल परियोजनाएं थीं।

पुनश्च। बेचना गिट अपने लाइसेंस का उल्लंघन करता है! ;)


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

एक और हालिया पोस्ट में कहा गया है कि सबवर्जन एक डीवीसीएस बनने की कोशिश नहीं कर रहा है

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


मैं यहाँ कुछ भी बेचने वाला नहीं हूं।

• स्थानीय रूप से काम करने का लाभ या मूल्य क्या है? क्या? वास्तव में? सभी आधुनिक आईडीई आपको अपने परिवर्तनों का ट्रैक रखने की अनुमति देता है? और यदि आवश्यक हो तो आप एक विशेष परिवर्तन को पुनर्स्थापित कर सकते हैं। साथ ही, उनके पास आईडीई स्तर पर आपके परिवर्तन / संस्करणों को लेबल करने की सुविधा है !?

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

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

केंद्रीकृत होने का एक और नकारात्मक पक्ष यह है कि गिट तकनीकी रूप से नाम या प्रतिलिपि संचालन ट्रैक नहीं कर सकता है । यह सिर्फ यह अनुमान लगाने का प्रयास करता है कि फ़ाइल की सामग्री के आधार पर फ़ाइल का नाम बदल दिया गया था या कॉपी किया गया था या नहीं । इसका परिणाम ऐसे मजाकिया मामलों में होता है: प्रतिलिपि फ़ाइल के इतिहास को ध्यान में रखते हुए प्रवासन करने के लिए svn (लड़का पूछ रहा है कि एसवीएन> गिट माइग्रेशन के बाद फ़ाइल का इतिहास क्यों खो गया है)।

• अगर मैं अपनी हार्ड ड्राइव को दुर्घटनाग्रस्त करता हूं तो क्या होगा? मेरा स्थानीय भंडार कहां गया? (तो केंद्रीय रिपो में जांच करने की तुलना में यह कैसे ठंडा है?)

गिट के साथ, यदि आपने अपना स्थानीय स्टोरेज डिवाइस (एचडीडी, एसएसडी, जो कुछ भी) दुर्घटनाग्रस्त हो गया है और इसमें ऐसे परिवर्तन हुए थे जो किसी भी गिट के रेपो को खींचा या धक्का नहीं दिया गया था, तो आप भाग्य से बाहर हैं। आपने अपना समय और अपना कोड खो दिया है। इसके अलावा, आपके स्थानीय गिट रेपो के साथ हार्ड ड्राइव का क्रैश कुछ समय के लिए विकास प्रक्रिया को रोक सकता है: लिनस टोरवाल्ड के एसएसडी ब्रेक, लिनक्स कर्नेल विकास को रोकता है

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

• ओके लिनस टोरवाल्ड्स गिट को अपना जीवन देता है और बाकी सब कुछ नफरत करता है। क्या वह अंधेरे से स्तुति करने के लिए पर्याप्त है? मेरे मध्य आकार के प्रोजेक्ट में ऑफशोर डेवलपर्स की तुलना में लिनस एक अलग दुनिया में रहता है?

लिनक्स कर्नेल जैसी ऐसी परियोजना के लिए जो अतीत में बिटककीपर का इस्तेमाल करती थी, गिट सर्वश्रेष्ठ स्रोत नियंत्रण प्रणाली है! लेकिन मैं कहूंगा कि गिट हर किसी के अनुरूप नहीं है।

बुद्धिमानी से चुनना!


विश्वसनीयता

यदि आपका हार्डडिस्क चुपचाप डेटा दूषित करना शुरू कर देता है, तो आप इसके बारे में जानना चाहते हैं। गिट आपके द्वारा किए गए सब कुछ के SHA1 हैश लेता है। आपके पास एसवीएन के साथ 1 केंद्रीय रेपो है और यदि इसकी बिट्स को एक दोषपूर्ण एचडीडी नियंत्रक द्वारा चुपचाप संशोधित किया जाता है तो आप इसके बारे में तब तक नहीं जान पाएंगे जब तक कि बहुत देर हो चुकी न हो।

और चूंकि आपके पास 1 केंद्रीय रेपो है, इसलिए आपने अपनी केवल जीवन रेखा को उड़ा दिया है

गिट के साथ, हर किसी के पास एक समान रेपो होता है, जो परिवर्तन इतिहास के साथ पूरा होता है, और इसकी सामग्री पूरी तरह से SHA1 की पूरी छवि के कारण पूरी तरह भरोसा किया जा सकता है। तो यदि आप अपने सिर के 20 बाइट SHA1 का बैक अप लेते हैं तो आप निश्चित हो सकते हैं कि जब आप कुछ अविश्वसनीय दर्पण से क्लोन करते हैं, तो आपके पास वही रेपो है जो आप खो गए हैं!

शाखा (और नामस्थान प्रदूषण)

जब आप केंद्रीकृत रेपो का उपयोग करते हैं, तो दुनिया के लिए सभी शाखाएं देखने के लिए होती हैं। आप निजी शाखाएं नहीं बना सकते हैं। आपको कुछ शाखा बनाना है जो पहले से ही किसी अन्य वैश्विक नाम से टकरा नहीं है।

" test123 - अरे, पहले से ही एक test124 । आइए test124 ।"

और हर किसी को इन सभी शाखाओं को बेवकूफ नामों से देखना होगा। आपको कंपनी नीति को झुका देना होगा जो "शाखाओं को तब तक न बनाएं जब तक आपको वास्तव में आवश्यकता न हो", जो कि आपको गिट के साथ बहुत सारी स्वतंत्रताएं रोकती है।

काम करने के साथ ही। जब आप प्रतिबद्ध करते हैं, तो आप वास्तव में सुनिश्चित होंगे कि आपका कोड काम करता है। अन्यथा आप निर्माण तोड़ते हैं। कोई मध्यवर्ती काम नहीं करता है। 'क्योंकि वे सभी केंद्रीय रेपो में जाते हैं।

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

प्रदर्शन

चूंकि आपका रेपो स्थानीय है, इसलिए सभी वीसीएस ऑपरेशंस तेज़ हैं और केंद्रीय सर्वर से राउंड ट्रिप और ट्रांसफर की आवश्यकता नहीं है! परिवर्तन इतिहास खोजने के लिए git log को नेटवर्क पर जाना नहीं है। एसवीएन करता है। अन्य सभी आदेशों के साथ ही, क्योंकि सभी महत्वपूर्ण सामान एक स्थान पर संग्रहीत हैं!

एसवीएन पर इन और अन्य लाभों के लिए लिनस की बात देखें।


यदि आपको स्थानीय इतिहास या स्थानीय निर्माण का मूल्य नहीं दिखाई देता है, तो मुझे यकीन नहीं है कि किसी भी प्रश्न की उत्तर-उत्तर आपके दिमाग को बदलने जा रहा है।

आईडीई की इतिहास विशेषताएं सीमित और बेकार हैं। वे पूर्ण कार्य की तरह कुछ भी नहीं हैं।

इस सामान का उपयोग कैसे किया जाता है इसका एक अच्छा उदाहरण विभिन्न अपाचे परियोजनाओं पर है। मैं Apache svn repo को एक गिट रेपो सिंक कर सकता हूं। फिर मैं एक निजी शाखा में एक हफ्ते तक अपने सभी काम कर सकता हूं। मैं रेपो से परिवर्तन को कम कर सकता हूं। मैं अपने परिवर्तन, खुदरा या थोक पर रिपोर्ट कर सकता हूं। और जब मैं कर रहा हूं, तो मैं उन्हें एक प्रतिबद्धता के रूप में पैकेज कर सकता हूं।


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

यदि आपका आईडीई वास्तव में ऐसा करता है, तो मैं वास्तव में इसे एक वितरित संस्करण नियंत्रण प्रणाली कहूंगा।

अंत में, यदि केंद्रीय भंडार किसी भी कारण से मर जाता है (आपका सेवा प्रदाता दिवालिया हो गया, तो आग लग गई, एक हैकर ने इसे दूषित कर दिया, ...), आपके पास हाल ही में भंडार खींचने वाली प्रत्येक मशीन पर पूर्ण बैकअप है।

संपादित करें: आप एक केंद्रीकृत भंडार की तरह एक डीवीसीएस का उपयोग कर सकते हैं, और मैं कम से कम मध्यम आकार की परियोजनाओं के लिए ऐसा करने की भी सिफारिश करता हूं। एक केंद्रीय "आधिकारिक" भंडार जो हमेशा ऑनलाइन होता है, बहुत सी चीजों को सरल बनाता है। और जब वह मशीन दुर्घटनाग्रस्त हो जाती है, तो आप सर्वर को ठीक होने तक अस्थायी रूप से अन्य मशीनों में से एक पर स्विच कर सकते हैं।


दिलचस्प सवाल

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

मुझे 2-चरणीय प्रतिबद्धता में सक्षम होने से प्यार है। यह मुझे जमता है।

कुछ फायदे जो वसंत को ध्यान में रखते हैं:

  1. बेहतर विलय समर्थन। शाखा-मर्ज DVCS में प्रथम श्रेणी के नागरिक की तरह महसूस करता है, जबकि केंद्रीकृत समाधानों के अपने अनुभव में, मुझे यह दर्दनाक और ट्रिक्सी पाया गया है। मर्ज ट्रैकिंग अब svn में उपलब्ध है, लेकिन यह अभी भी धीमी और बोझिल है।

  2. बड़ी टीमें डीवीसीएस न केवल उपयोगकर्ता के लिए है। मास्टर रिपोजिटरी (या नहीं) में योगदान देने से पहले आप टीमों के बीच प्रतिबद्धता खींच सकते हैं और खींच सकते हैं। सहयोग के कुछ स्वादों के लिए यह अमूल्य है।

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

ध्यान दें कि मेरा डीवीसीएस अनुभव गिट के मुकाबले Mercurial के साथ अधिक है। एक सीवीएस / एसवीएन पृष्ठभूमि से आ रहा है, मुझे Mercurial (एचजी) के साथ सीखने की वक्र बहुत आसान पाया है। Mercurial के लिए हाल ही में जोड़ा गया Google Code समर्थन भी वरदान है। ... मैं कहूंगा कि गिट के लिए मेरी प्रारंभिक प्रतिक्रिया ऋणात्मक थी, लेकिन डीवीसीएस के साथ कुछ भी करने की तुलना में उपयोगिता परिप्रेक्ष्य से अधिक





centralized