क्या कभी नॉन-वर्किंग कोड करना ठीक है?


40

क्या केवल काम करने वाले कोड की आवश्यकता है यह अच्छा विचार है?

इस कमेटी को रिपोजिटरी को कार्यशील अवस्था में छोड़ने की आवश्यकता नहीं है:

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

    1. स्थानीय फ़ाइलें
    2. मचान क्षेत्र
    3. स्थानीय शाखा में आता है
    4. दूरस्थ व्यक्तिगत सुविधा शाखा में आता है
    5. दूरस्थ developशाखा के साथ विलय
    6. दूरस्थ masterशाखा के साथ विलय
    7. दूरस्थ releaseशाखा के साथ विलय
  • ... जल्दी करो, अक्सर कमिट करो।

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


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


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


28
स्थानीय शाखाओं में सब कुछ हो जाता है। जो चाहे कर लो। धक्का देने से पहले बस साफ करें।
जोकिम सॉर

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

9
यदि आप प्रत्येक सुविधा को अपनी शाखा पर विकसित करते हैं, तो वह निर्णय तुच्छ है: शाखा को त्यागें, वर्तमान मास्टर पर बनाई गई नई शाखा से जारी रखें
जोआचिम सॉर

1
जब तक आप परिभाषित नहीं करते हैं कि क्या "टूटा हुआ" है, तो इस प्रश्न का आधिकारिक रूप से उत्तर देना असंभव है। यह भी देखें: क्या एक प्रोग्रामर को किसी और के असफल निर्माण को ठीक करना चाहिए?
१२:१३

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

जवाबों:


20

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

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

(पेरफोर्स बेस्ट प्रैक्टिस से)

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

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

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

(पेरफोर्स बेस्ट प्रैक्टिस से)

एहसास है कि यह एक मजबूत कॉर्पोरेट मानसिकता के साथ SCM स्थित केंद्रीय सर्वर से आ रहा है। कोर विचार अभी भी अच्छा है। ये अक्सर अंतर्निहित के बारे में सोचा जाता है - आप रिलीज शाखा में अप्राप्त देव कोड की जांच नहीं करते हैं। यह एक नीति है।

तो शाखा, कहते हैं कि इस शाखा का कोड टूट सकता है और दूर हो सकता है।


40

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


2
यह वास्तव में एक खूबसूरत चीज है। मुझे नहीं लगता कि समुदाय ने वास्तव में जीआईटी और डीवीसीएस की सराहना करना सीखा है।
कैओसपांडियन

5
जब तक लोग इस दार्शनिकता को परीक्षण और त्रुटि प्रोग्रामिंग के साथ भ्रमित नहीं करते हैं, जिसे टाला जाना चाहिए।
पीटर बी

10

हां, जब तक यह रिलीज ब्रांच नहीं है।

व्यक्तिगत शाखाओं में, सब कुछ चला जाता है और तब त्याग दिया जा सकता है यदि प्रयोग काम नहीं करता है। यह डीवीसीएस के मुख्य लाभों में से एक है: स्वतंत्रता

टूटे हुए कोड को करने का मूल्य ?: सहयोग और प्रयोग


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

5

हाँ यह ठीक है और इसकी कुछ बातें मैं बहुत कुछ करता हूँ।

गैर-बाध्यकारी कोड (कम से कम शाखाओं में) करने की बात यह है कि कभी-कभी आपका कोड एक कार्य-प्रगति है, लेकिन यह कि अब तक किया गया कार्य दूसरों के साथ बचत और / या साझा करने के लायक है

मेरे अभ्यास हैं:

  • पहले परीक्षण लिखें
  • wip (काम-में-प्रगति) कमिट अच्छे हैं
  • अक्सर प्रतिबद्ध (एक दिन के भीतर कई) और जल्दी ('काम' चरणों को बचाने)
  • हर कमिट करने के बाद धक्का दें (यदि आपकी हार्ड ड्राइव दुर्घटनाग्रस्त हो जाए / बस आपसे टकरा जाए)।
  • हमेशा शाखाओं में पहले काम करें
  • जब संभव हो केवल मास्टर के लिए काम करने वाले कोड में विलय करें
  • मास्टर मर्ज से पहले स्क्वैश वाइप्स के लिए इंटरएक्टिव रिबास

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

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

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

'किए गए' का अर्थ है - इसका मतलब है कि कोड और परीक्षण लिखे गए हैं, फिर से काम किए गए हैं और काम कर रहे हैं। यदि आप ऐसी टिप्पणियां सुनते हैं जैसे "ज्यादातर किया जाता है, तो बस लिखने / ठीक करने / रिफ्लेक्टर परीक्षण करने की आवश्यकता होती है, तो ऐसा नहीं किया जाता है। एक विशेषता का कहना है कि यह तकनीकी रूप से पूर्ण होने के बिना किया जाता है। यह जूनियर प्रोग्रामर की सबसे आम गलतियों में से एक है।


