Comment obtenir une version spécifique d'un fichier dans Mercurial?

114

Je suis nouveau sur Mercurial. Impossible de trouver la bonne commande. Mise à jour / paiement essayé sans chance. J'utilise le référentiel local. Merci

Codisme
la source
@Omnifarious: j'ai validé une version stable d'un fichier. Puis j'ai continué à travailler sur le fichier mais j'ai vite compris que j'avais besoin de la dernière «bonne» version. Cela peut être fait par mise à jour dans svn mais quand j'essaye la mise à jour de hg, il dit "0 fichiers ..."
Codism

Réponses:

153

Je pense que vous voulez hg revert -r<rev> <file>(cela changera ce fichier pour qu'il soit tel qu'il était à la révision donnée).

djc
la source
Oui, c'est exactement ce qu'il veut. :-)
Omnifarious
9
ou simplement hg revert <filename> si vous souhaitez annuler vos modifications actuelles et obtenir la dernière version validée
BlackTigerX
@BlackTigerX Sans la révision, un fichier non modifié ne sera converti en rien, même s'il ne s'agit pas de la version la plus récemment validée. J'utilise parfois ceci pour «sélectionner» les fichiers entre les révisions, c'est donc important.
user2864740
83

Comme djc l'a dit, revertmodifie un fichier en place pour correspondre à une révision précédente. Si vous ne voulez pas qu'il soit en place, vous pouvez utiliser hg cat -r revisionid filename(en remplaçant bien sûr revisionid et filename) qui produira le fichier vers stdout, adapté pour rediriger n'importe où vous le souhaitez.

Ry4an Brase
la source
4
purrrfect, exactement ce que je souhaitais.
yota
Génial, c'est toujours agréable d'entendre quelque chose comme ça.
Ry4an Brase
24

hg revertrésout effectivement ce problème. Mais je pense que vous êtes confus sur un plus large éventail de choses que la simple réponse à votre question et que vous voulez essayer de répondre plus complètement.

hg updateest une commande de référentiel complète et ne fonctionnera pas sur des fichiers individuels. C'est différent de la subversion svn updatede cette manière. Si vous le faites, hg --help updatevous pouvez voir que c'est le cas car la commande ne prend aucun argument de fichier. Il peut être utilisé pour déplacer l'ensemble de votre référentiel vers un instantané particulier, mais ne peut pas être utilisé pour le faire dans un seul fichier.

Si vous tapez, hg --helpvous voyez une liste de commandes. C'est une liste assez longue et quelque peu intimidante, mais si vous la lisez, vous trouverez cette ligne:

revert       restore individual files or directories to an earlier state

Maintenant, si vous voulez juste le dernier état à des fins de comparaison, il y a une autre commande qui pourrait vous intéresser, et c'est hg cat. Cela vous permettra d'imprimer le contenu d'un fichier à une révision particulière. Vous pouvez ensuite rediriger sa sortie dans un autre fichier. Ensuite, vous pouvez avoir la bonne version précédente connue de votre fichier et l'ancienne version pour comparer côte à côte.

La raison pour laquelle Mercurial a une updatecommande séparée est qu'il est possible de faire quelque chose dans Mercurial qui est impossible dans Subversion. Vous pouvez updateutiliser une version antérieure, apporter des modifications, puis valider. Cela créera une branche. La updatecommande a également pour effet de changer la révision parente du répertoire de travail courant et de changer le contenu de tous les fichiers de ce répertoire vers les versions de cette révision parente.

Cela signifie que revertchange le contenu d'un fichier (ou même l'ensemble du référentiel si vous donnez à la commande les bons arguments) mais laisse la révision parente de la copie de travail actuelle inchangée.

Vous pouvez trouver la révision parente (ou les révisions dans le cas d'une fusion) de la copie de travail actuelle en utilisant la hg parentscommande.

Dans Subversion, les révisions sont une progression strictement linéaire. Mercurial crée des branches en un clin d'œil, et elles sont presque aussi faciles à fusionner. Les révisions forment un DAG, pas une progression strictement linéaire.

Très varié
la source
13

Pour extraire une révision spécifique d'un fichier spécifique, vous pouvez le faire sous Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Ici, 9 est le numéro de révision.

Ou encore mieux:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
user2173353
la source
1

Je suis venu ici en essayant d'obtenir la version précédente, voici donc la commande exacte:

hg revert -r .~1 <file>
cmcginty
la source