2011-12-16 15 views
11

हमने हाल ही में हमारे भंडार में निर्देशिका के hg copy किया है। हमने सोचा कि cp -a और hg add जैसा कुछ है और शायद किसी भी तरह से ध्वजांकित करें कि इस फ़ाइल को रेपो के अंदर दूसरी फ़ाइल से कॉपी किया गया है (इसलिए hg annotate मूल कम्यूटर दिखाता है)। लेकिन अब ऐसा लगता है कि hg copy उससे अधिक या अलग सामान करता है। मुझे वास्तव में वास्तव में काम करने की प्रतिलिपि नहीं मिल सका। तो:एचजी प्रतिलिपि क्या करती है?

  • बिल्कुल hg copy क्या करता है और क्या विशेष उपचार भविष्य में इस कारण है?
  • यदि यह हमारे मामले के लिए "गलत चीज़ (टीएम)" करने के लिए बाहर निकलता है, तो मैं फ़ाइल को किसी अन्य फ़ाइल की प्रतिलिपि बनाने के रूप में कैसे खोलूं?

(यह सवाल मर्क्युरियल मेलिंग सूची पर कहा गया था, तो आप follow the original thread को भी कर सकते हैं।)

+0

आप [फ़ाइलों की प्रतिलिपि] [http://tortoisehg.bitbucket.org/hgbook/1.7/mercurial-in-daily-use.html#chap:daily.copy) भी पढ़ सकते हैं [Mercurial: Definitive Guide ] (http://tortoisehg.bitbucket.org/hgbook/1.7/) पुस्तक। – Matus

उत्तर

14
  • बिल्कुल एचजी प्रति क्या करता है क्या और क्या विशेष उपचार भविष्य में इस कारण है?

यह नई फाइलें जोड़ता है और उन्हें पुरानी फाइलों की प्रतियों के रूप में चिह्नित करता है। क्योंकि वे प्रतियां हैं, मूल फ़ाइल में किए गए बदलाव को प्रतिलिपि में विलय कर दिया जाएगा। समय बाएं से दाएं प्रवाह:

(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt) 
     \     /
     (hg copy a.txt b.txt) 
  • यदि ऐसा पाया जाता हमारे मामले के लिए 'गलत बात (टीएम)' ऐसा करने के लिए, मैं कैसे फ़ाइल unflag एक और फ़ाइल की एक प्रतिलिपि beeing के रूप में करते हैं ?

यह तंत्र केवल विलय करते समय ही चलता है। b.txt सामान्य पूर्ववर्ती संशोधन (उपरोक्त ग्राफ में init) में मौजूद नहीं है, तो Mercurial यह देखने के लिए पीछे की ओर एक खोज करें कि b.txt कहीं और से कॉपी किया गया है या नहीं।

हमें संक्षिप्त रूप में ऊपर ग्राफ रहें:

(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge) 
    \   /        /
    (copy a b) --/------- (edit b) ------------------/ 

सवाल यह है कि अंतिम मर्ज किया जाता है। आम पूर्वज बिंदु अब copy a b नोड है और यहां a और b दोनों मौजूद हैं। इसका मतलब है कि कॉपी के लिए कोई खोज नहीं होगी! तो a पर दूसरा संपादन b में विलय हो जाएगा।

दोबारा जांच करने के लिए, मैं इसे बाहर की कोशिश की:

$ hg init 
$ echo a > a 
$ hg add a 
$ hg commit -m init 
$ hg copy a b 
$ hg commit -m "copy a b" 

यह प्रति भी थी, b अब a केवल शामिल हैं।

$ hg update 0 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 
$ echo aa >> a 
$ hg commit -m "edit a" 
created a new head 
$ hg merge 
merging a and b to b 
0 files updated, 1 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 
$ hg commit -m "a edit copied to b" 

यह पहली मर्ज था और a को संपादित b में नकल कर दिया गया है

$ cat b 
a 
aa 

अब हम समानांतर में परिवर्तन करें:

$ echo aaa >> a 
$ hg commit -m "edit a again" 
$ hg update 3 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
$ echo bbb >> b 
$ hg commit -m "edit b" 
created new head 
$ hg merge 
1 files updated, 0 files merged, 0 files removed, 0 files unresolved 
(branch merge, don't forget to commit) 

आगे नहीं किया नकल कर रहे हैं :

$ cat a 
a 
aa 
aaa 
$ cat b 
a 
aa 
bbb 

इसे अक्षम करने के लिए ... आप वास्तव में पहचान को स्पष्ट रूप से अक्षम नहीं कर सकते हैं। लेकिन जैसा कि मैंने उपरोक्त चित्रित करने की आशा की है, यह पहले विलय के बाद आपको "परेशान" नहीं करेगा।

यदि पहला विलय एक समस्या है, तो आप hg resolve --tool internal:local का उपयोग से पहले विलय शुरू करने से पहले फ़ाइलों को अपने राज्य में रीसेट करने के लिए कर सकते हैं। तो

$ hg resolve --tool internal:local b 

साथ हम सिर्फ a साथ एक पंक्ति से युक्त करने के लिए वापस b लाया जा सकता था।

+0

क्षमा करें, ** ** * * * * में विलय हेड पर कॉपी-परिवर्तन की पुष्टि नहीं कर सकता है। '> एचजी संस्करण Mercurial वितरित एससीएम (संस्करण 2.0.1)' –

+0

पहले विलय में भी नहीं? कृपया [email protected] लिखें ताकि हम इसे पूरी तरह से चर्चा कर सकें, यह इन छोटी टिप्पणी बक्से से काफी बेहतर है :) –

+0

"पहले विलय में भी नहीं?" - हाँ। ई-मेल नोट किया गया, संदेश भेजा जाएगा (लॉग के साथ) –

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