एकल डेवलपर के लिए सर्वश्रेष्ठ संस्करण नियंत्रण की आदतें?


36

मैं अपने काम का एकमात्र डेवलपर हूं और जब मैं वीसीएस के लाभों को समझता हूं; मुझे अच्छी प्रथाओं से चिपके रहना मुश्किल लगता है। फिलहाल मैं ज्यादातर वेब ऐप्स विकसित करने के लिए git का उपयोग कर रहा हूं (जो कि मेरे काम के कारण कभी भी खुले नहीं होंगे)।

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

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

मुझे कितनी बार कमिट करना चाहिए? क्या प्रत्येक एक-पंक्ति परिवर्तन को एक प्रतिबद्धता मिलनी चाहिए? क्या मुझे किसी भी परीक्षा से पहले (उदाहरण के लिए, कम से कम वाक्य रचना / संकलन त्रुटियों के लिए और फिर इसे पूरी तरह से पूर्ववत करना होगा, क्योंकि विचार काम नहीं करता था या संदेश एक झूठ है)?

क्या मुझे यह सुनिश्चित करने से पहले कि मैं रात के खाने के लिए काम करना बंद कर दूं, मुझे प्रत्येक सुबह / दोपहर सुनिश्चित करना चाहिए? VCS की बुरी आदतें होने से मुझे क्या याद आ रहा है?


2
हो सकता है कि आपके किसी वेकअप के कारण आपको ऐसा लगे कि VCS आपके लिए काम नहीं करता है क्योंकि आप Git का इस्तेमाल सोलो डेवलपर के रूप में कर रहे हैं? मुझे एक ही डेवलपर के लिए ओवरटेक करना अच्छा लगता है, शायद एसवीएन जैसी कम सुविधाओं के साथ कुछ उपयोग करना आसान होगा?
मेपल_शाफ्ट

6
@maple_shaft: मैंने Git का उपयोग नहीं किया है, लेकिन मर्क्यूरियल बुनियादी एकल डेवलपर कार्यों के लिए सबवर्सन जितना सरल है। (सरल, वास्तव में, रिपॉजिटरी-समतुल्य बनाने के बाद से आसान है।)
डेविड थॉर्नले

15
क्यों overkill होगा?
तमसे सजेलेई

1
@maple_shaft वास्तविक लाभ बाद में आता है। कम के लिए व्यवस्थित करने की आवश्यकता नहीं है।

3
यह ध्यान देने योग्य है कि DVCS जैसे git और mercurial के लिए, अपने स्रोत नियंत्रण के ऑफसाइट बैकअप के लाभों को प्राप्त करने के लिए (जैसा कि कुछ उत्तरों में उल्लेख किया गया है) आपको नियमित रूप से पुश करने की आवश्यकता होगी, न कि केवल कमिट।
दिनांक

जवाबों:


24

आपकी बहुत याद आ रही है।

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

मुझे जो मिलता है वह यह है कि मैं जब चाहे वापस जा सकता हूं। जो बहुत है। इसके अलावा, शाखाओं का आदेश दिया जाना मदद करता है।

मुझे लगता है कि यह मुझे बहुत आदेश देता है।

मैं svn का उपयोग कर रहा हूं, और मैं इससे बीमार हो रहा हूं। लेकिन कुछ और सीखने में ज्यादा समय नहीं दे सकते।

सौभाग्य।


+1 मैंने हाल ही में खुद वीसीएस का उपयोग करना शुरू कर दिया है, और जीआईटी मेरे लिए बात है :)
यति सगड़े

1
मैंने लंबे समय तक संस्करण नियंत्रण से परहेज किया था क्योंकि मैं इस धारणा के अधीन था कि यह बहुत भारी / बदसूरत / कष्टप्रद था। कुछ महीने पहले मैंने तोड़फोड़ से परिचित होने का फैसला किया और अब मैं इसकी कसम खाता हूं।
Dalin Seivewright

