Rétablissement d’un fichier unique dans SVN à une révision particulière

J’ai un fichier comme indiqué ci-dessous dans un repository SVN que je voudrais revenir à une version précédente. Comment faire cela dans SVN? Je veux seulement rétrograder ce fichier particulier à une version plus ancienne, pas à la totalité du repository.

Merci.

$ svn log myfile.py ---------------------- r179 | xx | 2010-05-10 Change 3 ---------------------- r175 | xx | 2010-05-08 Change 2 ---------------------- r174 | xx | 2010-05-04 Initial 

Si vous voulez simplement l’ancien fichier dans votre copie de travail:

 svn up -r 147 myfile.py 

Si vous voulez revenir en arrière, voyez ceci ” Comment retourner à une version antérieure de notre code dans subversion? “.

Pour un seul fichier, vous pouvez faire:

svn export -r svn://host/path/to/file/on/repos file.ext

Vous pourriez faire svn revert mais cela ne restaurera que la dernière copie de travail.

svn cat prend un argument de révision aussi!

svn cat -r 175 mydir/myfile > mydir/myfile

 svn revert filename 

cela devrait retourner un seul fichier.

Jusqu’à présent, toutes les réponses semblent avoir des inconvénients significatifs, sont compliquées (nécessité de trouver l’URI du repo) ou elles ne font pas ce que la question a probablement demandé: comment remettre le Repo en état de fonctionnement avec cette ancienne version du fichier .

svn merge -r head:[revision-number-to-revert-to] [file-path] est le moyen le plus simple et le plus propre de faire cela. Veuillez noter que le fait de ramener un fichier supprimé ne semble pas fonctionner de cette façon [1]. Voir aussi la question suivante: Meilleure façon de revenir à une précédente révision SVN d’un fichier?

[1] Pour cela, vous voulez svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up , voir aussi façon de restaurer un fichier supprimé à partir de SVN?

Le meilleur moyen est de:

 svn merge -c -RevisionToUndo ^/trunk 

Cela annulera tous les fichiers de la révision plutôt que de simplement les annuler. N’oubliez pas le tiret ( - ) comme préfixe pour la révision.

 svn revert File1 File2 

Commencez maintenant les modifications.

J’ai trouvé simple de le faire via la commande svn cat afin de ne pas avoir à spécifier de révision.

 svn cat mydir/myfile > mydir/myfile 

Cela ne va probablement pas jouer sur les données d’inode (métadonnées) telles que les horodatages.

Si ce n’est que quelques fichiers, et si vous utilisez Tortoise SVN, vous pouvez utiliser l’approche suivante:

  1. Faites un clic droit sur votre fichier source et sélectionnez “TortoiseSVN” -> “Afficher le journal”.
  2. Cliquez avec le bouton droit sur une révision dans le journal et sélectionnez “Enregistrer la révision dans …”.
  3. Laissez l’ancienne révision remplacer votre fichier actuel.
  4. Validez le fichier source écrasé.

surpris personne n’a mentionné cela

sans trouver le numéro de révision, vous pourriez écrire ceci, si vous venez de commettre quelque chose que vous souhaitez rétablir, cela ne fonctionnera pas si vous avez modifié un autre fichier et que le fichier cible n’est pas le dernier fichier modifié

 svn merge -r PREV:HEAD file 

Vous voulez faire

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

Une fois que vous faites cela, vous aurez cette révision du fichier dans un état engageable. Validez le fichier.

Juste append à @Mitch Dempsy répondre car je n’ai pas assez de rep pour commenter encore.

 svn export -r  svn://host/path/to/file/on/repos --force 

L’ajout de –force écrasera la copie locale avec l’export et vous pourrez alors faire un commit svn pour le pousser dans le référentiel.

Une autre option pour un fichier unique consiste à “remplacer” la version actuelle du fichier par l’ancienne version:

 svn rm file.ext svn cp svn://host/path/to/file/on/repo/file.ext@ file.ext svn ci 

Cela a pour caractéristique supplémentaire que les modifications indésirables ne sont pas affichées dans le journal de ce fichier (c.-à-d. Svn log file.ext).

Si vous souhaitez restaurer un fichier individuel à partir d’une révision spécifique et pouvoir le valider, procédez comme suit:

svn merge -c – [OldRev #] [Nom du fichier]

c’est à dire. svn merge -c -150 myfile.py

Notez le négatif sur le numéro de révision