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
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? ".
svn cat prend un argument de révision aussi!
svn cat -r 175 mydir/myfile > mydir/myfile
svn revert filename
cela devrait inverser un seul fichier.
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.
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?
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.
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.
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.
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.
S'il ne s'agit que de quelques fichiers et que vous utilisez Tortoise SVN, vous pouvez utiliser l'approche suivante:
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
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).
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
Sudo svn revert filename
c'est le meilleur moyen de récupérer un fichier unique