1
मेरे पास कई एकल परियोजनाएं हैं: कुछ गितुब पर, कुछ नहीं। मैं हमेशा git का उपयोग करता हूं, भले ही मैं किसी विशेष API / टूल को सीखने के एक्सप्रेस उद्देश्यों के लिए कुछ बना रहा हूं। यह वास्तविक परियोजनाओं के लिए अच्छी आदतों को लागू करता है जहां यह अधिक उपयोगी है, जैसा कि @jbcolmenares वर्णन करता है।
सूरुमोंट

2
मैं काउंटर करता हूँ " hginit.com के साथ" कुछ और सीखने में अधिक समय व्यतीत नहीं कर सकते । जब आप एक सप्ताह के लिए svn पर गुस्सा हो रहे समय की गणना करते हैं, तो अगले सप्ताह hginit को पढ़ने के लिए उस समय की मात्रा लें।
तदमर्स

@tdammers एक नज़र रखना होगा
cauchy

18

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

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

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


"क्या होगा अगर आपका कंप्यूटर क्रैश हो जाता है" - फाइलों को अक्सर डिस्क पर सहेजा जाता है और रात को बैकअप बनाया जाता है (यदि आपका मतलब है कि हार्ड डिस्क टूट जाती है)। हालाँकि बग के लिए बाइनरी सर्च के लिए +1 काम आ सकता है। मुझे अपने 95% कीड़े जल्दी से अच्छे लगे हैं; लेकिन हर अब और फिर कार्यक्रम के एक अन्य हिस्से में एक प्रतीत होता है कि अनुचित परिवर्तन से उत्पन्न होने वाला विचित्र बग है।
डॉम्ब जिंबाब

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

1
@ डिमा: आपको पुश करने की आवश्यकता होगी और न केवल आपके बैकअप के लिए प्रतिबद्ध होंगे
आजाद करें

@liberforce नहीं सभी संस्करण नियंत्रण प्रणालियों में एक पुश ऑपरेशन होता है। यह उत्तर 2012 से है। मैं उस समय तोड़फोड़ कर रहा था, जिसका वितरण नहीं किया गया है। तो, कोई धक्का नहीं।
दीमा

2
@ डिमा: यकीन है, लेकिन ओपी गिट का उपयोग कर रहा था, इसलिए निर्देश भ्रामक हो सकते हैं क्योंकि आपने नहीं कहा था कि आप एसवीएन के बारे में बात कर रहे थे।
आजाद करें

10

सीवीएस से अधिकतम प्राप्त करने के लिए आपको एक बार में एक फीचर / बग-फिक्स पर काम करना चाहिए, और उस सुविधा / बग-फिक्स को पूरा होने पर प्रतिबद्ध करें। ऐसा करने से आपको लाभ होगा:

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

इसके अलावा, जब से आप पीसी के बीच स्विच करते हैं, आपके पास कम से कम दो शाखाएँ होनी चाहिए:

  • एक "रेडी टू गो" शाखा जो हमेशा काम करती है (बग्स को छोड़कर जो आप विकास शाखा में काम कर रहे हैं, निश्चित रूप से)
  • एक विकास शाखा जो समय-समय पर एक अप्राप्य स्थिति में हो सकती है (जैसे काम से आपकी यात्रा के दौरान घर;)।

1
शाखा जाने के लिए तैयार के लिए +1! मुझे नहीं पता कि कितनी बार मुझे सॉफ्टवेयर दिखाने के लिए कहा जाता है क्योंकि बॉस और भावी ग्राहक चलते हैं। एक संस्करण है कि वास्तव में काम करता है और प्रवाह की स्थिति में नहीं है अच्छा है।
ब्लूबिल

