71 votes

Puis-je changer le nom d'utilisateur sur un changeset mercurial?

Je n'ai pas défini le nom d'utilisateur sur mon ordinateur de développement et j'ai commis quelques commits. Puis-je modifier le nom d'utilisateur de manière rétroactive afin de déterminer clairement qui a validé ces changesets?

83voto

Andrew Aylett Points 16469

Si vous n'avez pas publié votre dépôt alors que cela ne devrait pas être trop dur. Vous devez utiliser le Convertir extension de Mercurial, ce qui vous permettra de "filtre" de votre référentiel existant pour en créer un nouveau. l' --auteurs commutateur vous permet de modifier l'auteur à chaque commit elle est filtrée.

Si vous avez publié votre référentiel, veuillez considérer l'impact sur les utilisateurs, l'mercurial wiki a quelques raisons de ne pas modifier l'histoire.

L'activation de l'extension par l'ajout de ces lignes .hgrc:

[extensions]
hgext.convert=

Écrire un fichier de la carte de l'ancien nom vers le nouveau nom (les auteurs.convertir des.liste):

user@ubuntu=real.name@my.example.com

Exécuter la conversion:

hg convert --authors authors.convert.list SOURCE DEST

Je viens de vérifier, ça marche pour moi :).

14voto

strangefeatures Points 316

J'ai essayé un couple de différentes méthodes (y compris les Convertir Extension, qui m'a créé un autre référentiel). L'Mercurial wiki instructions pour l'édition de l'histoire à l'aide de MQ étaient ceux que j'ai trouvé le plus utile. (Il y a bien sûr les habituelles mises en garde sur l'édition d'un public connu, histoire d'être une mauvaise idée, mais local-ensembles de modifications que vous seul avez sont OK pour modifier).

Je vais résumer les étapes cruciales ici, et de préciser les modalités de l'évolution de l'auteur. En supposant que la première erreur de l'auteur de commettre est à la révision BAD (et que vous n'avez pas publié vos changements n'importe où, bien sûr), vous devez être en mesure de faire ce qui suit (je vais supposer que vous êtes à la racine du référentiel):

Activer la MQ par l'ajout de cette $HOME/.hg/hgrc

[extensions]
hgext.mq=

Convertir les récentes révisions dans les patchs:

$ hg qimport -r BAD:tip

(Ils peuvent maintenant être trouvés à l' .hg/patches)

"Annuler" tous les patchs (à supposer qu'ils ont été appliqués, et les inverser), pour obtenir votre référentiel dans l'état de la révision avant d' BAD:

$ hg qpop -a

Si vous regardez vos patchs, vous verrez que l'auteur est codée dans une sorte de ligne de commentaire dans tous les patchs:

$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <f.lastname@oops.wrongurl.example.com>

Maintenant, utilisez votre préféré rechercher/remplacer l'outil pour corriger les patchs (je suis en utilisant Perl ici). Supposons que vous voulez le nom de commit à être f.lastname@righturl.example.com:

$ perl -pi -e 's/f\.lastname\@oops\.wrongurl\.example\.com/f.lastname\@righturl.example.com' .hg/patches/*.diff

Maintenant, vérifiez que vous avez bien modifié le nom de l'auteur, et ré-appliquer les patchs:

$ hg qpush -a

Puis de convertir l'application des correctifs dans les révisions:

$ hg qfinish -a

Et vous avez terminé. Votre dépôt est toujours répertorié comme liés, de sorte que vous n'aurez pas de plaintes au sujet de pousser.

3voto

Dave K Points 566

Consultez le document suivant. La réécriture de l'historique présente de nombreux inconvénients, qui sont abordés dans le document. Il est donc généralement mal vu. Cependant, cela semble possible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X