2011-11-17 8 views
8

मेरे पास एक Mercurial भंडार में कुछ पुराने प्रतिबद्ध संदेश हैं जिन्हें बदला जाना चाहिए (कुछ नए उपकरणों के लिए समायोजित करने के लिए)। मैं पहले से ही समझता हूं कि इस हैकिंग को मास्टर रिपोजिटरी पर किया जाना है और सभी स्थानीय भंडारों को फिर से क्लोन करना होगा, क्योंकि बाद के सभी परिवर्तनों की जांच भी बदलेगी।ब्रांचिंग के बाद Mercurial प्रतिबद्ध संदेश को संपादित करने के लिए कैसे?

मैं में व्यंजनों निम्नलिखित की कोशिश की "How to edit incorrect commit messages in Mercurial?", लेकिन MQ विस्तार के साथ मैं

X:\project>hg qimport -r 2:tip 
abort: revision 2 is the root of more than one branch 

और Histedit साथ त्रुटि संदेश पर अटक गया काफी इसी तरह

X:\project>hg histedit 2 
abort: cannot edit history that would orphan nodes 

समस्या लगती गए कि परिवर्तन के बाद बनाई गई शाखाएं हैं।

मैं देख सकता हूं कि अगर मैं पैच की सामग्री को बदलना चाहता हूं तो यह गन्दा हो जाएगा, लेकिन शायद एक ऐसा कामकाज है जिसे मैंने प्रतिबद्ध संदेश संपादित करने के लिए याद किया है?

+0

क्या आप वास्तव में * सुनिश्चित हैं कि आपको ऐसा करने की ज़रूरत है? मैं बहुत उत्सुक हूं कि टूलिंग परिवर्तन किस तरह से आपको करने के लिए मजबूर कर रहा है। –

+1

AFAIK, आप ब्रांचिंग के बाद एक प्रतिबद्ध संदेश संपादित करने के लिए एमक्यू या हिस्टएडिट का उपयोग नहीं कर सकते हैं और मुझे ऐसा करने में सक्षम किसी अन्य टूल से अवगत नहीं है।@ सर्गी अगर आप सावधानी से प्रश्न पढ़ते हैं तो आप देखेंगे कि आपके द्वारा प्रदान किया गया लिंक बिल्कुल मदद नहीं है, ओपी ने पहले से ही प्रस्तावित समाधान की कोशिश की है;) – krtek

+0

@krtek मैं इसे सावधानी से पढ़ता हूं। विशेष रूप से त्रुटि संदेश। इसलिए यदि उपयोगकर्ताओं के बीच पहले ही संग्रहित किया गया है तो यह सभी उपयोगकर्ताओं के लिए समस्या है। –

उत्तर

4

मैं ऐसा करने के लिए convert extension के एक हैक किए गए संस्करण का उपयोग करूंगा। एक्सटेंशन एचजी → एचजी रूपांतरण कर सकता है जो आपको लेखक और शाखा नामों को बदलने देता है। अभी तक प्रतिबद्ध संदेशों को बदलने के लिए समर्थन नहीं है, लेकिन आप इसे हैक कर सकते हैं।

def getcommit(self, rev): 
    ctx = self.changectx(rev) 
    parents = [p.hex() for p in self.parents(ctx)] 
    if self.saverev: 
     crev = rev 
    else: 
     crev = None 
    return commit(author=ctx.user(), date=util.datestr(ctx.date()), 
        desc=ctx.description(), rev=crev, parents=parents, 
        branch=ctx.branch(), extra=ctx.extra(), 
        sortkey=ctx.rev()) 

जो पुराने प्रतिबद्ध पढ़ने के लिए जिम्मेदार है:

विशेष रूप से, आप से getcommit विधि बदलना चाहिए।

desc=ctx.description() 

desc=adjust(ctx.description()) 

के लिए परिवर्तित करें और फिर फ़ाइल के शीर्ष पर adjust समारोह को लागू:

def adjust(text): 
    return text.upper() 
0

मैं कुछ इसी तरह की जरूरत तो मैं एक feature request दायर किया।

2

यदि --amend और push --force का उपयोग करने के कारण ये आकस्मिक/डुप्लिकेट शाखाएं हैं तो उन्हें पहले स्ट्रिप करें और फिर 'हिस्टिटिट' आज़माएं और फिर बिटबकेट पर केंद्रीय रेपो को मिटा दें;

भंडार लॉग निरीक्षण करें और शाखाओं के लिए लग रही है, तो आप GraphlogExtension जो आप पहली बार सक्षम करना होगा उपयोग कर सकते हैं:

# hg log -G | more 
... 
o changeset: 43:c2fcca731aa5 
| parent:  41:59669b9dfa4a 
| user:  Daniel Sokolowski (https://webdesign.danols.com) 
| date:  Tue Aug 27 20:14:38 2013 -0400 
| summary:  Progress snapshot: major content text and model instance .. 
... 
| o changeset: 42:c50724a6f1c6 
|/ user:  Daniel Sokolowski (https://webdesign.danols.com) 
| date:  Tue Aug 27 20:14:38 2013 -0400 
| summary:  Progress snapshot: major content text and model instance ... 
| 
o changeset: 41:59669b9dfa4a 
| user:  Daniel Sokolowski (https://webdesign.danols.com) 
... 

MqExtension सभी शाखाओं को सक्षम और पट्टी जिसके बाद मेरे लिए काम किया प्रयास करें।

# hg strip --no-backup 42:c50724a6f1c6 
# hg strip --no-backup 45:3420dja12jsa 
... 

तो बदलाव की जरूरत 'ड्राफ्ट' के लिए प्रतिबद्ध (Phases देखें) और फिर से रन 'histedit' और सभी अब अच्छा होना चाहिए।

# hg histedit 14:599dfa4a669b 
abort: cannot edit immutable changeset: b7cfa2f28bde 
# hg phase -f -d 14:599dfa4a669b 
# hg hsitedit 14:599dfa4a669ba