web-dev-qa-db-fra.com

Puis-je changer le nom d'utilisateur sur un ensemble de modifications Mercurial?

Je n'ai pas défini le nom d'utilisateur sur mon ordinateur de développement et j'ai effectué quelques validations. Puis-je modifier rétroactivement le nom d'utilisateur pour qu'il soit clair qui a commis ces changements?

69
Dan Goldstein

Si vous n'avez pas publié votre référentiel, cela ne devrait pas être trop difficile. Vous devez utiliser Convert extension to Mercurial, qui vous permettra de "filtrer" votre référentiel existant pour en créer un nouveau. le commutateur --authors vous permet de modifier l'auteur de chaque validation lors de son filtrage.

Si vous avez publié votre référentiel, veuillez considérer l'impact sur vos utilisateurs, le wiki Mercurial en a raisons de ne pas modifier l'historique .

Activez l'extension en ajoutant ces lignes à votre .hgrc:

[extensions]
hgext.convert=

Écrivez un fichier pour mapper l'ancien nom au nouveau nom (auteurs.convert.list):

user@[email protected]

Exécutez la conversion:

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

Je viens de le vérifier, cela fonctionne pour moi :).

83
Andrew Aylett

Si vous avez un single changeset sortant, il existe un moyen très simple de le faire:

$ hg ci --amend --user "My Name <[email protected]>" -X "**"

L'option -X "**" Peut être omise si vous n'avez aucune modification locale.

15
Soulman

J'ai essayé quelques méthodes différentes (y compris le Convert Extension , que j'ai trouvé créé un référentiel non lié). Les instructions du wiki Mercurial pour modification de l'historique à l'aide de MQ sont celles que j'ai trouvées les plus utiles. (Il y a bien sûr les mises en garde habituelles concernant la modification de tout historique connu du public étant une mauvaise idée, mais les changements locaux que vous seul avez le droit de modifier ).

Je vais résumer les étapes cruciales ici et clarifier les mécanismes de changement d'auteur. En supposant que le premier mauvais auteur est validé à la révision BAD (et vous n'avez bien sûr publié vos modifications nulle part), vous devriez pouvoir faire ce qui suit (je suppose que vous êtes à la racine du référentiel) :

Activez MQ en l'ajoutant à $ HOME/.hg/hgrc

[extensions]
hgext.mq=

Convertissez les modifications récentes en correctifs:

$ hg qimport -r BAD:tip

(Ils peuvent maintenant être trouvés sur .hg/patches)

"Désappliquez" tous les correctifs (supposez qu'ils ont été appliqués et inversez-les), pour mettre votre référentiel dans l'état de la révision avant BAD:

$ hg qpop -a

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

$ grep User .hg/patches/*
.hg/patches/102.diff:# User Firstname Lastname <[email protected]>

Utilisez maintenant votre outil de recherche/remplacement préféré pour corriger les correctifs (j'utilise Perl ici). Supposons que vous souhaitiez que le nom du commit soit [email protected]:

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

Vérifiez maintenant que vous avez correctement modifié le nom de l'auteur et réappliquez les correctifs:

$ hg qpush -a

Convertissez ensuite les correctifs appliqués en ensembles de modifications appropriés:

$ hg qfinish -a

Et tu as fini. Votre référentiel est toujours répertorié comme lié, vous ne recevrez donc aucune plainte concernant le push.

12
Andy MacKinlay

J'ai utilisé l'extension histedit qui m'a permis de changer l'auteur sans créer de nouveaux dépôts comme "convert" ou sans avoir recours à "mq".

Tout d'abord, dans votre fichier de configuration Mercurial, assurez-vous que votre nom d'utilisateur est correctement défini et activez l'extension histedit:

[ui]
username = Your Name <[email protected]>

[extensions]
histedit =

Ensuite, si vous souhaitez modifier la révision 40, utilisez:

hg histedit -r 40

Dans le fichier qui apparaît, sur la ligne correspondant à la révision 40, remplacez le mot pick par edit. Enregistrez et fermez le fichier.

Maintenant, hg commit. Vous devrez saisir à nouveau votre message de validation et enregistrer.

Finalement, hg histedit --continue.

Le commit apparaîtra avec votre nouveau username. Un effet secondaire est que l'horodatage de la validation est également mis à jour.

10
zanedp