27 votes

Comment renommer un répertoire dans Mercurial et continuer à suivre tous les changements de fichiers

J'ai décidé de renommer certains répertoires dans mon paquetage Python maison/hobby ( doc a docs , test a tests , util a utils ) parce que, maintenant que j'y ai réfléchi, je pense que les nouveaux noms sont plus appropriés. Je pense en général que si les récipients sont nommés d'après leur contenu, leurs noms doivent être des noms pluriels.

Maintenant que je suis prêt pour mon prochain hg commit Je me demande comment informer Mercurial de ces changements de nom de répertoire. Je suis nouveau dans les logiciels RCS en général et je n'utilise Mercurial que depuis quelques mois. Lorsque j'exécute hg status il montre tous les fichiers de ces répertoires qui sont supprimés et ajoutés, donc j'ai peur que si je fais juste un hg addremove Je perdrai tout l'historique des changements pour les fichiers dans ces répertoires, ou au moins l'historique des changements sera fragmenté et introuvable. Je suis tombé sur le hg rename mais la documentation ne parle que de son utilisation pour les fichiers individuels, pas pour les répertoires.

Après une lecture plus approfondie du "Definitive Guide" de Bryan O'Sullivan, il apparaît que peut-être rename peut faire référence à des répertoires.

Voici donc ce que j'ai décidé d'essayer :

hg rename --after doc docs
hg rename --after test tests
hg rename --after util utils
hg status
hg addremove

Quelqu'un peut-il me dire si c'est la méthode acceptée et préférée pour renommer des répertoires dans Mercurial, et si non, comment dois-je faire.

33voto

Niall C. Points 7150

Puisque vous avez déjà renommé les répertoires, cela est parfaitement acceptable. (Cela vous aurait évité une étape manuelle si vous aviez laissé Mercurial les renommer pour vous : hg rename doc docs etc. au lieu de le faire vous-même et de le faire savoir à Mercurial).

Si vous n'avez pas d'autres fichiers à enregistrer, la fonction hg addremove est superflue. Regardez dans la sortie de hg stat et vous ne devriez voir que les lignes commençant par 'R' (pour 'R'). doc/* , test/* y util/* ) et "A" (pour docs/* etc.)

Enfin, n'oubliez pas de valider les modifications.

EDIT : J'ai oublié de dire... utiliser hg log --follow pour suivre les changements à travers le renommage.

14voto

uki Points 3351

Mercurial n'a pas de concept de répertoires ; il traite tout (fichiers et répertoires) comme des fichiers. De plus, je ne renomme généralement jamais les fichiers ou les répertoires manuellement ; j'utilise simplement la commande

hg rename old-name new-name

Je vous suggère de le faire aussi.

Mercurial offre une fonction de suivi des renommages, ce qui signifie que mercurial peut retracer l'historique complet d'un fichier qui a été renommé. Si vous le renommez manuellement, ce n'est pas possible.

Toutefois, comme vous les avez déjà renommés manuellement, vous devez utiliser la fonction --follow ainsi que l'argument hg log pour suivre les changements de fichiers dans l'historique.

Personnellement, je choisirais hg rename et ce devrait être la méthode préférée.

9voto

Andrew McKinlay Points 901

Une raison d'utiliser --after au lieu de renommer avec hg est si vous utilisez un outil de refactoring qui fait plus que simplement renommer, par exemple en corrigeant aussi les références.

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