3

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


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

यहां तक ​​कि DVCSes पर भी कुछ करने लायक है, क्योंकि इसमें कोड "अधिक स्थायी" है, फिर फाइलों में एक है। कम से कम गिट के लिए।
जोकिम सॉर

3
@ThomasOwens, पूरे सम्मान के साथ, यदि आपका DVCS प्रशासन आपके सिस्टम को सेट अप करता है ताकि स्थानीय रिपॉजिटरी या शाखाएँ बैकअप न हों, तो आपका DVCS एडमिन एक बेवकूफ है और उसे अपनी प्रतिभाओं के लिए अधिक उपयुक्त नई नौकरी खोजने की आवश्यकता है ("क्या आप चाहेंगे?" उस के साथ फ्राइज़? ”)। अगर आपके DVCS एडमिन ने ऐसा किया है क्योंकि आपके IT लोगों ने उसे बताया है, जो आपके IT संगठन के लिए भी है। कुछ भी हैं, तो यह यकीनन पूरी DVCS अवधारणा का अभियोग है: VCS को कोड करने चाहिए द्वारा परिभाषा स्वचालित बैकअप के लिए यह करने से मतलब है।
जॉन आर। स्ट्रॉहम

6
@ JohnR.Strohm यात्रा करते समय, मेरे पास अक्सर सीमित नेटवर्क पहुंच होती है, इसलिए मेरे पास किसी भी बैकअप संसाधन या नेटवर्क ड्राइव तक पहुंच नहीं है। जब तक मेरे पास नेटवर्क नहीं है तब तक मैं बैकअप के बिना विकास कर रहा हूं। यह एक DVCS का बिंदु है - आपको नेटवर्क की आवश्यकता नहीं है। क्या आपके रेपो का बैकअप होना चाहिए? शायद, लेकिन यह केवल रिलीज या मास्टर रिपोज के लिए एक आवश्यकता है। आप वास्तव में किसी भी तरह से एक समर्थित रेपो को धक्का देने के बीच दिन नहीं जाना चाहिए, लेकिन उन धक्का कोड को तोड़ा नहीं जाना चाहिए।
थॉमस ओवेन्स

1
@ThomasOwens मेरी बात यह है कि यद्यपि आपके बैकअप सर्वर तक पहुँच केवल छिटपुट है, इसके लिए आपका कोड काम करना प्राथमिकता होनी चाहिए। आप हमेशा अपना कोड किसी अन्य मशीन पर बना सकते हैं, यहां तक ​​कि आपकी टीम के अन्य लोग भी अपनी मशीनों पर कोड का काम कर सकते हैं। यदि यह केवल आपकी मशीन पर बैठता है, तो ग्राहक सबसे अधिक परवाह नहीं करेगा यदि यह काम करता है। ग्राहक बिल्ड सर्वर से एक नए रिलीज की परवाह करता है जो बदले में सर्वर रिपॉजिटरी से आकर्षित होता है।
nvoigt

3

इस तरह से इसके बारे में सोचो। एक डेवलपर के रूप में सबसे अधिक विघटनकारी चीजों में से एक आप अपने काम पर अन्य डेवलपर्स को उनके कार्यों पर काम करने से रोकना है।

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

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

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


3

इससे पहले कि आप अपने संस्करण नियंत्रण के साथ काम करने के बारे में हठधर्मिता शुरू करें, यह सोचने लायक है कि आप संस्करण नियंत्रण के साथ काम क्यों कर रहे हैं।

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

आपको कब करना चाहिए? जब आपके पास एक उचित मौका होगा तो आप भविष्य में अपने कोड की स्थिति (या किसी बदलाव के लिए प्रतिबद्ध संदेश) को देखेंगे।

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

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


आपका उत्तर प्रेरणादायक है, लेकिन मेरे लिए अस्पष्ट है। हाथ में मेरी समस्या यह है कि मैं बनाता हूं (मुझे लगता है) बहुत सारे काम करता है, और जब मुझे वापस करने की आवश्यकता होती है, तो मुझे नहीं पता कि कहां, उनमें से कई काम नहीं करते हैं। संदर्भ <5 की छोटी टीम का एकल विकास है। मुझे लगता है कि मैं "कम अक्सर" बात को बहुत दूर ले जा रहा हूं और ठीक होने की आवश्यकता हो सकती है। मैं कैसे काम करता हूं, जिसमें सार्थक संदेश होगा?
वोरैक

