Ich habe den Benutzernamen nicht auf meinem Entwicklungscomputer festgelegt und ein paar Commits gemacht. Kann ich nachträglich den Benutzernamen ändern, damit klar ist, wer diese Änderungen vorgenommen hat?
Antworten
Zu viele Anzeigen?Wenn Sie Ihr Repository noch nicht veröffentlicht haben, sollte das nicht allzu schwierig sein. Sie müssen die Convert-Erweiterung für Mercurial verwenden, die es Ihnen ermöglicht, Ihr vorhandenes Repository zu 'filtern', um ein neues zu erstellen. Der Schalter --authors ermöglicht es Ihnen, den Autor für jeden Commit während des Filtervorgangs zu bearbeiten.
Wenn Sie Ihr Repository bereits veröffentlicht haben, sollten Sie die Auswirkungen auf Ihre Benutzer beachten. Das Mercurial-Wiki hat einige Gründe, warum Sie die Historie nicht bearbeiten sollten.
Aktivieren Sie die Erweiterung, indem Sie diese Zeilen zu Ihrer .hgrc-Datei hinzufügen:
[extensions]
hgext.convert=
Erstellen Sie eine Datei, um den alten Namen dem neuen Namen zuzuordnen (authors.convert.list):
user@ubuntu=real.name@my.example.com
Führen Sie die Konvertierung aus:
hg convert --authors authors.convert.list QUELLE ZIEL
Ich habe es gerade überprüft, es funktioniert für mich :).
Ich habe ein paar verschiedene Methoden ausprobiert (einschließlich der Convert Extension, bei der ich festgestellt habe, dass sie ein unabhängiges Repository erstellt hat). Die Anleitungen im Mercurial-Wiki zum Bearbeiten von Historie mit MQ fand ich am hilfreichsten. (Natürlich gibt es die üblichen Vorbehalte, dass das Bearbeiten einer öffentlich bekannten Historie eine schlechte Idee ist, aber lokale Changesets, die nur du hast, sind in Ordnung).
Ich werde hier die entscheidenden Schritte zusammenfassen und die Mechanik der Änderung des Autors klären. Wenn der erste fehlerhafte Commit-Autor bei Revision BAD
liegt (und du deine Änderungen natürlich nirgendwo veröffentlicht hast), solltest du folgendes tun können (ich gehe davon aus, dass du im Wurzelverzeichnis des Repositorys bist):
Aktiviere MQ, indem du dies zu $HOME/.hg/hgrc hinzufügst
[extensions]
hgext.mq=
Wandle die aktuellen Changesets in Patches um:
$ hg qimport -r BAD:tip
(Du findest sie jetzt unter .hg/patches
)
"Deappliziere" alle Patches (gehe davon aus, dass sie angewendet wurden und drehe sie um), um dein Repository in den Stand vor BAD
zu bringen:
$ hg qpop -a
Wenn du dir deine Patches anschaust, wirst du sehen, dass der Autor in einer Art Kommentarzeile in allen Patches codiert ist:
$ grep User .hg/patches/*
.hg/patches/102.diff:# User Vorname Nachname
Verwende jetzt dein bevorzugtes Suchen/Ersetzen-Tool, um die Patches zu reparieren (ich benutze hier Perl). Nehmen wir an, du möchtest, dass der Commit-Name f.lastname@righturl.example.com
lautet:
$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
Überprüfe nun, ob du den Autorennamen erfolgreich geändert hast, und wende die Patches erneut an:
$ hg qpush -a
Wandle dann die angewendeten Patches in ordnungsgemäße Changesets um:
$ hg qfinish -a
Und du bist fertig. Dein Repository ist immer noch als verwandt aufgeführt, sodass du keine Beschwerden über das Pushen bekommst.
Ich habe die histedit
Erweiterung verwendet, die es mir ermöglicht hat, den Autor zu ändern, ohne neue Repos wie "convert" zu erstellen oder auf "mq" zurückzugreifen.
Zuerst, in Ihrer Mercurial-Konfigurationsdatei, stellen Sie sicher, dass Ihr Benutzername korrekt eingestellt ist und aktivieren Sie die histedit-Erweiterung:
[ui]
username = Ihr Name
[extensions]
histedit =
Dann, wenn Sie die Überarbeitung 40 ändern möchten, verwenden Sie:
hg histedit -r 40
In der Datei, die erscheint, ändern Sie auf der Zeile, die der Überarbeitung 40 entspricht, das Wort pick
in edit
. Speichern und schließen Sie die Datei.
Jetzt, hg commit
. Sie müssen Ihre Commit-Nachricht erneut eingeben und speichern.
Schließlich, hg histedit --continue
.
Der Commit wird mit Ihrem neuen Benutzernamen
angezeigt. Ein Nebeneffekt ist, dass der Zeitstempel des Commits ebenfalls aktualisiert wird.