केंद्रीकृत संस्करण नियंत्रण में, क्या अक्सर अद्यतन करना हमेशा अच्छा होता है?


9

ऐसा मानते हुए:

  • आपकी टीम केंद्रीकृत संस्करण नियंत्रण का उपयोग कर रही है।
  • आप एक बड़ी सुविधा पर काम कर रहे हैं जिसे पूरा होने में कई दिन लगेंगे, और आप इससे पहले प्रतिबद्ध नहीं हो पाएंगे क्योंकि यह निर्माण को तोड़ देगा।
  • आपकी टीम के सदस्य हर दिन कुछ ऐसा काम करते हैं जो आपके द्वारा काम की जा रही कुछ फाइलों को बदल सकते हैं।

चूंकि यह केंद्रीकृत संस्करण नियंत्रण है, इसलिए आपको कुछ बिंदु पर अपने स्थानीय चेकआउट को अपडेट करना होगा: नई सुविधा करने से पहले कम से कम एक बार।

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

या, आप अक्सर अपडेट कर सकते हैं, और यहां तक ​​कि अगर दिन-ब-दिन हल करने के लिए कुछ संघर्ष हैं, तो यह करना आसान होना चाहिए, थोड़ा कम।

क्या आप हमेशा बने रहेंगे यह अक्सर अद्यतन करने के लिए एक अच्छा विचार है?


16
यदि आप ब्रांच नहीं कर रहे हैं, तो आप संस्करण नियंत्रण प्रणाली के सबसे बड़े लाभों में से एक का लाभ नहीं उठा रहे हैं ।
गहू

क्या आपकी सीवीसी आपकी स्थानीय फाइलों को संशोधित किए बिना संभावित अपडेट संघर्षों का एक सुविधाजनक दृश्य प्रदान करता है? TortoiseSVN में ऐसी कार्यक्षमता है।
rwong


@ वाजिब सवाल यह है कि कितनी बार अपडेट करना है, कमिट नहीं करना है
josos

2
यह प्रश्न विशेष रूप से "अपडेट" करने के लिए कितनी बार है। और यह पहले से ही मान्यताओं का हिस्सा है जो आपके टीम के साथी वास्तव में करते हैं। जो निश्चित रूप से एक अच्छी बात है, लेकिन किसी भी मामले में यहाँ विषय नहीं है।
जानूस

जवाबों:


24

व्यक्तिगत रूप से, मैं अपने स्थानीय संस्करणों को दैनिक रूप से अपडेट करता हूं।

आपके द्वारा वर्णित परिदृश्य में, मैं अतिरिक्त मील तक जाऊंगा

  • नई, लंबी सुविधा के लिए एक शाखा बनाना।
  • इस नई शाखा में अक्सर मेनलाइन से विलय करें।

इस तरफ,

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

कमियां जैसा कि मैं उन्हें देखता हूं

  • मुख्य से विलय स्वयं (या स्क्रिप्टेड) ​​किया जाना है
  • यह अधिक "प्रशासन" लेता है

2
आप सही हैं कि ट्रंक के बजाय फीचर शाखाओं पर काम करना हमेशा एक अच्छी बात है। समस्या यह है कि अधिकांश CVCS विलय के मामले में खराब काम करते हैं, इसलिए अधिकांश प्रोग्रामर मुझे पता है कि ज्यादातर समय CVCS की एक ही शाखा से चिपके रहते हैं। सवाल यह है कि क्या आप उन्हें बता सकते हैं कि सामान्य तौर पर अक्सर अपडेट करना हमेशा अच्छा होता है?
२०:०३ पर जोंस

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

6

हां, अक्सर अपडेट करना अच्छा होता है। आप मुश्किल मर्ज संघर्षों से बचने के लिए अक्सर अपडेट करते हैं और यह सॉफ्टवेयर कॉन्फ़िगरेशन मैनेजमेंट (SCM) नॉलेज की मूल बातें है जिसमें डायजेंट बदलाव की समस्या है।

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

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

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


4

प्रश्न में तीसरा बुलेट बिंदु केवल गलत है :

  • आप एक नई सुविधा पर काम कर रहे हैं, जिसे पूरा करने में निश्चित रूप से कई दिन लगेंगे, और आप इससे पहले प्रतिबद्ध नहीं हो पाएंगे क्योंकि यह बिल्ड को तोड़ देगा।

