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?
Réponses
Trop de publicités?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 :).
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.