एक संस्करण जो काम करता है और परीक्षण किया जाता है वह आमतौर पर टैग किया जाता है। यही आपको दिखाना चाहिए, जब तक कि बॉस नवीनतम परिवर्तनों को नहीं देखना चाहता। उस मामले में, आप बस git stashऔर दिखाते हैं कि आपके पास क्या है, या एक विशिष्ट प्रतिबद्धता की जांच करें। बेशक, यदि आपके पास बड़े परिवर्तन हैं जो एक कार्य प्रगति पर हैं, तो उन्हें एक अलग कार्य-प्रगति की शाखा में होना चाहिए, इसलिए आपकी मास्टर शाखा एक वास्तविक स्थिर है।
liberforce

7

क्या प्रत्येक एक-पंक्ति परिवर्तन को एक प्रतिबद्धता मिलनी चाहिए?

यदि वह है जो एक बग को ठीक करता है, तो निश्चित रूप से।

VCS की बुरी आदतें होने से मुझे क्या याद आ रहा है?

मैंने एक ऐसे व्यक्ति के साथ काम किया, जिसे "खराब वीसीएस आदतें" थीं। वह खुद से काम करना पसंद करता था और वह एक उत्पाद लाइन का प्रभारी था, जो $ 1,000,000 / वर्ष जैसी किसी चीज में लाया जाता था। जब बॉस ने उसे नंगा किया, तो वह केवल कमिटमेंट करेगा। फिर एक दिन उनका हार्ड ड्राइव क्रैश हो गया। उसके लिए एक प्रतिस्थापन स्थापित करने के बाद, हमने 6 महीने पहले उसका अंतिम चेक-इन खोजा था। चूंकि वीसीएस स्रोत सुरक्षित था, आप अनुमान लगा सकते हैं कि और क्या गलत हुआ - अंतिम प्रतिबद्ध भ्रष्ट था। हमें उसकी उत्पाद लाइन का एक गैर-दूषित संस्करण प्राप्त करने के लिए एक वर्ष से अधिक समय तक वापस जाना पड़ा। वह निकाल नहीं दिया गया था, भले ही वह होना चाहिए था।

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

मुझे कितनी बार कमिट करना चाहिए?

मैं इसे कुछ मैट्रिक्स में तोड़ता हूं:

  • यदि आपका कंप्यूटर मर जाता है तो आप कितना काम करने को तैयार हैं? या चोरी हो जाता है

  • यदि यह Bug_1234 को ठीक करता है, तो कोड को "Bug_1234 को ठीक करता है" टिप्पणी के साथ जांचें।

  • यदि यह एक तार्किक वितरण / मील का पत्थर है, तो इसे "Bug_1234, form_xyz" (या टास्क_1234 उपयुक्त) जैसी टिप्पणी के साथ जांचें।

  • हमेशा घर आने से पहले शुक्रवार की शाम को कोड की जाँच करें। छुट्टी पर जाने से पहले हर चीज का चेक-इन (या चेकआउट पूर्ववत) भी करें।

  • जब भी कंपनी पॉलिसी तय करती है।


1
मैं मानता हूं कि आदमी को निकाल दिया जाना चाहिए था। कम से कम रिलीज के लिए भी, पागलपन नहीं है। आप 1.2 संस्करण में दिखाई देने वाले बग को कैसे जान सकते हैं यदि आपको नहीं पता कि 1.2 में कोड क्या है? क्या आदमी सिर्फ कोड का नकल कर रहा था और अपनी हार्ड ड्राइव पर जा रहा था?
liberforce

5

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

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


4

मैं सबसे बड़ी बात यह कहूंगा कि आप एक साथ बदलावों को याद कर रहे हैं, जैसे कि बग्स को कब और कहां ट्रैक किया गया है।

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

टीम में विकसित होने पर अन्य लाभ खेलने में आते हैं - सरल प्रतिबद्ध टिप्पणियां, आसान विलय, बग फिक्स के लिए संबंधित, आदि।

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


4

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

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