यदि आप जानते हैं कि आप कुछ समय के लिए काम नहीं कर सकते हैं, तो आप शाखाओं का उपयोग करने के लिए पाठ्यपुस्तक उदाहरण हैं।

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

यदि आप पहले से ही प्रश्न में वर्णित स्थिति में हैं, तो अभी एक शाखा पर स्विच करें , अपने परिवर्तन करें और उस शाखा में काम करना जारी रखें।

सामान्य तौर पर CVCS में अक्सर अपडेट करना अच्छा रहता है। लेकिन अगर आप एक शाखा पर काम कर रहे हैं, तो "अक्सर अद्यतन या नहीं" का सवाल "मर्ज अक्सर या नहीं" हो जाता है। और जवाब वैसे भी हाँ है। बस दूसरी शाखा से विलय करने से पहले (शाखा में) सभी लंबित परिवर्तन करना सुनिश्चित करें, यदि आपके पास सुरक्षित रूप से विलय को वापस करने का विकल्प है।


2

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

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


1

मुझे वास्तव में स्थानीय रूप से वितरित संस्करण नियंत्रण का उपयोग करना अधिक सुविधाजनक लगता है। यही है, मैं git को तोड़फोड़ ग्राहक के रूप में उपयोग करता हूं। इसके फायदे हैं:

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

0

यदि आप एक नई सुविधा जोड़ रहे हैं, तो क्या आप एक नई एकल स्रोत फ़ाइल (और मिलान बाह्य इंटरफ़ेस हेडर फ़ाइल) बना सकते हैं?

मुझे चिंता है कि एक "नई सुविधा" के व्यापक प्रभाव पड़ रहे हैं? ऑब्जेक्ट ओरिएंटेशन अब एक बार होने वाला बज़ट नहीं हो सकता है, लेकिन उस प्रतिमान में योग्यता है।

इस तरह से आप रूपरेखा (बाहरी इंटरफ़ेस, प्लस स्टब फ़ंक्शंस) बना सकते हैं और प्रतिबद्ध कर सकते हैं कि तब न्यूनतम तृतीय पक्ष प्रभाव होना चाहिए, जबकि आप अपने बाकी के विकास को पूरा करते हैं?

जिस स्थिति का आप वर्णन करते हैं, मुझे लगता है कि कम, बड़ी फ़ाइलों की तुलना में अधिक छोटे स्रोत फ़ाइलों का होना बेहतर है।


0

किसी वितरित संस्करण की तुलना में यह केंद्रीकृत संस्करण नियंत्रण के लिए कैसे भिन्न है?

दोनों ही स्थिति में आपको ऐसी जगह की जाँच करनी होगी, जिसकी सामग्री आपके द्वारा शुरू की गई चीज़ों की तुलना में आगे बढ़ी होगी। मुझे केंद्रीय रिपॉजिटरी से आपके वर्किंग प्लेस (और आपकी प्रोजेक्ट ब्रांच आपकी वर्किंग प्लेस) में मर्ज की फ्रीक्वेंसी में कोई अंतर नहीं दिखता है।

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

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


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

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

CVCS में अपडेट ऑपरेशन कम सुरक्षित है क्योंकि आप इसे वापस नहीं ले सकते हैं जिस तरह से आप डीवीसीएस में मर्ज वापस ले सकते हैं। यही कारण है कि सीवीसीएस हिस्सा महत्वपूर्ण है, और सवाल एक डीवीसीएस में कम समझ में आता है।
जोंस

प्रतीक्षा में कठिनाई और जोखिम को कम नहीं किया जा सकता है, इसलिए आप अधिक लगातार अपडेट के लिए बहस कर रहे हैं।
एपीग्रामग्राम

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

0

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

मैंने संस्करण नियंत्रण प्रणालियों के साथ काम किया है जो एक बार अपडेट होने के बाद बैकअप लेना बहुत मुश्किल है। उन पर, मैं केवल अपडेट करने की आवश्यकता होने से पहले अपडेट करता हूं। बेहतर संस्करण नियंत्रण प्रणालियों के साथ, प्रति दिन कई बार अपडेट नहीं करने का बहुत कम कारण है।

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