2011-11-17 30 views
8

Tôi có một số thư cam kết cũ trong một kho lưu trữ Mercurial nên được thay đổi (để điều chỉnh cho một số công cụ mới). Tôi đã hiểu rằng việc hack này phải được thực hiện trên kho lưu trữ chính và tất cả các kho lưu trữ cục bộ sẽ phải được nhân bản lại, bởi vì tổng kiểm tra của tất cả các thay đổi tiếp theo cũng sẽ thay đổi.Làm thế nào để chỉnh sửa thông báo cam kết Mercurial sau khi phân nhánh?

Tôi đã thử làm theo các công thức nấu ăn trong "How to edit incorrect commit messages in Mercurial?", nhưng với phần mở rộng MQ tôi đã bị mắc kẹt trên thông báo lỗi

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

và với Histedit khá tương tự

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

Vấn đề có vẻ là rằng đã có các nhánh được tạo ra sau khi changeset.

Tôi có thể thấy nó sẽ trở nên lộn xộn như thế nào nếu tôi muốn thay đổi nội dung của bản vá, nhưng có lẽ có một cách giải quyết mà tôi đã bỏ lỡ để chỉnh sửa thông điệp cam kết?

+0

Bạn * thực sự * chắc chắn bạn cần thực hiện việc này? Tôi khá tò mò những gì sắp xếp của công cụ thay đổi là buộc bạn phải thực hiện điều này. –

+1

AFAIK, bạn không thể sử dụng MQ hoặc HistEdit để chỉnh sửa thông báo cam kết sau khi phân nhánh và tôi không biết một công cụ khác có thể làm điều đó[email protected] Sergey nếu bạn đọc kỹ câu hỏi, bạn sẽ thấy rằng liên kết mà bạn cung cấp không có ích gì cả, OP đã thử giải pháp được đề xuất;) – krtek

+0

@krtek Tôi đọc kỹ nó. đặc biệt là thông báo lỗi. vì vậy nếu kho lưu trữ đã được nhân bản giữa những người dùng thì đó là vấn đề đối với tất cả người dùng. –

Trả lời

4

Tôi sẽ sử dụng phiên bản bị hack của convert extension để thực hiện việc này. Tiện ích có thể thực hiện các chuyển đổi hg → hg cho phép bạn thay đổi tên tác giả và tên chi nhánh. Chưa có hỗ trợ cho việc thay đổi thông báo cam kết, nhưng bạn có thể hack nó.

Cụ thể, bạn nên thay đổi phương pháp getcommit từ:

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()) 

đó là chịu trách nhiệm cho việc đọc các cam kết cũ. Thay đổi

desc=ctx.description() 

để

desc=adjust(ctx.description()) 

và sau đó thực hiện các chức năng adjust ở phía trên cùng của tập tin:

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

Nếu đây là các chi nhánh ngẫu nhiên/trùng lặp do sử dụng --amendpush --force thì hãy loại bỏ chúng trước và thử 'histedit' lần nữa sau đó xóa repo trung tâm trên bitbucket; thử những điều sau đây mà làm việc cho tôi:

Kiểm tra nhật ký kho và tìm kiếm các chi nhánh, bạn có thể sử dụng GraphlogExtension mà bạn sẽ phải kích hoạt đầu tiên:

# 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) 
... 

Kích hoạt tính năng MqExtension và tước tất cả các chi nhánh.

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

Nếu thay đổi cần cam kết để 'dự thảo' (xem Phases) và chạy lại 'histedit' và tất cả nên được tốt ngay bây giờ.

# hg histedit 14:599dfa4a669b 
abort: cannot edit immutable changeset: b7cfa2f28bde 
# hg phase -f -d 14:599dfa4a669b 
# hg hsitedit 14:599dfa4a669ba 
Các vấn đề liên quan