2011-11-17 15 views
8

Mam kilka starych wiadomości zatwierdzenia w repozytorium Mercurial, które powinny zostać zmienione (aby dostosować się do niektórych nowych narzędzi). Rozumiem już, że to hackowanie musi zostać wykonane na głównym repozytorium, a wszystkie lokalne repozytorium będą musiały zostać ponownie sklonowane, ponieważ zmienione zostaną także sumy kontrolne wszystkich kolejnych zestawów zmian.Jak edytować wiadomość zatwierdzania Mercurial po rozgałęzieniu?

Próbowałem następujących receptur w „How to edit incorrect commit messages in Mercurial?”, ale z rozszerzeniem MQ utknąłem na komunikat o błędzie

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

iz Histedit dość podobnie

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

Problem wydaje się być że istniały gałęzie utworzone po zmianie zestawu.

Widzę, jak stałoby się nieporządkiem, gdybym chciał zmienić zawartość łaty, ale może istnieje obejście, które pominąłem do edycji komunikatu zatwierdzenia?

+0

Czy naprawdę * masz pewność, że musisz to zrobić? Jestem bardzo ciekawy, jaki rodzaj zmiany narzędzi zmusza cię do podjęcia tego. –

+1

AFAIK, nie można używać MQ lub HistEdit do edycji komunikatu zatwierdzenia po rozgałęzieniu i nie jestem świadomy innego narzędzia, które mogłoby to zrobić[email protected] jeśli przeczytasz dokładnie to pytanie zobaczysz, że podany link nie ma żadnej pomocy, OP już wypróbował proponowane rozwiązanie;) – krtek

+0

@krtek Czytam to uważnie. szczególnie komunikat o błędzie. więc jeśli repozytorium jest już sklonowane między użytkownikami, jest problematyczne dla wszystkich użytkowników. –

Odpowiedz

4

Aby to zrobić, użyłbym zmodyfikowanej wersji convert extension. Rozszerzenie może wykonywać konwersje hg → hg, co umożliwia zmianę nazw autorów i nazw oddziałów. Nie ma jeszcze możliwości zmiany komunikatów o commitach, ale możesz je zhackować.

W szczególności, należy zmienić metodę z getcommit:

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

który jest odpowiedzialny za czytanie starych zobowiązuje. Zmiana

desc=ctx.description() 

do

desc=adjust(ctx.description()) 

a następnie wdrożyć funkcję adjust na początku pliku:

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

Jeśli są to przypadkowe/zduplikowane gałęzie z powodu użycia --amend i push --force, najpierw usuń je i spróbuj ponownie "histedit", a następnie wyczyść centralne repo na bitbucket; spróbuj następujących składników, które pracowały dla mnie:

skontrolować dziennik repozytorium i szukać oddziałów, można użyć GraphlogExtension które trzeba najpierw włączyć:

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

umożliwić MqExtension i taśmy wszystkie branże.

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

W razie potrzeby zmień zobowiązać się do „projekt” (patrz Phases) i uruchom ponownie „histedit” i wszystko powinno być dobrze teraz.

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