2009-04-29 12 views
8

Mercurial के साथ विलय करते समय, यह एक समय में विवादित फ़ाइलों को विलय करना चाहता है जो बड़े मर्ज सेट पर उत्पादक वर्कफ़्लो नहीं है। इसके बजाय, मैं जो करना चाहता हूं वह दोनों सिरों के पूरे परिवर्तनों को मर्ज करना है (जैसे कि केडीएफ 3 का उपयोग 2 सिर को अलग करना)। मेरे लिए जो सीधा लगता है लेकिन मैं यह नहीं समझ सकता कि इसे कैसे प्राप्त किया जाए।Mercurial के साथ फ़ाइल-दर-फ़ाइल आधारित विलय के बजाय मैं एक परिवर्तन आधारित विलय कैसे कर सकता हूं?

अब तक, सबसे नज़दीक मैं प्राप्त कर सकता हूं, सामान्य तरीके से विलय के माध्यम से जाना है, सभी संघर्षों को अनसुलझा (एक समय में एक फ़ाइल ...) छोड़ दें, और फिर hg vdiff -rHead1 -rHead2 - लेकिन vdiff (kdiff3 का उपयोग करके) प्रतीत होता है कि उपकरण को आउटपुट डीआईआर (वर्तमान कामकाजी डीआईआर) पास करने के विकल्प नहीं हैं और इसके बजाय आउटपुट डीआईआर के साथ एक tempdir के रूप में लॉन्च होता है (संभवतः -ओ जवाब है?)।

मुझे इसे एक और तरीका रखने दो - मैं अपने कामकाजी निर्देशिका में दो सिर मर्ज करने के लिए केडीएफ का उपयोग करना चाहता हूं। मैं अपने कामकाजी डीआईआर में परिणाम चाहता हूं कि मैं अपना विलय कर सकूं।

मुझे कुछ स्पष्ट याद आना चाहिए, मैं ऐसा नहीं कर सकता जो इसे करना चाहता है।

+0

मैं प्रश्न के phrasing द्वारा थोड़ा उलझन में था। Mercurial में परिवर्तन इतिहास के अपरिवर्तनीय टुकड़े हैं; यहां IIUC आप फ़ाइल-दर-फ़ाइल के बजाय फ़ाइलों के एक पूरे पेड़ को मर्ज करना चाहते हैं। –

उत्तर

0

ui.merge सेट करने का प्रयास करें। अधिक जानकारी के लिए this page देखें।

+0

शायद मेरा प्रश्न पर्याप्त स्पष्ट नहीं है - ui.merge सेटिंग के बावजूद, मुझे अभी भी एक संपूर्ण परिवर्तनसेट बनाम परिवर्तन विलय के बजाय Mercurial से फ़ाइल-पर-एक-बार विलय मिल जाएगा (जब तक कि मैं याद नहीं कर रहा हूं कुछ?) – jsaylor

+0

मैं अभी भी थोड़ा उलझन में हूं - क्या आपको अभी भी एक बार में विवादित फ़ाइलों को दिखाने के लिए केडीफ़ की आवश्यकता नहीं होगी? या मैन्युअल हस्तक्षेप के बिना यह आपके सभी संघर्षों को हल कर सकता है? –

1

मुझे लगता है कि this आपके प्रश्न का उत्तर दें।

+0

अच्छा लेख, लेकिन मैं अभी भी केवल सिर मर्ज करना चाहता हूं (मध्य शाखा में परिवर्तन नहीं)। मेरा सवाल इस बिंदु पर पूरी तरह स्पष्ट नहीं था। – jsaylor

3

मैंने कुछ दिन पहले irc.freenode.net पर #mercurial पर प्रश्न रिले किया था। mpm (मर्कुरियल के लेखक) ने एक उत्तर दिया (यह केवल आधा जवाब था, इसलिए मैंने इसे तुरंत यहां पास नहीं किया)। उन्होंने कहा कि कोई ऐसा कुछ करने में सक्षम हो सकता है जहां आप Mercurial फ़ाइलों को स्वचालित रूप से मर्ज करते हैं (और <<<< और >>>> मार्करों को विलय करें जहां विवाद हैं)।

