दिलचस्प पोस्ट
इकाई फ़्रेमवर्क – गुणों के कई स्तर शामिल करें आरजीबी रंग की चमक निर्धारित करने के लिए फॉर्मूला Python dict को kwargs परिवर्तित? http बुनियादी प्रमाणीकरण "लॉग आउट" VBA.NET के समान तरीके से VBA में कक्षा ऑब्जेक्ट मॉड्यूल के बीच तुलना विधियों का उपयोग कैसे करें? आप एक ऐसी फ़ाइल कैसे पढ़ते हैं जो उपयोग में है? Apache HttpClient 4.0 में SSL प्रमाणपत्र त्रुटियों को कैसे अनदेखा करें Matplotlib (हिस्टोग्राम) में बिन आकार दो लांचर गतिविधियां ScrollView के अंदर ViewPager correclty को स्क्रॉल नहीं करता Struts2 INPUT परिणाम: यह कैसे काम करता है? रूपांतरण / सत्यापन त्रुटियों को कैसे नियंत्रित किया जाता है? अलग ढाल के साथ स्विंग बटन को फिर से रंगना वर्तमान पृष्ठ को प्रोग्रामेटिक रूप से प्राप्त करें RecyclerView के लिए बर्खास्त करने के लिए स्वाइप करें जावास्क्रिप्ट अरै जानकारी को सीएसवी (क्लाइंट साइड पर) कैसे निर्यात करें?

वितरित संस्करण नियंत्रण प्रणाली और एंटरप्राइज़ – एक अच्छा मिश्रण?

मैं देख सकता हूँ कि स्रोत नियंत्रण प्रणालियों को क्यों वितरित किया जाता है (डीवीसीएस – मर्क्यूरिअल जैसे) ओपन सोर्स परियोजनाओं के लिए समझ में आता है I

लेकिन क्या वे एक उद्यम के लिए समझदारी बनाते हैं? (एक केंद्रीकृत स्रोत नियंत्रण प्रणाली से अधिक जैसे टीएफएस)

कई डेवलपर्स वाले उद्यम के लिए डीवीसीएस की कौन से विशेषताएँ बेहतर या खराब बनाती हैं? (एक केंद्रीकृत प्रणाली पर)

वेब के समाधान से एकत्रित समाधान "वितरित संस्करण नियंत्रण प्रणाली और एंटरप्राइज़ – एक अच्छा मिश्रण?"

