मैं कैसे ठीक से कमिट का प्रबंधन कर सकता हूं, फीचर के टकराव को रोक सकता हूं और VCS के साथ निर्भरता का प्रबंधन कर सकता हूं?


9

यह बड़ी टीमों के साथ काम करने का एक कष्टप्रद कारक बन गया है: आप चेकइन का प्रबंधन कैसे करते हैं और फीचर संघर्षों को रोकते हैं और स्रोत नियंत्रण के साथ निर्भरता को ठीक से प्रबंधित करते हैं?

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

मैं वास्तव में अन्य लोगों के अनुभव और शायद स्रोत नियंत्रण के प्रबंधन के लिए कुछ सर्वोत्तम प्रथाओं को सुनना चाहूंगा।



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

1
कृपया "एकाधिक चेकइन" और "ट्रंक का उल्लंघन करें" से आपका क्या मतलब है, इस पर अधिक जानकारी दें। मुझे वास्तव में उम्मीद है कि मेरे प्रत्येक इंजीनियर एक से अधिक चेकइन कर रहे हैं जबकि मेरी टीम के सदस्य हैं।
मैनफ्रेड

स्रोत नियंत्रण शाखा रणनीति एक बड़ा विषय है। programmers.stackexchange.com/questions/107884/…
gnat

@ जॉन - मुझे लगता है कि "का उल्लंघन" "अस्थिर" के लिए एक टाइपो था
ChrisF

जवाबों:


7

TFS? पहाड़ियों के लिए भागो! जितनी जल्दी हो सके दूर हटो। यह बहुत सी अलग-अलग चीजें करता है लेकिन उनमें से कोई भी उतना अच्छा नहीं है जो उपलब्ध सर्वोत्तम नस्ल के उपकरण हैं।

परन्तु गंभीरता से:

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

कुछ समय पहले तक हमने नए विकास ('ट्रंक') के लिए एक ही शाखा का उपयोग किया था। एक रिलीज के लिए हम ट्रंक से एक शाखा बनाएंगे। अंतिम क्यूए उस शाखा में किया जाएगा और एक बार पूरा होने के बाद हम जारी करेंगे (हम मासिक रिलीज पर हैं)।

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

महाकाव्य शाखाओं के साथ हमने अनुसूची के जोखिम को काफी हद तक कम कर दिया है क्योंकि अब हम ट्रंक से बाहर निकलने की स्थिति में हैं और इसमें सभी महाकाव्य शामिल हैं जिन्हें सफलतापूर्वक ट्रंक में मिला दिया गया था। महाकाव्य जो पूरी तरह से याद नहीं हैं बस और अगली रिलीज (अगले महीने) करेंगे।

यह पाठ्यक्रम केवल हमारे वातावरण में काम कर सकता है। बहुत संभावना है कि आपके पास हमारे से अलग कारक होंगे जो शाखा प्रबंधन के लिए सबसे अच्छे विकल्प हैं।

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

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


2
"टीएफएस! पहाड़ियों के लिए भागो!" - मैं एक दूसरा खाता बनाने के लिए लुभा रहा हूं ताकि मैं इसे दो बार बढ़ा दूं।
एंट

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

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

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

4

मैं प्रति सुविधा के लिए एक शाखा की वकालत करता हूं क्योंकि यह निर्णय लेने पर कि कौन सी सुविधाओं को जहाज के लिए और कौन से टालने के लिए महान लचीलापन देता है।

आपकी स्थिति में कितनी अच्छी तरह काम करता है यह इस बात पर निर्भर करता है कि आपकी वीसीएस शाखाओं को कितनी अच्छी तरह से संभालती है और अधिक महत्वपूर्ण रूप से विलय कर रही है। DVCS जैसे Git और Mercurial इसे अपेक्षाकृत तुच्छ अभ्यास बनाते हैं। एसवीएन कम। मैं टीएफएस से बचने में कामयाब रहा हूं, हालांकि मैंने इसके बारे में बहुत कुछ पढ़ा है, ज्यादातर मैं डरता हूं। यदि आप TFS के साथ फंस गए हैं तो प्रति शाखा एक विशेषता के आधार पर एक छोटा पायलट जारी करें और देखें कि विलय आपके लिए कितना अच्छा है।