फिर एक मार्गे टूल का उपयोग करें जो इन मार्करों के बारे में जानता है: यह आपको फाइल के आधार पर फाइल पर इसे करने के बजाए एक बार में सभी को हल करने देगा। एक शुरुआती बिंदु merge tool configuration पर पृष्ठ होगा। यह बताते हैं कि

 
[ui] 
merge = internal:merge 

मर्ज मार्करों inserte मर्क्युरियल कर देगा। यहां मैंने दो फाइलें x.txt और y.txt बनाकर इसका परीक्षण किया, जिसे मैंने दो क्लोन में विरोधाभासी परिवर्तनों के साथ संशोधित किया। मर्ज बस दिया:

 
% hg merge 
merging x.txt 
warning: conflicts during merge. 
merging x.txt failed! 
merging y.txt 
warning: conflicts during merge. 
merging y.txt failed! 
0 files updated, 0 files merged, 0 files removed, 2 files unresolved 
use 'hg resolve' to retry unresolved file merges or 'hg up --clean' to abandon 

सभी फाइलें प्रोसेस किया गया एक ही बार में, मैं फ़ाइल प्रति कुछ भी पुष्टि करने के लिए की तरह आप का वर्णन नहीं था।

% cat x.txt 
foo 
<<<<<<< local 
hehe 
======= 
foobar 
>>>>>>> other 

अगले कदम के लिए एक उपकरण है कि इस तरह फाइलों के साथ एक निर्देशिका वृक्ष लेने के लिए और आप उन्हें हल करने दे सकते हैं मिल रहा है:

फ़ाइलें अब इस तरह मार्करों विलय होते हैं। मैंने kdiff3 को देखा, लेकिन यह पता नहीं लगा कि अकेले एक फ़ाइल पर काम करने के लिए इसका उपयोग कैसे किया जाए, यह फ़ाइलों/निर्देशिकाओं के जोड़े की तुलना करने पर बहुत ध्यान केंद्रित करता है।

मुझे यकीन नहीं है कि यह आधा जवाब आपको कितना मदद करता है - शायद आप इस बिंदु पर भी अटक गए हैं? लेकिन मुझे उम्मीद है कि यह उन लोगों की मदद कर सकता है जो मर्ज मार्करों को सभी फाइलों में डालना चाहते हैं और फिर हाथों से संघर्ष को हल कर सकते हैं।

+0

आप अनसुलझे फ़ाइलों को चारों ओर चिपकाने की धारणा पर करीब थे। मुझे लगता है कि मैं एक और पूर्ण उत्तर के साथ आया, लेकिन इस रणनीति का उपयोग करके, मैंने अभी यहां पोस्ट किया है। – jsaylor

+0

मुझे बहुत खुशी है कि कम से कम आपको इसे प्राप्त करने का एक तरीका मिला, भले ही यह एक सही तरीका न हो। कोई भी काम प्रवाह को बेहतर बनाने के लिए एक विस्तार कर सकता है, लेकिन मैं बहुत कम करता हूं कि मैं इसे लिख नहीं पाऊंगा :-) –

0

लगता है कि आप extdiff आदेश हैं: मेरी ~/

मैं इन किया है।hgrc (मैं मिलकर एक हो जाना पसंद करते हैं, लेकिन आप इसे kdiff3 को बदल सकते हैं, आदि)

[extensions] 
hgext.extdiff = 

[extdiff] 
# add new command called meld, runs meld (no need to name twice) 
cmd.meld = 
extdiff साथ

अपने मर्ज के -ओ साथ आपके कार्य निर्देशिका में पाए जाते हैं, और इसके अलावा आप पास कर सकते हैं अपने diff कार्यक्रम के लिए किसी भी अतिरिक्त पैरामीटर:

$ hg help extdiff 

एचजी extdiff [ऑप्ट] ... [FILE] ...

उपयोग बाहरी कार्यक्रम भंडार (या चयनित फ़ाइलों) diff को

Show differences between revisions for the specified files, using 
an external program. The default program used is diff, with 
default options "-Npru". 