मैंने अभी एक बड़ी बैंकिंग कंपनी में एक डीवीसीएस (इस मामले में गिट) शुरू की है, जहां परफोर्स, एसवीएन या क्लियरकेज़ विकल्प के केंद्रीकृत वीसीएसी थे:
मुझे पहले से ही चुनौतियों के बारे में पता था (मेरा पिछले जवाब देखें " क्या हम अंततः कॉर्पोरेट सॉफ्टवेयर में डीवीसी में जा सकते हैं? क्या एसवीएन अभी भी 'विकास के लिए' होना चाहिए? )

मुझे तीन मोर्चों पर चुनौती दी गई है:

  • केंद्रीकरण : जबकि विकेन्द्रीकृत मॉडल की अपनी योग्यता है (और निजी कमाई या पूर्ण इतिहास तक पहुंच के दौरान नेटवर्क के बिना काम करने की अनुमति देता है), फिर भी सभी डेवलपर्स के लिए मुख्य संदर्भ के रूप में अभिनय करने के लिए केंद्रीयकृत रेपो का एक स्पष्ट सेट होना चाहिए।

  • प्रमाणीकरण : एक DVCS आपको "साइन-ऑफ" (प्रतिबद्ध) को अपना कोड देता है … बहुत ज्यादा किसी को (लेखक " foo ", ईमेल " foo@bar.com ")
    आप एक git config user.name foo कर सकते हैं, या git config user.name whateverNameIFeelToHave , और इसमें आपके फर्जी नाम के साथ सबकुछ किया है
    यह बड़े केंद्रों द्वारा उपयोग किए जाने वाले अद्वितीय केंद्रीकृत "सक्रिय निर्देशिका" उपयोगकर्ता संदर्भ में अच्छी तरह से मेल नहीं खाता।

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

उत्तर (एक गिट सेटअप के लिए) था:

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

  • प्रमाणीकरण : केवल दो प्रोटोकॉल उपयोगकर्ताओं को मुख्य रेपो तक पहुंचने की अनुमति देते हैं:
    • एसएसआई आधारित, सार्वजनिक / निजी कुंजी के साथ:
      • संगठन के बाहरी प्रयोक्ताओं के लिए उपयोगी (जैसे किनारे के विकास)
      • और जेनेरिक खातों के लिए उपयोगी है जो कि सक्रिय डायरेक्टरी मैनेजर को नहीं बनाना चाहते हैं (क्योंकि यह एक "अनाम" खाता होगा): एक असली व्यक्ति को उस सामान्य खाते के लिए ज़िम्मेदार होना चाहिए, और वह निजी कुंजी का मालिक होगा
    • एपाचे के साथ, एक एलडीएपी सेटिंग के माध्यम से उपयोगकर्ताओं को प्रमाणीकरण के साथ https- आधारित, इस प्रकार, एक वास्तविक लॉगिन उन रिपो पर किसी भी जीआईटी ऑपरेशन के लिए प्रदान किया जाना चाहिए।
      गीट इसे अपने स्मार्ट एचटीटीपी प्रोटोकॉल के साथ प्रदान करता है, जो कि केवल http के माध्यम से (रीड) pull अनुमति नहीं देता है, बल्कि http के माध्यम से भी लिखें (लिखें)।

प्रमाणीकरण के हिस्से को गिट स्तर पर post-receive हुक द्वारा भी मजबूत किया जाता है जो सुनिश्चित करता है कि कम से कम एक कमोडिटी में आप रेपो के लिए दबाव डाल रहे हैं, जिसका नाम "कम्यूटेटर नाम" है, वह यूआरएल के नाम के बराबर होता है।
दूसरे शब्द में, आपको अपने git config user.name सही ढंग से सेटअप करने की जरूरत है, या किसी केंद्रीय ध्रुव को आप जो भी करना चाहते हैं, उसे खारिज कर दिया जाएगा।

  • प्राधिकरण : दोनों पिछली सेटिंग्स (एसएसएच या https) पैरामीटर के रूप में, गिटोलाइट नामित, पर्ल स्क्रिप्ट का एक ही सेट कॉल करने के लिए वायर्ड हैं:
    • उन दो प्रोटोकॉल द्वारा वास्तविक उपयोगकर्ता नाम का पता लगाया गया
    • git कमांड (क्लोन, पुश या पुल) जो उपयोगकर्ता करना चाहता है

गिटोलाइट पर्ल स्क्रिप्ट एक साधारण टेक्स्ट फाइल को पार्स करेगा जहां प्राधिकरण (सभी रिपॉजिटरी के लिए पढ़ने / लिखने की एक्सेस, या दी गई रिपॉजिटरी में शाखाओं के लिए, या किसी रिपॉजिटरी में निर्देशिका के लिए भी) सेट किया गया है।
अगर git कमांड द्वारा आवश्यक अभिगम स्तर उस फाइल में परिभाषित एसीएल से मेल नहीं खाता है, तो आदेश अस्वीकार कर दिया गया है।


ऊपर बताता है कि मुझे एक गीट सेटिंग के लिए कार्यान्वित करने के लिए क्या जरूरी है, लेकिन इससे भी महत्वपूर्ण बात यह है कि यह एक प्रमुख यूजर बेस के साथ एक बड़े निगम में समझ बनाने के लिए डीवीसीएस सेटिंग के लिए मुख्य मुद्दों को सूचीबद्ध करता है।

तब, और उसके बाद, एक DVCS (Git, Mercurial, …) के कारण मूल्य जोड़ सकते हैं:

  • कई साइटों के बीच डेटा विनिमय : जबकि उन उपयोगकर्ताओं को एक ही सक्रिय निर्देशिका के माध्यम से प्रमाणीकृत किया जाता है, वे दुनिया भर में स्थित हो सकते हैं (जिन कंपनियों मैंने काम किया है वे आमतौर पर दो या तीन देशों में टीमों के बीच विकास के लिए हैं) एक डिवीसीएस स्वाभाविक रूप से उन डिस्ट्रीब्यूटेड टीमों के बीच कुशलतापूर्वक डाटा का आदान-प्रदान करने के लिए बनाया जाता है।

  • वातावरण में प्रतिलिपि : प्रमाणीकरण / प्राधिकरण की देखभाल करने वाली एक सेटिंग अन्य समर्पित सर्वरों पर उन रिपॉजिटरी क्लोन करने की अनुमति देती है (एकीकरण परीक्षण, यूएटी परीक्षण, प्री-प्रोडक्शन और प्री-परिनियोजन प्रयोजनों के लिए)

  • प्रक्रिया स्वचालन : जिस तरह से आप एक रेपो क्लोन कर सकते हैं, वह भी एक उपयोगकर्ता के कार्य केंद्र पर स्थानीय रूप से "संरक्षित कमिट" तकनीकों और अन्य चालाक उपयोगों के साथ यूनिट परीक्षण के प्रयोजनों के लिए इस्तेमाल किया जा सकता है: देखें " स्रोत संग्रह का स्पष्ट उपयोग क्या है आपने कभी देखा है? "
    संक्षेप में, आप निम्न के एक दूसरे स्थानीय रेपो में धक्का दे सकते हैं:

    • विभिन्न कार्यों (कोड का यूनिट परीक्षण या स्थिर विश्लेषण)
    • मुख्य रिपो पर वापस धकेल रहे हैं यदि ये कार्य सफल होते हैं
    • जबकि आप उन कार्यों के परिणाम के लिए इंतजार किए बिना पहले रेपो में भी काम कर रहे हैं।

  • हत्यार की विशेषताएं : कोई भी डीवीसीएस उन लोगों के साथ आता है, मुख्य एक विलय कर रहा है (कभी एसवीएन के साथ एक जटिल मर्ज वर्कफ़्लो करने की कोशिश की? या स्लूओवॉली से 6000 फाइलों को क्लियर सीज़ के साथ मिलाएं?)।
    अकेले ही (मर्जिंग) का मतलब है कि आप वास्तव में शाखाओं का लाभ उठा सकते हैं, जबकि आप सभी को विकास के किसी अन्य "मुख्य" लाइन पर वापस मर्ज करने में सक्षम बनाते हैं, क्योंकि आप ऐसा करेंगे:
    • स्थानीय रूप से पहले अपने स्वयं के रेपो में, किसी को परेशान किए बिना
    • तो रिमोट सर्वर पर, केंद्रीय रेपो पर मर्ज होने के परिणाम को धक्का दे रहा है।

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

डीएससीएस के पास ऑफलाइन या धीमी नेटवर्क के लिए केंद्रीकृत सिस्टम की तुलना में बेहतर कहानी है (आमतौर पर) वे तेजी से होते हैं, जो वाकई डेवलपर्स (टीडीडी का उपयोग कर) के लिए वास्तव में ध्यान देने योग्य है जो बहुत सारे चेक-इन करते हैं।

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

अनन्य तालों के लिए समर्थन के लिए एक केंद्रीय भंडार रखने का मतलब समझ में आता है, यदि आप उन फाइलों से निपटते हैं जो डिजिटल एसेट्स और गैर-पाठ दस्तावेज़ (पीडीएफ और वर्ड आदि) जैसे मर्जर नहीं हैं, क्योंकि यह आपको अपने आप को गड़बड़ी में लेता है और मैन्युअल रूप से मर्ज करता है।

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

संक्षेप में विचार करने के लिए कुछ तकनीकी पहलुओं पर आपको अपनी टीम की परिपक्वता और एससीसीएस के आसपास की उनकी वर्तमान प्रक्रिया के बारे में सोचना चाहिए।

कम से कम टीएफटी 2013 के साथ आप स्थानीय वर्कस्पेस के साथ डिस्कनेक्ट काम करने की क्षमता रखते हैं। वितरित बनाम केंद्रीकृत को व्यापार द्वारा परिभाषित किया गया है और विकास के तहत परियोजनाओं की आवश्यकताओं और आवश्यकताओं पर निर्भर करता है।

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

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

आवेदन जीवनचक्र प्रबंधन की प्रक्रिया का एक अवलोकन यहां पाया जा सकता है।

http://msdn.microsoft.com/en-us/library/vstudio/fda2bad5(v=vs.110).aspx

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

बॉक्स में से, GIT कोई अनुमति नहीं प्रदान करता है – आपको अपनी खुद की लिखने के लिए हुक मिल गए हैं

लोकप्रिय रेपो प्रबंधक जीथूब एंटरप्राइज, गित्लैब, बिट्टबकेट की अधिकांश शाखा आधारित लेखन प्रतिबंध प्रदान करते हैं। गिटोलाइट को महीन दानेदार होने की अनुमति मिलती है, मार्ग प्रदान करने (और अधिक) आधारित लिखने के प्रतिबंध।

एकमात्र रेपो प्रबंधक मैंने पढ़ा पहुंच को समर्थन देने के बारे में सुना है Perforce Helix, जो कि जीटी प्रोटोकॉल को प्रतिबल बैकएंड के शीर्ष पर दोबारा करता है, लेकिन इसके साथ मेरे पास कोई हाथ नहीं अनुभव है यह आशाजनक है, लेकिन मुझे चिन्तित होगा कि यह "सादा" गिट के साथ कैसे संगत है।

मेरे लिए सबसे बड़ी बात यह है कि वे स्पीड हैं वे केंद्रीकृत स्रोत नियंत्रण की तुलना में सबसे सामान्य परिचालन के लिए तीव्रता के आदेश हैं।

डिस्कनेक्ट काम भी एक बहुत बड़ा प्लस है

बिल्कुल एक वितरित स्रोत मॉडल एक उद्यम में समझ सकता है, लेकिन यह आपकी टीमों की संरचना पर निर्भर करता है।

वितरित स्रोत नियंत्रण आपको अपने स्वयं के वर्कफ़्लो बनाने की लचीलापन देता है

कल्पना कीजिए, यदि आप करेंगे, तो एक बड़ी टीम, जिसके भीतर छोटी टीम अलग-अलग फीचर शाखाओं पर काम कर रही है।

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

ये एक ऐसी चीजें हैं जो आप एक पारंपरिक केंद्रीकृत सर्वर के साथ हासिल कर सकते हैं , लेकिन जैसा कि @ब्रुक बताते हैं, केंद्रीकृत मॉडल को स्केल करना है, जबकि वितरित मॉडल पहले से ही ढंक दिया गया है, इसलिए कोई भी (या कम से कम, कम) किसी भी सर्वर को खड़ी नहीं करनी चाहिए

हमारी टीम मर्क्यूरिअल पर स्विच करने से पहले लगभग 3 वर्षों के लिए टीएफएस का इस्तेमाल करती थी। एचजी की शाखा / मर्ज समर्थन टीएफएस से बहुत बेहतर है। इसका कारण यह है कि एक DVCS दर्द रहित विलय पर निर्भर करता है।

दूरस्थ / डिस्कनेक्ट किए गए स्थानों में बेहतर सिंक्रनाइज़ेशन