2010-11-30 4 views
6

J'ai une grande validation de nombreux fichiers sur une branche, j'ai besoin de transférer les modifications d'un seul fichier dans ce changeset à une autre branche. Comment puis-je faire ceci? J'utilise principalement TortoiseHg mais les solutions en ligne de commande sont aussi bien.Dans Mercurial, comment extraire les modifications d'un seul fichier d'un ensemble de modifications pour les appliquer à une autre branche?

Si je vais dans le changeset dans TortoiseHg et que je sélectionne le fichier, je peux voir les diffs que je veux transférer, mais pas un moyen de les appliquer réellement.

Répondre

8

Vous pouvez obtenir le patch pour juste ce fichier en utilisant:

hg log -r THEREVISIONWITHLOTSOFCHANGES -p -I path/to/justthatfile > justthatfile.patch 

que vous pouvez ensuite importer sur quelque branche que vous voulez en faire:

hg update anotherbranch 
hg import --no-commit justthatfile.patch 
hg commit 
2

La solution la plus basique est de vider le patch du fichier, appliquer à la révision de travail en cours, et l'engager (en supposant que vous êtes à la racine du dépôt):

$ hg up <revision-to-apply-the-patch-to> 
$ hg diff -c <revision-containing-the-patch> <files-to-include> | patch -p0 
$ hg ci -m "Transplanting selected changes from <revision-contain...>" 

L'inconvénient de cette méthode est que ce que vous avez fait du point de vue de l'historique des révisions n'est pas très évident. Un bon message de validation aide ici, mais le graphique de l'historique ne donne aucune indication sur le processus de transplanter certains changements. Dans cette fusion de cas et peut être une réversion meilleure solution:

$ hg up <revision-to-apply-the-patch-to> 
$ hg merge -r <revision-containing-the-patch> 
$ hg revert --no-backup <files-to-exclude> 
$ hg ci -m "Merge in changes of <files-to-include>" 

Il y a probablement plus de solutions pour ce faire - ces deux sont venus à l'esprit en premier.

Questions connexes