web-dev-qa-db-fra.com

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

Je suis nouveau sur Mercurial. Tout ne peut pas trouver la bonne commande. Essayé mise à jour/checkout sans succès. J'utilise un référentiel local. Merci

101
Codism

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

142
djc

Comme déjà dit, revert modifie un fichier en place pour correspondre à une révision antérieure. Si vous ne le souhaitez pas, vous pouvez utiliser hg cat -r revisionid filename (en remplaçant bien sûr révisid et filename), qui exportera le fichier sur stdout, ce qui permet de le rediriger n'importe où.

79
Ry4an Brase

hg revert résout effectivement ce problème. Mais je pense que vous avez du mal à comprendre 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 update est une commande de référentiel complète et ne fonctionnera pas sur des fichiers individuels. De cette façon, il ne ressemble pas au svn update de Subversion. Si vous faites hg --help update, vous constaterez qu'il en est ainsi car la commande ne prend aucun argument de fichier. Il peut être utilisé pour déplacer l'intégralité de votre référentiel vers un instantané particulier, mais pas pour un seul fichier.

Si vous tapez hg --help, vous voyez une liste de commandes. C'est une liste assez longue et quelque peu décourageante, mais si vous la parcourez, 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, c'est hg cat. Cela vous permettra d’imprimer le contenu d’un fichier lors d’une révision donnée. Vous pouvez ensuite rediriger sa sortie dans un autre fichier. Ensuite, vous pouvez avoir la bonne version précédente de votre fichier et l'ancienne version à comparer côte à côte.

La raison pour laquelle Mercurial a une commande update distincte est qu’il est possible de faire quelque chose dans Mercurial qui soit impossible dans Subversion. Vous pouvez update dans une version antérieure, apporter des modifications, puis valider. Cela va créer une branche. La commande update a également pour effet de modifier la révision parente du répertoire de travail actuel, ainsi que le contenu de tous les fichiers de ce répertoire par les versions de cette révision parente.

Cela signifie que revert change le contenu d'un fichier (ou même de tout le référentiel si vous donnez les bons arguments à la commande), mais conserve la même révision de la copie parente de la copie de travail actuelle.

Vous pouvez connaître la révision parente (ou les révisions dans le cas d'une fusion) de la copie de travail en cours à l'aide de la commande hg parents.

Dans Subversion, les révisions sont une progression strictement linéaire. Mercurial crée des branches en un tour de main et il est presque aussi facile de les fusionner. Les révisions forment un DAG et non une progression strictement linéaire.

23
Omnifarious

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 même mieux:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"
10
user2173353

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

hg revert -r .~1 <file>
0
cmcginty