Ich habe den Benutzernamen auf meinem Entwicklungscomputer nicht festgelegt und einige Festschreibungen vorgenommen. Kann ich den Benutzernamen rückwirkend ändern, damit klar ist, wer diese Änderungssätze festgeschrieben hat?
Ich habe den Benutzernamen auf meinem Entwicklungscomputer nicht festgelegt und einige Festschreibungen vorgenommen. Kann ich den Benutzernamen rückwirkend ändern, damit klar ist, wer diese Änderungssätze festgeschrieben hat?
Antworten:
Wenn Sie Ihr Repository nicht veröffentlicht haben, sollte dies nicht zu schwierig sein. Sie müssen die Erweiterung "In Mercurial konvertieren" verwenden , mit der Sie Ihr vorhandenes Repository "filtern" können, um ein neues zu erstellen. Mit der Option --authors können Sie den Autor für jedes Commit bearbeiten, während es gefiltert wird.
Wenn Sie haben Ihr Repository veröffentlicht, bitte die Auswirkungen auf die Benutzer berücksichtigen, hat das Quecksilber-Wiki einige Gründe , nicht zu bearbeiten Geschichte .
Aktivieren Sie die Erweiterung, indem Sie diese Zeilen zu Ihrer .hgrc hinzufügen:
[extensions]
hgext.convert=
Schreiben Sie eine Datei, um den alten Namen dem neuen Namen zuzuordnen (autors.convert.list):
user@ubuntu=real.name@my.example.com
Führen Sie die Konvertierung aus:
hg convert --authors authors.convert.list SOURCE DEST
Ich habe es gerade überprüft, es funktioniert für mich :).
$ hg log --template '{author}\n'|less
, aber noch nicht funktionieren - ohne die authormap -thing zu verstehen.
Wenn Sie einen einzelnen ausgehenden Änderungssatz haben, gibt es eine sehr einfache Möglichkeit, dies zu tun:
$ hg ci --amend --user "My Name <mymail@example.org>" -X "**"
Die -X "**"
Option kann weggelassen werden, wenn Sie keine lokalen Änderungen haben.
Ich habe verschiedene Methoden ausprobiert (einschließlich der Konvertierungserweiterung , bei der ich festgestellt habe, dass sie ein nicht verwandtes Repository erstellt hat). Die Mercurial-Wiki-Anweisungen zum Bearbeiten des Verlaufs mit MQ waren für mich am hilfreichsten. (Es gibt natürlich die üblichen Einschränkungen beim Bearbeiten eines öffentlich bekannten Verlaufs, die eine schlechte Idee sind, aber lokale Änderungssätze, die nur Sie haben, können bearbeitet werden.)
Ich werde hier die entscheidenden Schritte zusammenfassen und die Mechanismen des Autorenwechsels erläutern. Angenommen, das erste falsche Autoren-Commit befindet sich in der Revision BAD
(und Sie haben Ihre Änderungen natürlich nirgendwo veröffentlicht), sollten Sie in der Lage sein, Folgendes zu tun (ich gehe davon aus, dass Sie sich im Repository-Stammverzeichnis befinden):
Aktivieren Sie MQ, indem Sie dies zu $ HOME / .hg / hgrc hinzufügen
[extensions]
hgext.mq=
Konvertieren Sie die letzten Änderungssätze in Patches:
$ hg qimport -r BAD:tip
(Sie können jetzt bei gefunden werden .hg/patches
)
"Nicht anwenden" aller Patches (vorausgesetzt, sie wurden angewendet und umgekehrt), um Ihr Repository in den Status der vorherigen Revision zu versetzen BAD
:
$ hg qpop -a
Wenn Sie sich Ihre Patches ansehen, werden Sie feststellen, dass der Autor in allen Patches in einer Art Kommentarzeile codiert ist:
$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <f.lastname@oops.wrongurl.example.com>
Verwenden Sie jetzt Ihr bevorzugtes Such- / Ersetzungswerkzeug, um die Patches zu reparieren (ich verwende hier Perl). Nehmen wir an, Sie möchten, dass der Commit-Name lautet f.lastname@righturl.example.com
:
$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com/' .hg/patches/*.diff
Überprüfen Sie nun, ob Sie den Autorennamen erfolgreich geändert haben, und wenden Sie die Patches erneut an:
$ hg qpush -a
Konvertieren Sie dann die angewendeten Patches in die richtigen Änderungssätze:
$ hg qfinish -a
Und du bist fertig. Ihr Repository wird weiterhin als verwandt aufgeführt, sodass Sie keine Beschwerden über das Pushing erhalten.
/
Vor dem abschließenden Anführungszeichen war ein Nachlauf erforderlich, andernfalls perl
ergab der Befehl einen Fehler Substitution replacement not terminated at -e line 1
. Ansonsten perfekt, danke!
Ich habe die histedit
Erweiterung verwendet, mit der ich den Autor ändern konnte, ohne neue Repos wie "convert" zu erstellen oder auf "mq" zurückzugreifen.
Stellen Sie zunächst in Ihrer Mercurial-Konfigurationsdatei sicher, dass Ihr Benutzername korrekt eingestellt ist, und aktivieren Sie die Erweiterung histedit:
[ui]
username = Your Name <your.name@domain.org>
[extensions]
histedit =
Wenn Sie dann Revision 40 ändern möchten, verwenden Sie:
hg histedit -r 40
Ändern Sie in der angezeigten Datei in der Zeile, die der Revision 40 entspricht, das Wort pick
in edit
. Speichern und schließen Sie die Datei.
Nun hg commit
. Sie müssen Ihre Festschreibungsnachricht erneut eingeben und speichern.
Schließlich hg histedit --continue
.
Das Commit wird mit Ihrem neuen angezeigt username
. Ein Nebeneffekt ist, dass der Zeitstempel des Commits ebenfalls aktualisiert wird.