To select a different program, use the -p option. The program 
will be passed the names of two directories to compare. To pass 
additional options to the program, use the -o option. These will 
be passed before the names of the directories to compare. 

When two revision arguments are given, then changes are 
shown between those revisions. If only one revision is 
specified then that revision is compared to the working 
directory, and, when no revisions are specified, the 
working directory files are compared to its parent. 

विकल्प:

-p --program तुलना तुलना कार्यक्रम के लिए
-ओ --option पास विकल्प को चलाने के लिए कार्यक्रम
-r --rev संशोधन
मैं नाम शामिल --include दिए गए पैटर्न से मेल खाते
-X --exclude दिया पैटर्न से मेल खाते के नाम को बाहर

+0

मेरी समस्या यह है कि अभी भी फ़ाइल द्वारा फ़ाइल है, और मुझे एक संपूर्ण परिवर्तन नहीं देता है बनाम परिवर्तन विलय दृष्टिकोण। – jsaylor

4

मैं एक समाधान को प्राप्त होता है कि मैं क्या चाहते हैं, लेकिन मैं अब भी लगता है के साथ आया था जैसे यह एक झुकाव है।

  • 2 सिर के साथ एक खाली कामकाजी डीआईआर के साथ शुरू करें: मेरा और उनका।
  • अद्यतन खान को dir काम कर रहे:
    hg update [My head's rev here]
  • मर्ज करने के लिए, लेकिन सभी फ़ाइलें मर्क मर्ज उपकरण लॉन्च किए बिना स्वचालित रूप से संभाल सकते हैं असफल और जब संघर्ष में रखना "मेरा" फ़ाइलें:
    hg --config "ui.merge=internal:fail" merge

https://www.mercurial-scm.org/wiki/TipsAndTricks#head-9f405488b6d3b3d092a09aafa28db515ba44c742 देखें कि कैसे विलय/असफल विवरण।

अब मेरे पास एक कामकाजी डीआईआर है जितना ऑटो पता लगा सकता है, लेकिन किसी भी बकाया फाइलें अभी भी खान से छूटी नहीं हैं। (प्रयोग एचजी संकल्प -l वर्तमान फ़ाइलों के मर्क्युरियल के संकल्प स्थिति देखने के लिए)

  • अब मैं उनका सिर जो मुझे उच्च स्तर प्रदान करता खिलाफ अपने काम करने निर्देशिका vdiff कर सकते हैं, changeset करने वाली changeset मर्ज है कि मैं देख रहा था के लिये।

hg vdiff -r [Theirs head's rev here]

नोट: यदि आप अपने vdiffs के लिए WinMerge उपयोग कर रहे हैं, तो यकीन है कि यह एक विकल्प के रूप में एक/r स्विच जो एक उपनिर्देशिका तुलना और ऐसा हो जाए - WinMerge config उपयोग करने के लिए सेट किया गया है वृक्ष-दृश्य - एक महान वृक्ष तुलना देगा। Mercurial.ini से:

[extdiff]
cmd.vdiff = C:\Program Files\WinMerge\WinMergeU.exe
opts.vdiff = /e /ub /r /dl other /dr local

अब मैं पूरी निर्देशिका जो अनसुलझे फ़ाइलें शामिल काम करते हैं और आवश्यक के रूप में परियोजना विस्तृत परिवर्तन कर सकते हैं (। यानी हो सकता है एक फ़ाइल को हल अतिरिक्त परिवर्तन किसी अन्य रूप में की आवश्यकता है)।

  • जब किया गया Merc के लिए हल की गई सभी फ़ाइलों को चिह्नित करने के लिए संकल्प का उपयोग करें और फिर प्रतिबद्ध करें।
    hg resolve -m

वाह! उम्मीद है कि यह किसी और की मदद करता है!

+0

वास्तव में एक आदर्श की तरह लगता है हालांकि वास्तव में क्लोगी समाधान :) आपको इसे अपने उत्तर के रूप में स्वीकार करना चाहिए। –

+0

(टक्कर) अब, इस उत्तर को स्वीकार करें ... –

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