74 Stimmen

Kann ich den Benutzernamen auf einem Mercurial-Changeset ändern?

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?

84voto

Andrew Aylett Punkte 37790

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

18voto

Soulman Punkte 2808

Wenn Sie ein einzeln ausgehendes Changeset haben, gibt es einen sehr einfachen Weg, dies zu tun:

$ hg ci --amend --user "Mein Name " -X "**"

Die -X "**" Option kann weggelassen werden, wenn Sie keine lokalen Änderungen haben.

14voto

Andy MacKinlay Punkte 1254

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.

11voto

zanedp Punkte 399

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X