75 votes

Qu'est-ce qu'un moyen simple de restaurer un fichier dans Subversion?

Ces instructions sont un peu intimidant et déroutant: http://svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4.3. Et aussi, ils ne semblent pas oublier qu'il est beaucoup plus simple si vous n'avez pas encore vérifié après avoir fait le "svn rm" [1].

J'ai donc pensé que ce serait un bon endroit pour enregistrer une simple réponse pour ceux googler pour cela.

[1] Pour un svn débutant, il pourrait sembler que "svn rm" immédiatement détruit le fichier. Je me souviens de faire svn rm pensant qu'aurait suffit de le retirer de la source de contrôle et de flipper quand le fichier lui-même disparu. Ainsi, une sous-question est, quel est le bon chemin pour supprimer un fichier de contrôle de version sans les supprimer de votre copie locale?

90voto

dreeves Points 9130

Si vous n'avez tout simplement

svn rm foo.txt

ensuite, vous pouvez annuler ce tout simplement avec des

svn revert foo.txt

Si vous avez déjà coché dans après avoir fait le "svn rm", alors vous pouvez regarder le journal (svn log), de trouver la dernière révision si le fichier existe, et la saisir à partir de cette version.

Une façon de le faire est de les fusionner dans l'ancienne version qui a le fichier. En supposant que la révision en cours est de 123 et la dernière version de ce fichier est de 120, alors faire ceci:

svn merge -r123:120

Peut-être d'abord faire un essai pour s'assurer qu'il ne sera pas faire quelque chose que vous ne voulez pas:

svn --dry-run merge -r123:120

Pour la sous-question, comment faire pour supprimer un fichier à partir de svn sans enlever la copie locale:

svn rm foo.txt --keep-local

Ou, bien sûr, vous pouvez simplement copier un fichier temporaire avant de svn rm require et puis recopier:

cp foo.txt foo.txt-tmp
svn rm foo.txt
(svn ci -m "just removed foo.txt from the repository")
cp foo.txt-tmp foo.txt

43voto

Michael Rush Points 304

pour une raison quelconque, les -r arg ne fonctionnaient pas pour moi (svn version 1.6.9). J'ai essayé avant et après les src , mais je continuais à recevoir un message m'indiquant que le fichier était introuvable dans la révision actuelle (duh). Même chose avec --vision. L'utilisation de la syntaxe @ style a bien fonctionné:

 svn cp url/to/removed/foo.txt@4 foo.txt
 

31voto

Stefan Points 29091

Pour supprimer un fichier mais le conserver dans la copie de travail, utilisez

 svn rm foo.txt --keep-local
 

Pour récupérer un fichier après avoir validé la suppression, vous pouvez utiliser la commande de fusion ou la commande de copie - les deux préservent l'historique du fichier. Comme la méthode de fusion est déjà décrite ailleurs, voici la méthode de copie:

 svn rm foo.txt
svn ci foo.txt -m "removed file"
(now at r5 as an example)
svn cp url/to/removed/foo.txt -r4 foo.txt
svn ci foo.txt -m "got file back"
 

1voto

J'ai utilisé l'élément de menu de copie de la révision précédente à l'aide de la tortue, a travaillé pour moi et a gardé l'historique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X