2010-04-07 14 views
12

ठीक है, इसलिए हमने हाल ही में एसवीएन से Mercurial में परिवर्तित कर दिया।
हम सामान्य रूप से TortoiseHG का उपयोग कर रहे हैं।

हमारे एक भंडार में हमारे पास हमारी सभी परियोजनाएं हैं, सी ++/.NET/ASP। हमारे पास लगभग 100 परियोजनाएं हैं, सभी सामान्य पुस्तकालय परियोजनाओं का उपयोग कर रही हैं।

तो यह प्रत्येक परियोजना के लिए कई रेपो के बनाने के लिए काफी मुश्किल काम होगा।

अब, हम default शाखा है, और मान लीजिए कि branchA करते हैं।
मैं BranchA पर काम कर रहा हूँ और यह करने के लिए अपने uber परिवर्तन जोड़ने, और मैं एक आम पुस्तकालय बदलने के लिए, मान लीजिए कि एक विस्तार विधि
Mercurial विलय केवल कुछ बदलाव

मैं branchA और default को यह वादा करना चाहते हैं, मैं इस बारे में कैसे जाना होगा है?

हालांकि, मैं नहीं चाहिए branchA से मेरे सभी परिवर्तनों default में मर्ज करने के लिए, और मैं default

से सभी अन्य परिवर्तन नहीं करना चाहता उम्मीद है कि इस के लिए पर्याप्त जानकारी है!

+2

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

+0

@ पीटर ग्राहम मेगा-रेपो का उपयोग बहुत बड़ी कंपनियों जैसे [फेसबुक] (https://code.facebook.com/posts/218678814984400/scaling-mercurial-at-facebook/) में अच्छी सफलता के साथ किया जाता है। – Fowl

उत्तर

11

इस समस्या से बचने का एक तरीका है। आप make all your changes on separate feature branches from some baseline revision, आमतौर पर अंतिम रिलीज या कुछ अन्य स्थिर बिंदु S का टैग कर सकते हैं।

इस तरह, आपके परिवर्तन X अपनी ही शाखा है जो अन्य शाखाओं (विलीन हो जाती है M1 और M2) के साथ शुरू करने अवांछित changesets बिना मर्ज किया जा सकता पर होगा:

-----S--o----o---M1----o---> default 
    |  /
    |---------X feature or bugfix 
    |   \ 
    \--o---o----M2----o-----> BranchA 

यह केवल सामान्य hg merge संचालन की आवश्यकता है; पैच की कोई ज़रूरत नहीं है, Transplant या MQ

-1

आप "चेरी उठा" का वर्णन या एक "आंशिक मर्ज" जो वर्तमान में मर्क्युरियल साथ संभव नहीं है कर रहे हैं। आपके पास कुछ विकल्प हैं:

  • अपने सामान्य कोड को अपने स्वयं के भंडार में अलग करें।
  • आपके सामान्य कोड में किए गए परिवर्तनों का एक अंतर उत्पन्न करें, और इसे default शाखा पर लागू करें।
+0

डाउनवॉटेड क्योंकि मर्कुरियल चेरी पिकिंग का समर्थन करता है। Mercurial इसे 'प्रत्यारोपण' कहते हैं, और यह प्रत्यारोपण विस्तार का उपयोग कर उपलब्ध है। –

3

क्या चाहते विलय नहीं है, लेकिन चेरी पिकअप है। आप https://www.mercurial-scm.org/wiki/TransplantExtension का उपयोग कर सकते हैं, लेकिन वहां वर्णित जटिलताओं के बारे में जागरूक रहें।

5

आप अपने स्वयं के भंडार में आम के कोड को अलग हैं, तो आप प्रत्येक परियोजना में शामिल करने subrepos उपयोग कर सकते हैं।

वैसे, मैं प्रत्येक परियोजना के लिए एक अलग भंडार रखने की अनुशंसा करता हूं, खासकर यदि बहुत सारे हैं।

22

बस चीज़ें थोड़ी अपडेट रखने के लिए: वहाँ है graft command जो मर्क्युरियल में चेरी पिकिंग लागू करता है।

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

संबंधित मुद्दे