Mercurial में सर्वोत्तम प्रथाओं: शाखा बनाम क्लोन, और आंशिक विलय?




merge branch (2)

... तो मुझे Mercurial ( add , commit , diff ) के साथ सरल सामानों में उपयोग किया गया है और .hgignore फ़ाइल (yay!) के बारे में पता चला है और शाखाओं ( branch , update -C बीच बनाने और स्विच करने की लटका प्राप्त कर ली है update -C )।

मेरे पास दो प्रमुख प्रश्न हैं:

  1. अगर मैं शाखा "शाखा 1" में हूं और मैं कुछ में खींचना चाहता हूं लेकिन शाखा "शाखा 2" से सभी बदलाव नहीं, तो मैं यह कैसे करूँगा? विशेष रूप से यदि सभी परिवर्तन एक उपनिर्देशिका में हैं। (मुझे लगता है कि मैं सिर्फ पूरे भंडार को क्लोन कर सकता हूं, फिर मेरे संपादन को चुनने और चुनने के लिए तुलना से परे एक निर्देशिका-मर्ज टूल का उपयोग करें। ऐसा लगता है कि एक फ़ाइल या एक निर्देशिका में बदलावों को अलग करने के लिए एक तरीका होना चाहिए।)

  2. update -C साथ शाखाओं के बीच स्विचिंग बहुत आसान लगता है, मुझे आश्चर्य है कि मैं clone का उपयोग क्यों परेशान करूंगा। मैं केवल कुछ कारणों के बारे में सोच सकता हूं (नीचे देखें) - क्या मुझे कुछ अन्य कारण याद आ रहे हैं?

    ए। अगर मुझे एक बार में दो संस्करणों / शाखाओं पर कार्य करने की आवश्यकता है (उदाहरण के लिए एक प्रदर्शन-मीट्रिक diff)

    ख। बैकअप के लिए (भौतिक रूप से अलग-अलग स्थान पर नेटवर्क ड्राइव पर भंडार clone करें)

    सी। चुनने के लिए और ऊपर बताए गए विलय का चयन करें।


प्रश्न 1 के लिए, आपको "परिवर्तन" से क्या मतलब है इसके बारे में थोड़ा स्पष्ट होना चाहिए। इनमें से कौन सा मतलब है:

  1. "मैं इस में एक अलग शाखा में बदलावों के कुछ, लेकिन सभी नहीं खींचना चाहता हूं।"
  2. "मैं इस में एक अलग शाखा में फाइलों के कुछ नवीनतम संस्करणों को खींचना चाहता हूं, लेकिन सभी नहीं।"

यदि आपका मतलब आइटम 1 है, तो आपको Transplant एक्सटेंशन, विशेष रूप से कुछ बदलावों को चेरीपिक करने का विचार देखना चाहिए।

यदि आपका मतलब आइटम 2 है, तो आप निम्न कार्य करेंगे:

  • उस शाखा में अपडेट करें जिसमें आप परिवर्तनों को खींचना चाहते हैं।
  • hg revert -r <branch you want to merge> --include <files to update> उपयोग करें hg revert -r <branch you want to merge> --include <files to update> उन फ़ाइलों की सामग्री को दूसरी शाखा में बदलने के लिए hg revert -r <branch you want to merge> --include <files to update> करने के लिए hg revert -r <branch you want to merge> --include <files to update> करें।
  • एक नए बदलाव के रूप में शाखा में उन परिवर्तनों को hg commit लिए hg commit का प्रयोग करें।

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


मेरे पास आपके लिए एक और विकल्प है: Mercurial queues।

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





branch