web-dev-qa-db-fra.com

Rétablir un fichier unique dans SVN à une révision particulière

J'ai un fichier comme indiqué ci-dessous dans un dépôt SVN que je voudrais revenir à une version précédente. Quel est le moyen de faire cela dans SVN? Je veux seulement rétrograder ce fichier particulier à une version plus ancienne, pas à l'ensemble du référentiel.

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
173
Gökhan Sever

Si vous voulez seulement l'ancien fichier dans votre copie de travail:

svn up -r 147 myfile.py

Si vous voulez revenir en arrière, voyez ceci " Comment revenir à une version plus ancienne de notre code en subversion? ".

181
Eric Hauser

svn cat prend un argument de révision aussi!

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

67
Never Sleep Again
svn revert filename 

cela devrait inverser un seul fichier.

56
thestar

Pour un seul fichier, vous pouvez faire:

svn export -r <REV> svn://Host/path/to/file/on/repos file.ext

Vous pouvez faire svn revert <file> mais cela ne restaurera que la dernière copie de travail.

50
Mitch Dempsey

Jusqu'à présent, toutes les réponses semblent présenter des inconvénients importants, sont compliquées (nécessité de trouver l'URI du référant) ou ne répondent pas à la question probablement posée: comment rétablir le référentiel dans un état opérationnel avec cette ancienne version du fichier .

svn merge -r head:[revision-number-to-revert-to] [file-path] est l’OMI comme le moyen le plus simple et le plus simple de le faire. Veuillez noter que ramener un fichier supprimé ne semble pas fonctionner de cette façon [1]. Voir aussi la question suivante: Meilleure façon de revenir à une révision SVN précédente 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 Quelle est la bonne façon de restaurer un fichier supprimé de SVN?

19
Michel Müller

Le meilleur moyen est de:

svn merge -c -RevisionToUndo ^/trunk

Cela annulera tous les fichiers de la révision au lieu de simplement restaurer ceux que vous n'aimez pas annuler. N'oubliez pas le tiret (-) comme préfixe pour la révision.

svn revert File1 File2

Maintenant, validez les modifications.

13
khmarbaise

Vous voulez faire

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

Une fois que vous aurez fait cela, vous aurez cette révision du fichier dans un état pouvant être envoyé. Commettez le fichier.

7
Jennifer Elyse

J'ai trouvé qu'il était simple de le faire via la commande svn cat afin que vous n'ayez même pas à spécifier de révision.

svn cat mydir/myfile > mydir/myfile

Cela ne fera probablement pas remonter les données inode (métadonnées) telles que les horodatages.

7
Joseph Coco

Il suffit d’ajouter à la réponse de @Mitch Dempsy car je n’ai pas assez de représentants pour commenter.

svn export -r <REV> svn://Host/path/to/file/on/repos --force

L'ajout de l'option --force écrasera la copie locale lors de l'exportation et vous pourrez ensuite effectuer un svn commit pour le transférer dans le référentiel.

4
Kristina

S'il ne s'agit que de quelques fichiers et que 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 écraser votre fichier actuel.
  4. Commettez le fichier source écrasé.
4
Elling

surpris personne n'en a parlé

sans connaître le numéro de révision, vous pourriez écrire ceci, si vous venez de valider quelque chose que vous voulez 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 HEAD:PREV file
4
Kalpesh Soni

Une autre option pour un seul fichier consiste à "remplacer" la version actuelle du fichier par l'ancienne révision:

svn rm file.ext
svn cp svn://Host/path/to/file/on/repo/file.ext@<REV> 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'est-à-dire svn log file.ext).

1
Robert Leland

Si vous souhaitez restaurer un fichier individuel 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

1
Olmstov
Sudo svn revert filename

c'est le meilleur moyen de récupérer un fichier unique

0
mallikarjun S.K.