यह एक सर्वोत्तम अभ्यास प्रश्न है, और मुझे उम्मीद है कि इसका जवाब "यह निर्भर करता है"। मैं बस अधिक वास्तविक दुनिया परिदृश्य और वर्कफ़्लो सीखने की उम्मीद करता हूं।Mercurial के साथ समवर्ती विकास का प्रबंधन कैसे करें?
सबसे पहले, मैं एक ही परियोजना के लिए अलग-अलग बदलावों के बारे में बात कर रहा हूं, इसलिए कोई सबप्रो कृपया नहीं।
मान लें कि आपके पास एचजी भंडार में आपका कोड बेस है। आप एक जटिल नई सुविधा ए पर काम करना शुरू करते हैं, फिर आपके विश्वसनीय परीक्षक द्वारा एक जटिल बग बी की सूचना दी जाती है (आपके पास परीक्षक हैं, है ना?)।
यह अगर बी (के लिए ठीक) ए पर निर्भर करता है आप simlply सीआई एक तो बी
ciमेरा प्रश्न है, जब वे स्वतंत्र (या कम से कम यह अब लगता है) कर रहे हैं कि क्या करना है है तुच्छ है।
मैं निम्नलिखित तरीके के बारे में सोच सकते हैं:
- उपयोग अनाम या नामित शाखाओं, या बुकमार्क बी के लिए एक अलग क्लोन का प्रयोग करें, एक ही भंडार में।
- एमक्यू का उपयोग करें (ए के शीर्ष पर बी पैच के साथ)।
- ब्रांडेड एमक्यू का उपयोग करें (मैं बाद में समझाऊंगा)।
- उपयोग कई MQ (1.6 के बाद से)
1 और 2 एक excellent blog द्वारा कवर किया जाता द्वारा @Steve Losh एक slightly related question से जुड़े।
अन्य विकल्पों में से 1 का एक बड़ा लाभ यह है कि जब आप एक चीज पर काम करने से स्विच करते हैं तो किसी भी पुनर्निर्माण की आवश्यकता नहीं होती है, क्योंकि फाइलें शारीरिक रूप से अलग और स्वतंत्र होती हैं। तो यह वास्तव में एकमात्र विकल्प है, उदाहरण के लिए, ए और/या बी एक हेडर फ़ाइल को छूता है जो त्रि-राज्य बुलियन को परिभाषित करता है और हजारों सी फाइलों द्वारा शामिल किया जाता है (मुझे नहीं बताएं कि आपने ऐसा विरासत कोड नहीं देखा है आधार)।
3 शायद सबसे आसान (सेटअप और ओवरहेड के मामले में) है, और यदि बी एक छोटा और/या तत्काल फिक्स है तो आप ए और बी के ऑर्डर को फ्लिप कर सकते हैं। हालांकि अगर ए और बी एक ही फाइल को छूता है तो यह मुश्किल हो सकता है। पैच शिकारी को ठीक करना आसान है जो लागू होने में विफल रहे हैं यदि ए और बी परिवर्तन एक ही फ़ाइल में ऑर्थोगोनल हैं, लेकिन अवधारणात्मक रूप से यह अभी भी थोड़ा जोखिम भरा है।
4 आपको चक्कर आ सकता है लेकिन यह सबसे शक्तिशाली और लचीला और स्केलेबल तरीका है। मैं -c
के साथ डिफ़ॉल्ट रूप से काम करता हूं क्योंकि मैं कार्य-प्रगति पैच को चिह्नित करना चाहता हूं और उन्हें पुश/पुल करना चाहता हूं, लेकिन यह समझने के लिए एक वैचारिक छलांग लगाती है कि आप एमक्यू रेपो में भी शाखा बना सकते हैं।यहां दिए गए कदम हैं (mq = hg --mq):
hg qnew bugA
; ए के लिए परिवर्तन करें;hg qref
mq branch branchA; hg qci
hg qpop; mq up -rtip^
hg qnew bugB
; बी के लिए परिवर्तन करें;hg qref
mq branch branchB; hg qci
- एक फिर से इस पर काम करने के लिए:
hg qpop; mq up branchA; hg qpush
यह इतने सारे कदम उठाने के लिए पागल लगता है, और जब भी आप काम आप करना चाहिए hg qci; hg qpop; mq up <branch>; hg qpush
स्विच करना होगा। लेकिन इस पर विचार करें: आप एक ही भंडार में कई नामित रिहाई शाखाएं हैं, और आप उन सभी के लिए एक ही समय में कई परियोजनाओं और बग फिक्स पर काम करने के (आप बेहतर गारंटी इस तरह का काम के लिए बोनस मिल चाहते हैं) की जरूरत है। आप अन्य दृष्टिकोणों के साथ बहुत जल्द खो देंगे।
अब मेरे साथी एचजी प्रेमियों, वहाँ अन्य/बेहतर विकल्प हैं?
(अद्यतन) qqueue
लगभग # 4 अप्रचलित बनाता है। स्टीव लोश का सुरुचिपूर्ण वर्णन here देखें।
जैसा कि यह स्पष्ट नहीं है, मैं एक एचजी-आधारित दृष्टिकोण मांग रहा हूं। लेकिन अगर आप मुझे एक और एससीएम से एक ही कमांड दे सकते हैं जो सभी मामलों में काम करता है, तो मैं एचजी को हटा रहा हूं। इसे एक चुनौती पर विचार करें, git aficionados। –
मुझे लगता है कि आपको अपनी समस्या को थोड़ा बेहतर तरीके से निर्दिष्ट करने की आवश्यकता है। यह सभी मामलों के लिए क्यों काम नहीं करता है: बग ए को ठीक करें, अपना पैच करें, बग बी को ठीक करें, अपने पैच को प्रतिबद्ध करें? – Karmastan
क्षमा करें कि मैंने थोड़ा सा स्पॉस्की-इशली रैंप किया। मैंने एक साधारण मामले का उल्लेख किया: "यदि बी एक छोटा और/या तत्काल फिक्स है"। एक और यथार्थवादी स्थिति यह है कि ए और बी दोनों लंबी परियोजनाएं हैं जो बहुत सी प्रतिबद्धताओं और पुनरावृत्तियों को लेती हैं। अगर आपके पास मेरी कंपनी की तरह कोड समीक्षा प्रक्रिया है, तो हो सकता है कि आपने ए समाप्त कर लिया हो और इसे समीक्षा के लिए भेज दिया हो, और आप वहां पर बैठे बैठे अपने अंगूठे को समीक्षाकर्ताओं के लिए इंतजार नहीं कर सकते हैं, इसलिए आपको इस बीच बी को चुनना होगा । लेकिन फिर समीक्षक आपके कोड को विस्फोट कर सकता है और आपको उसे खुश करने के लिए बदलाव करना होगा। तो रास्ते में अनगिनत परियोजना स्विच हो सकते हैं। –