2

सबसे पहले, एक अस्वीकरण। यह कहना मुश्किल है कि आपके स्रोत को प्रबंधित करने का सबसे अच्छा तरीका क्या है, क्योंकि हम यह नहीं जानते हैं कि आपकी टीम या टीमें एक दिन के आधार पर कैसे काम करती हैं।

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

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


2
मैं ट्रंक पर काम करने पर पूरी तरह से असहमत हूं। अगर ट्रंक टूट गया तो हर कोई प्रभावित होगा। मैं एक प्रमुख रिलीज के बाद शाखाकरण पर भी असहमत हूं, क्या होगा अगर एक बग दो या दो से अधिक रिलीज को प्रभावित करता है, तो आप इसे हर शाखा में ठीक करते हैं?
त्रासपलाजियो गार्जुग्लियो

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

1

मैंने कभी भी टीएफएस 2008/2010 का उपयोग नहीं किया है, लेकिन मैंने विभिन्न मंचों में जो पढ़ा है, उससे संस्करण नियंत्रण के लिए टीएफएस का उपयोग करने के बारे में बहुत नकारात्मकता है। इसने मुझे TFS से अब तक स्पष्ट रहने दिया है।

मैं वर्तमान में SVN और Git का उपयोग कर रहा हूं, मैं उन दोनों को छोटी टीमों या सिंगल मैन टीम के लिए अच्छा मानता हूं लेकिन व्यक्तिगत रूप से एक बड़ी टीम के लिए SVN की सिफारिश नहीं करेगा।

मैं के लिए PlasticSCM पर मेरी आँखें है और निकट भविष्य में करने की कोशिश करेंगे।

यदि आपके विशेषाधिकारों ने मुझे अनुमति दी है तो मैं आपके विशिष्ट प्रश्न का उत्तर नहीं देने के लिए माफी माँगता हूँ।


1

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

मुझे लगता है कि मैं इसे अब हर समय घर पर उपयोग करता हूं, बस दस्तावेजों पर नज़र रखने और उन्हें कंप्यूटर के बीच सिंक करने के लिए, क्योंकि इसकी कमिटिंग और फ़ाइल सर्वर पर पुश करने की तुलना में इसे सर्वर पर वापस करने या इसे बचाने के लिए है।

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


1
Git वास्तव में अच्छा है, लेकिन (हर चीज की तरह) यह हर किसी और हर चीज के लिए सबसे अच्छा समाधान नहीं है। programmers.stackexchange.com/questions/111633/...
रूक

4
किस तरह से Git मर्क्यूरियल को अप्रचलित बनाता है? विशेष रूप से विंडोज डेवलपमेंट के माहौल में। यह कहना बेहतर होगा कि DVCS अन्य VCS को पेट्रोल बम को चकमा देने और पवित्र युद्ध शुरू करने के बजाय अप्रचलित बनाता है।
mcottle

@mcottle - मैं इतनी दूर भी नहीं जाऊँगा। उदाहरण के लिए एसवीएन गुणवत्ता वाले गैर-वितरित वीसीएस का एक अच्छा उदाहरण है। हम कह सकते हैं कि एसवीएन सीवीएस को अप्रचलित बनाता है, लेकिन मैं वहां रुकूंगा। गिट किसी भी तरह से एसवीएन को अप्रचलित नहीं बनाता है - यह पूरी तरह से अलग दृष्टिकोण है जो कुछ के लिए अच्छा है, लेकिन कुछ अन्य तरीकों के लिए बुरा है (ऊपर दिए गए लिंक को देखें)। उदाहरण के लिए, जीआईटी और एचजी दोनों बाइनरी फाइलों के साथ अपेक्षाकृत "चूसना"।
रूक

