जब तक किसी भी धक्का काम में अंतिम प्रतिबद्ध नहीं है, तब तक मध्यवर्ती कमिट होना ठीक है?


13

संबंधित: क्या प्रत्येक कार्य करने वाले कर्मचारी को कार्यशील स्थिति में परियोजना छोड़नी चाहिए?

मान लीजिए कि मैं स्थानीय स्तर पर निम्नलिखित काम करता हूं:

  • डेटाबेस स्कीमा को संशोधित करें, एप्लिकेशन को तोड़ना।

  • एप्लिकेशन को अपडेट करें ताकि यह डेटाबेस स्कीमा के साथ फिर से संगत हो।

जब तक मैं दोनों को धक्का देता हूं, तब तक masterकार्यशील स्थिति में रहता है। हालांकि, एक ऐतिहासिक संस्करण टूट गया है।

मुझे पता है कि मैं git rebase -iकमिट्स को एक साथ स्क्वैश करने के लिए उपयोग कर सकता हूं । हालांकि, परिणामी प्रतिबद्धता बड़ी और कम वर्णनात्मक होगी। अगर मुझे यह पता लगाने के लिए कि मुझे कुछ क्यों बदला है, तो यह जानने के लिए कि मुझे क्या करना है और मैं क्या कर रहा हूं, मैं मूल प्रतिबद्ध खोज पाऊंगा।

मेरे प्रश्न हैं:

  • क्या किसी को मास्टर में टूटे ऐतिहासिक कमिट के कारण कठिनाइयों का सामना करना पड़ा है ?

  • यदि ऐसा है, तो क्या ऐसी प्रतिबद्धताओं से बचने का एक सरल तरीका है, व्यक्तिगत प्रतिबद्ध संदेशों और परिवर्तनों को त्यागने के बिना?


1
आप एक चरण में दोनों बदलाव क्यों नहीं कर सकते? क्या आप काम का सार्थक हिस्सा नहीं मान रहे हैं?
जियोर्जियो

जवाबों:


9

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

प्रदूषण फैलाने वाले मास्टर के बिना व्यक्ति को रखने का सरल तरीका शाखाओं का उपयोग करना है। आप ब्रेकिंग / प्रायोगिक सामान को वहां रख सकते हैं ताकि आप मास्टर शाखा के इतिहास को प्रदूषित किए बिना ठीक-ठाक इतिहास बना सकें।


3
हां, लेकिन जब मैं मास्टर में एक फीचर को मर्ज करता हूं और यह तेजी से आगे बढ़ता है, तो मास्टर के पास अब वह सब होता है। यदि यह बहुत सारे हैं, तो क्या मुझे --no-ffमर्ज करने के लिए इसे लागू करने के लिए गिट-मर्ज के विकल्प का उपयोग करने पर विचार करना चाहिए ?
जॉय एडम्स

मेरा मानना ​​है कि यह एक समझदारी भरा लक्ष्य है जो मास्टर ब्रांच में हर कमिटमेंट एक वर्किंग सॉफ्टवेयर वर्जन बनाता है। यदि उन्हें एक बड़े रोल में लाने का कोई मतलब नहीं है, तो कमेंट में अन्य कमिट के साथ किसी भी निर्भरता का स्पष्ट रूप से वर्णन करना चाहिए।
मटनज़

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

3
पार्टी में थोड़ा देर से लेकिन अगर आप वास्तव में उन टूटे हुए कमेंट्स को पसंद नहीं करते हैं, तो इससे पहले कि आप अपनी शाखा को मास्टर में विलय कर दें।
डैन पेंट्री

3

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

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

यदि आपकी टीम ने इस तरह के शाखापूर्ण मॉडल को नहीं अपनाया है, तो आपके पास एक पूरा बहाना है कि आप पूरी तरह से मास्टर को आगे बढ़ाएं और उसके साथ काम करें।


3

नहीं, यह ठीक नहीं है।

यदि आपने कभी ऐसा किया है git bisect(और जो उस हत्यारे की सुविधा को पसंद नहीं करता है), तो आप एक ऐसे इतिहास का मूल्य जानते हैं, जहाँ हर प्रतिबद्ध बनाता है।

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

यदि आप एक विशेषता शाखा समाप्त करते हैं और इसे मास्टर में विलय करते हैं, तो विलय से पहले शाखा को साफ करें ताकि आपका इतिहास स्पष्ट और निर्माण हो।


3

क्या किसी को मास्टर में टूटे ऐतिहासिक कमिट के कारण कठिनाइयों का सामना करना पड़ा है?

हाँ। बैकपार्ट्स, रेवरट्स और बायसेक्ट्स कठिन हैं। तो इतिहास पढ़ रहा है (नीचे देखें)।

यदि ऐसा है, तो क्या ऐसी प्रतिबद्धताओं से बचने का एक सरल तरीका है, व्यक्तिगत प्रतिबद्ध संदेशों और परिवर्तनों को त्यागने के बिना?

ऐसा नहीं है कि मुझे पता है, हालांकि शाखाएं एक सभ्य समाधान हैं।

हालांकि, मुझे लगता है कि व्यक्तिगत रूप से कम करना (या बल्कि तोड़ना) करना सही काम है।

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

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

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

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


1

संक्षिप्त उत्तर: हां

परिक्षण:

टेस्ट संचालित विकास का मतलब है कि आप ऐसे परीक्षण लिखते हैं जो टूट जाते हैं (यानी फेल शो)।
फिर आप परीक्षणों को काम करने के लिए कोड लिखते हैं।

विकास:

अक्सर छोटा, कमिटेड।
प्रत्येक कमिट एक रोलबैक बिंदु है। यदि आपको लगता है कि आप गलत रास्ते पर हैं तो आप अपेक्षाकृत आसानी से पिछले बिंदु पर रोलबैक हो सकते हैं। यदि आप कर रहे हैं ठीक अनाज पर्याप्त हैं आप सही बिंदु पर रोलबैक कर सकते हैं।

चेतावनी:

इसका मतलब यह नहीं है

1) आप मास्टर में टूटे हुए कोड की जाँच करें।
2) आपको समीक्षा करने के लिए सभी माइक्रो कमिट्स को पुश करने की आवश्यकता है।

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


0

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

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