आप उन छोटे बदलावों का प्रबंधन कैसे करते हैं जिन्हें आप स्थानीय में रखना चाहते हैं?


9

मैं एक 14 साल पुराने cv रिपॉजिटरी (इतिहास को बरकरार रखने) के बारे में सोच रहा हूं। मुझे लगता है कि मुझे सभी तकनीकी रूपांतरण बिट्स मिल गए हैं, लेकिन मुझे अभी भी मर्क्यूरियल में प्रभावी ढंग से काम करने के बारे में कुछ प्रश्न हैं।

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

जवाबों:


5

मैं इसे इस तरह से संभालता हूं:

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

यह विचार है कि दूरस्थ रिपॉजिटरी में केवल मेरी परियोजनाओं के काम करने, परीक्षण किए गए संस्करण शामिल हैं।


3
क्या आप पाते हैं कि आपका रिमोट रिपॉजिटरी "कमिटेड बग इन लास्ट कमिट" टाइप कमिट्स से क्लू हो जाता है?
नौचमेल्स

4

कुछ चीजें हैं जो मैं जोड़ूंगा।

एक एक कार्यप्रवाह जो का विवेकपूर्ण उपयोग में आता है का सुझाव देना है टांड़ , जिसके साथ मानक के रूप में जहाजों TortoiseHg

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

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


4

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

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

यदि आप उन्हें वर्किंग कॉपी में रखते हैं, तो आने वाले परिवर्तन ठीक काम करेंगे, इसलिए आपको केवल आउटगोइंग परिवर्तन बनाने से बचने की आवश्यकता है, और इसका मतलब है कि उन्हें कमिट करने से बचें। यदि फ़ाइलें नई हैं, तो यह आसान है - बस hg addउन्हें मत करो। यदि वे पहले से ही ट्रैक हैं, तो आप विशेष रूप से उन्हें कमिट से बाहर कर सकते हैं hg commit --exclude foo.txt। यदि आपके पास बहिष्कृत करने के लिए बड़ी संख्या में फाइलें हैं, या उन्हें कई कमिट (जैसे स्थानीय कॉन्फ़िगरेशन फ़ाइल में स्थायी परिवर्तन के लिए) से बाहर रखा जाएगा , तो बहिष्करण एक्सटेंशन देखें

यदि आप परिवर्तनों को एक तरफ ले जाने के लिए तैयार हैं, तो आपके पास विकल्पों का एक और सेट है। सबसे सरल बात यह है hg diffकि फाइलों पर उनका वर्णन करने वाले एक पैच का उत्पादन करने के लिए उपयोग करें, जिसे आप कहीं सुरक्षित रखते हैं, फिर hg patch --no-commitउस पैच को फिर से लागू करने के लिए जब आप बदलाव चाहते हैं। आप शेल्व एक्सटेंशन , अटारी एक्सटेंशन , या किसी अन्य रिश्तेदार को स्थापित करके इसे चिकना बना सकते हैं । आप कतारों के विस्तार का उपयोग भी कर सकते हैं , लेकिन यह अखरोट को तोड़ने के लिए स्लेजहैमर का उपयोग कर रहा है। आप अभी भी बदलाव कर सकते हैं, फिर माता-पिता को वापस अपडेट कर सकते हैं और वहां अन्य काम कर सकते हैं, परिवर्तनों को एक स्थिर अनाम शाखा में छोड़ hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')सकते हैं - (हालांकि मैन्युअल रूप से करना आसान हो सकता है!)। फिर आपको ध्यान रखना होगा कि उस बदलाव को आगे न बढ़ाया जाए।


3

विकास की धाराओं को अलग करने के लिए दो बुनियादी तरीकों का उपयोग किया जाता है।

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

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


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

अपनी दूसरी गोली के लिए एक क्लोन, काम क्यों नहीं करते हैं, और केवल जब आपका काम खत्म होता है? MQ यहां जटिल लगता है
TheLQ

@ THELQ: यह भी काम करता है, लेकिन आधार रेपो से सीधे क्लोनिंग से अलग नहीं है। एमक्यू स्क्वैश एक कमिट में कर देगा।
पॉल नाथन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.