इसके अलावा, मैं हमेशा ऐसा कोड तैयार करता हूं जो संकलन करता है, और लगभग हमेशा कोड जो सभी बुनियादी परीक्षणों को भी पास करता है। यदि नहीं, तो मैं प्रतिबद्ध संदेश में "DOES NOT WORK" को शामिल करना सुनिश्चित करता हूं। ऐसा होने पर एकमात्र मामला तब होता है जब मैंने महत्वपूर्ण बदलाव किए हैं, जो मैं खोना नहीं चाहता, भले ही वे अभी तक बहुत काम नहीं करते हैं, और इसके शीर्ष पर मैं एक महान refactoring साहसिक कार्य में लगने वाला हूं जो मुझे यकीन नहीं है कि क्या यह सफल होगा। इसलिए, मैं रिपॉजिटरी का उपयोग उस काम के बैकअप के रूप में करता हूं, जो अब तक मैंने इसे गड़बड़ाने से पहले किया है और इसे फेंकना है।

इसका मतलब है कि मैं हमेशा प्रतिबद्ध करता हूं जब मेरे स्रोत कोड को प्रतिबद्ध होने की आवश्यकता होती है; यह सुबह की प्रतिबद्धताओं या शाम के प्रतिबद्ध नियमों का कोई मतलब नहीं है। यह राज्य है कि कोड वह है जिसमें यह निर्धारित करता है कि यह प्रतिबद्ध होने का समय है या नहीं।

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

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


1

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

प्रतिबद्ध संदेश वास्तव में महत्वपूर्ण है। आपको यह बताने से बचना चाहिए कि आप क्या कर रहे हैं, क्यों बताएं आप ऐसा कर रहे हैं। कोड पहले से ही परिवर्तनों का दस्तावेज है, लेकिन 6 महीनों में आपको यह देखकर खुशी होगी कि आपने उन्हें क्यों किया।

यह भी उपयोगी है यदि संयोग से कोई व्यक्ति कूदता है और आप अकेले नहीं हैं। यहां तक ​​कि आपके लिए भी, एक साफ इतिहास का उपयोग करना आसान बनाता हैgit blame जानना कि बग को कब और क्यों उस लाइन में बदला गया है।

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

आप उस की शक्ति को भी उजागर कर सकते हैं git bissectजो आपको यह बताएगा कि यह बुरा बग है। यदि यह प्रतिबद्ध है, तो 2,000 लाइनें लंबी हैं, फिर भी यह मदद करता है लेकिन इतना नहीं ...

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

आपके अन्य सवालों के बारे में:

  • जब तक आप संकलन नहीं करते हैं, तब तक ऐसा सामान न रखें, जब तक आप उस (उपयोग git rebase --interactive) के लिए अपने इतिहास को फिर से लिखने के लिए तैयार न हों ।
  • यदि यह एक अलग उद्देश्य है (एक बग को ठीक करता है, या आपके वर्तमान में परिवर्तन किए गए परिवर्तनों से संबंधित नहीं है) तो एक पंक्ति परिवर्तन एक योग्य है। git add --patchउन लोगों को मंच देने के लिए उपयोग करें ।
  • रात के खाने से पहले खुद को प्रतिबद्ध करने के लिए मजबूर करने की कोई ज़रूरत नहीं है, जब तक कि आपके पास महत्वपूर्ण सामान न हो जिसे आप खो नहीं सकते। उस स्थिति में, आप एक अलग शाखा में अपना कार्य प्रगति पर करना चाहते हैं।
  • रिमोट रिपॉजिटरी में कमिट करना और धकेलना एक बैकअप है। यदि आप एक सप्ताह में केवल एक बार प्रतिबद्ध और धक्का देते हैं, तो आप सबसे खराब स्थिति में एक सप्ताह का काम खो सकते हैं।

0

मुझे कितनी बार कमिट करना चाहिए?