@ldigas: एसआईएन की तुलना में द्विआधारी फाइलों के साथ जीआईटी और एचजी "चूसना" किस तरह से बदतर है? सभी संबंधित परिणामों के साथ, न तो बायनेरीज़ में परिवर्तन प्रति फ़ाइल दानेदारता से परे ट्रैक कर सकते हैं। इसके अलावा, वे दोनों svn को ज्यादातर अप्रचलित बनाते हैं, यह देखते हुए कि या तो svn क्या करता है (कुछ अस्पष्ट विशेषताओं के अलावा), और फिर कुछ; आपको बस इसे इस तरह सेट करना है। Svn का उपयोग करने का सबसे अच्छा कारण जो मैं सोच सकता हूं, वह यह है कि आप पहले से ही इसका उपयोग कर रहे हैं और पलायन बहुत दर्दनाक / जोखिम भरा / महंगा होगा।
tdammers

@ दोस्त - मुझे ट्रोलिंग चर्चा में कोई दिलचस्पी नहीं है। ऊपर किसी भी बिंदु के लिए, Google थोड़ा सा और आप बहुत जल्दी कुछ ठोकर खाएंगे।
रूक

1

कुछ अच्छे अभ्यास जिनका हम वास्तव में पालन करते हैं और हमारी बहुत मदद करते हैं:

1) सुनिश्चित करें कि आपके पास अपने स्थानीय में फ़ाइल की एक लिखने योग्य प्रतिलिपि नहीं है और आप हमेशा संपादित करने के लिए जांचते हैं। (यदि कभी-कभी आपको स्थानीय काम करना पड़ता है, तो ईओडी से पहले इसे स्रोत नियंत्रण में विलय करने का प्रयास करें। "

2) किसी भी छोटे महत्वपूर्ण मील के पत्थर के बाद, समय-समय पर अपनी फ़ाइलों को लेबल करें।

3) अच्छे चेकआउट या चेकइन कमेंट दें। जब आप समीक्षा करते हैं तो यह मदद करेगा, कभी-कभी आपको संस्करणों के बीच खुलने और तुलना करने की आवश्यकता नहीं होती है।


1

आप चेकइन कैसे प्रबंधित करते हैं और फ़ीचर संघर्षों को रोकते हैं और स्रोत नियंत्रण के साथ निर्भरता को ठीक से प्रबंधित करते हैं?

यह मेरे POV से, दो-कारक कार्य है: आपको इसे तकनीकी (अच्छा और आसान और बुलेट-प्रूफ ब्रांचिंग। मर्जिंग ऑडिट आदि) और प्रबंधन (अच्छी तरह से स्थापित नीति "क्या" जब "कैसे") पक्षों से करना है। एएलएम में जुदाई कोड के दो या तीन स्तरों: "स्थिर" (उत्तीर्ण इकाई परीक्षण), "अस्थिर" (हर शामिल सुविधा समाप्त) की तरह कुछ, लेकिन उत्पाद के रूप में एप्लिकेशन के बाद एकीकरण प्रश्न हैं / हाँ, ऐसा हो सकता है / और " कार्य प्रगति पर है"। इस तरह से उचित प्रोजेक्ट मैनेजर अलग-अलग डेवलपर के काम के हस्तक्षेप को कम कर सकता है।

TFS (जो मैंने उपयोग नहीं किया, उपयोग और उपयोग नहीं करेगा) में कुछ, AFAIK, मौलिक नियंत्रण प्रबंधन के पहलू में मूलभूत समस्याएं हैं। मैं जेम्स मैकके के कुछ ग्रंथों के लिए यहां लिंक देता हूं:


1

वास्तव में अच्छा और हालिया लेख जो स्पष्ट और संक्षिप्त रूप से स्रोत नियंत्रण के साथ काम करने के कुछ अलग तरीकों की तुलना और विरोधाभास करता है: स्रोत नियंत्रण टोन अधिकार

मुझे नहीं लगता कि स्रोत नियंत्रण का उपयोग करने के लिए कोई एक रणनीति / सर्वोत्तम अभ्यास है। परिपक्व टीमें जो लंबे समय से एक साथ काम कर रही हैं, इस क्षेत्र में "दर्द" बहुत कम है, भले ही वे लोकप्रिय "सर्वोत्तम प्रथाओं" का पालन नहीं कर रहे हों।

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

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