1
यदि आप पाते हैं कि आपको हर बार आपके संकलन / परीक्षण के लिए प्रतिबद्ध होना है, तो शायद आपको एक बेहतर संपादक खोजने की आवश्यकता है जो आपको अधिक पूर्ववत इतिहास प्रदान करता है। यदि आप एक ऐसा संदेश नहीं लिख सकते हैं जो सार्थक रूप से आपके परिवर्तनों को व्यक्त करता है, तो प्रतिबद्ध न करें।
शॉन मैकसोमेटिंग सेप

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

2

शाखाएँ बनाएँ / जारी करें

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

अन्य शाखाएँ: अक्सर राज्य बचाओ

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

इन उदाहरणों पर विचार करें जहां सहेजी गई स्थिति एक महत्वपूर्ण लाभ प्रदान करती है:

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

0

कुछ टूटे हुए कोड-बेस को ठीक करना तब तक ठीक है जब तक यह स्थानीय है।

क्यूं कर?

  • अपने विकास में एक बचत बिंदु के रूप में कमिटिंग का उपयोग करना आवश्यक है
  • यह आपको उत्पाद विकसित करते समय उपयोग किए गए विचार का एक पैटर्न दिखाता है।
  • इससे सहयोग टूटता नहीं है

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

  1. आगे की सुविधाओं के लिए इस्तेमाल होने वाला समय अब ​​त्रुटियों को ठीक करने में व्यतीत होता है ...
  2. विकास कटौती पूरी नहीं हुई है ...
  3. उत्पाद समय पर भेज नहीं है

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


0

मुझे नहीं लगता कि टूटे हुए कोड को करना ठीक है।

क्या होता है जब

  • एक तत्काल गर्म फिक्स की आवश्यकता है। कोड आधार टूटी अवस्था में है। आपको वापस रोल करने, फिक्स करने और तैनात करने के लिए मजबूर किया जाता है।

  • किसी और ने उसी शाखा में काम करना शुरू कर दिया है, जो यह नहीं जानता है कि आपने टूटे हुए कोड को अंजाम दिया है। वे एक 'लाल हेरिंग' सोच का पीछा कर रहे होंगे कि उनके परिवर्तन से कुछ टूट गया है।

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

  • कोई आपका 'टूटा हुआ कोड' बताता है? यह एक 'गेम ओवर' हो सकता है यदि आप व्यक्तिगत डेटा या भुगतान प्रदाता के साथ काम कर रहे हैं।

@WarrenT को उत्तर दें

मैं आपसे सहमत हूं कि एक आदर्श दुनिया में जहां हर कोई एक सुविधा शाखा में काम करता है, गैर-कामकाजी कोड काम कर सकता है। मैंने बड़ी परियोजनाओं पर काम किया है और तब भी ऐसे मामले थे जहां कई लोगों को एक ही सुविधा शाखा में काम करना पड़ा। मैंने लोगों को मुख्य शाखा में 'काम नहीं करने' के कोड के लिए प्रतिबद्ध देखा है क्योंकि रिलीज़ होने में कुछ हफ्ते बाकी थे और उन्होंने अगले दिन इसे ठीक करने की योजना बनाई। ये सभी चीजें एक आपदा के लिए उम्मीदवार हैं और मेरा दृढ़ता से मानना ​​है कि उन्हें हर कीमत पर बचा जाना चाहिए।


Downvote। यदि आप मानक DVCS वर्कफ़्लो का उपयोग कर रहे हैं, तो इनमें से कोई भी परिदृश्य संभव नहीं है।
user16764

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

मुझे लगता है कि "नॉन-वर्किंग कोड" (जिसे ओपी ने पूछा है) और "टूटे हुए कोड" के बीच अंतर है, जिसे आप संदर्भित करते हैं।
साइमन

@WarrenT कृपया जवाब देखें।
कोडार्ट

-1

गैर-काम कोड करने के लिए यह निर्धारित करने में मदद करने के लिए कुछ प्रश्न निर्धारित करते हैं:

  1. क्या आप अधिक काम कर रहे हैं?
  2. क्या आपकी टीम के साथी लगातार निर्माण को तोड़ते हैं?
  3. क्या आपका कोड आधार गड़बड़ है और प्रतीत होता है कि कोई भी बदतर नहीं हो सकता है?

यदि आप उपरोक्त में से किसी के लिए हां कहते हैं, तो हां गैर-काम कोड के लिए ठीक है।

बस इसे जल्द से जल्द ठीक करने के लिए याद रखें, इसे किसी भी लागू इकाई परीक्षणों के साथ कवर करें, और बिल्ड को तोड़ने के लिए माफी मांगें।

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