एक एकल डेवलपर के रूप में, मैं आमतौर पर जब भी मुझे लगता है कि बुनियादी परीक्षण के बाद मैंने एक महत्वपूर्ण बदलाव किया है, और जब मैं रात के अंत में एक परियोजना छोड़ता हूं, तो मैं प्रतिबद्ध हूं।

क्या प्रत्येक एक-पंक्ति परिवर्तन को एक प्रतिबद्धता मिलनी चाहिए?

नहीं, जब तक कि एक-लाइन परिवर्तन एक सुविधा या बग को बदलने के लिए महत्वपूर्ण नहीं है।

क्या मुझे किसी भी परीक्षा से पहले (उदाहरण के लिए, कम से कम वाक्य रचना / संकलन त्रुटियों के लिए और फिर इसे पूरी तरह से पूर्ववत करना होगा, क्योंकि विचार काम नहीं करता था या संदेश एक झूठ है)?

शायद ऩही। कम से कम मेरे लिए मैं अपने अधिकांश परीक्षण और कोडिंग एक 'वर्किंग कॉपी' पर करता हूं और अपने परिवर्तनों से खुश होने के बाद कमिट करता हूं। कई आईडीई में यह मुझे दिखाएगा कि इससे पहले कि मैं वास्तव में कमिट करता हूं और मुझे कमिट में नोट संलग्न करने का मौका देता है

क्या मुझे यह सुनिश्चित करने से पहले कि मैं रात के खाने के लिए काम करना बंद कर दूं, मुझे प्रत्येक सुबह / दोपहर सुनिश्चित करना चाहिए? VCS की बुरी आदतें होने से मुझे क्या याद आ रहा है?

मैं वीसीएस या इससे होने वाली बुरी आदतों से बहुत परिचित नहीं हूं। मुझे लगता है कि मैंने पहले सवाल के जवाब में इस पर ज्यादातर अपनी राय साझा की है।

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


I am not very familiar with VCS or what bad habits it causes.तुम भाग्यशाली हो!
यानिस

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

खैर, जैसा कि मैंने 3 साल से अधिक समय से SourceSafe के साथ संघर्ष किया है, मेरी टिप्पणी अभी भी खड़ी है: लकी यू! आपको एक उदाहरण देने के लिए, VSS6 लगभग 200mb - 300mb के रिपॉजिटरी को संभाल सकता है, इसके बाद यदि आप भाग्यशाली थे तो कुछ फाइलें बेतरतीब ढंग से दूषित हो जाएंगी। बेशक जहाँ कई फ़िक्सेस, और वर्कअराउंड और वीएसएस का उद्देश्य कभी भी एमएस द्वारा पूर्ण विकसित वीकेएस नहीं था, लेकिन अपने आप को भाग्यशाली
समझें

0

मैं आदतन कमिटेटर हूं और मैंने पाया कि मुझे सूट करता है, लेकिन माना जाता है कि मेरे कमिट मैसेज लगभग हमेशा की तरह हैं,

Age:  9 mins [*] Working on implementing and testing PaintSystem.
Age: 17 mins [*] Working on implementing and testing PaintSystem.
Age: 37 mins [*] Working on implementing and testing PaintSystem.
Age: 52 mins [*] Working on implementing and testing PaintSystem.

इसलिए मैं बिल्कुल नहीं कह सकता कि मेरी शाखा (मर्क्यूरियल) के लिए इस तरह के लगातार और अभ्यस्त होने से वास्तव में सबसे विस्तृत कमिट लॉग को प्रोत्साहित किया गया है। कभी-कभी मैं कोड हाफ भी कर लेता हूं अगर, कहो, मेरी पत्नी मुझे रात के खाने के लिए बाहर जाने के लिए कहती है, जिस समय मैं बस जल्दबाजी में नकल करूंगा और पिछले "वर्किंग ऑन [...]" मैसेज का उपयोग करूंगा।

मेरे कमिट लॉग पैटर्न आमतौर पर जैसे हैं, "Working on [...] Working on [...] Working [...] Completed [...] Started working on [...] Working on [...] Completed [...] Started working on [...]"

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

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

क्या प्रत्येक एक-पंक्ति परिवर्तन को एक प्रतिबद्धता मिलनी चाहिए?

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

टीबीएच मेरे बहुत से कमिट करता है जो "Working on [...]"लॉग पैटर्न का अनुसरण करते हैं जो बदलाव की सुसंगत इकाइयों की मॉडलिंग नहीं कर रहे हैं (क्यों मैं अक्सर बेहतर संदेश नहीं दे सकता हूं "Working on [...]") लेकिन सिर्फ मेरे लिए एक सांस लेने का परिणाम है, जैसे खुद को एक कप कॉफी बनाना। "Completed [...]"संदेश काम की है कि यूनिट के अंत इंगित करता है, और वहाँ मैं अक्सर पहले के साथ एक अधिक विस्तृत संदेश लिखने "Started working on [...]"प्रकार संदेशों जब मैं सिर्फ कुछ पर काम शुरू करते हैं। यदि आप औसतन हर 15 मिनट में एक बार कमिट करते हैं, तो उन लोगों के लिए "काम करना [...]" संदेश अधिक पसंद करने वाले इन-बिल्टर्स के लिए हैं जो किसी व्यक्ति के लिए एक अधिक विस्तृत संदेश के साथ कर सकते हैं।

क्या मुझे किसी भी परीक्षा से पहले (उदाहरण के लिए, कम से कम वाक्य रचना / संकलन त्रुटियों के लिए और फिर इसे पूरी तरह से पूर्ववत करना होगा, क्योंकि विचार काम नहीं करता था या संदेश एक झूठ है)?

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

क्या मुझे यह सुनिश्चित करने से पहले कि मैं रात के खाने के लिए काम करना बंद कर दूं, मुझे प्रत्येक सुबह / दोपहर सुनिश्चित करना चाहिए?

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

ओह और कभी-कभी मैं छोड़ने के बाद थोड़ा नशे में हो जाता हूं और आमतौर पर नशे में रहते हुए जटिल कोड लिखने की कोशिश करना एक बुरा विचार है (हालांकि हमेशा नहीं; एक समय मैं नशे में रहते हुए एक यूरेका पल के बाद वास्तव में अच्छा संदर्भ मेनू प्रणाली के साथ आया था; लेकिन मुझे केवल 6 बियर पसंद थे और यह उस कोड को जटिल नहीं था)। यदि मैं ऐसा करने का प्रयास करता हूं, तो कम से कम मैंने सोबर-कोड लिखे कोड को कमिट किया, इससे पहले कि मैं वापस आकर सोबर कोड के साथ ड्रंक कोड को मिक्स करने की बजाय वापस कर दूं, जिस बिंदु पर मेरा कमिट लॉग पढ़ सकता है, "Reverting back to code written before Jagermeister shots."मैं ऐसा नहीं करता बहुत बार जब तक मुझे एक शराबी कोड प्रेरणा नहीं मिली, लेकिन उन दुर्लभ मामलों में, यह वास्तव में मदद करता था कि मैंने बाहर जाने से पहले कुछ किया और नशे में हो गया।


आपके लिए अंगूठे का नियम: यदि आपके पास समान संदेशों के साथ लगातार दो बार आते हैं, तो आप लगभग निश्चित रूप से गलत कर रहे हैं। या तो उन्हें एक प्रतिबद्ध होना चाहिए, या आपको यह पता लगाना चाहिए कि उनके बारे में क्या अलग है और लॉग संदेश लिखें जो उस अंतर को दर्शाते हैं (उदाहरण के लिए "पेंट सिस्टम पर काम करने के बजाय" पेंट डेटा को ठीक से सेट करें "और" पेंट सिस्टम पर काम करने वाले "x2)।
मार्नेन लाईबो-कोसर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.