web-dev-qa-db-fra.com

Quel est un moyen simple de restaurer un fichier en subversion?

Ces instructions sont un peu intimidantes et déroutantes: http://svnbook.red-bean.com/en/1.0/ch04s04.html#svn-ch-4-sect-4. . Et ils ne semblent pas non plus mentionner que c'est beaucoup plus simple si vous ne vous êtes pas encore enregistré après avoir fait le "svn rm" [1].

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

[1] Pour un débutant svn, il peut sembler que "svn rm "détruit immédiatement le fichier. Je me souviens avoir fait svn rm pensant que cela ne ferait que le supprimer du contrôle de code source et paniquer lorsque le fichier lui-même a réellement disparu. Donc, une sous-question est, quelle est la bonne façon de supprimer un fichier du contrôle de version sans réellement supprimer votre copie locale?

71
dreeves

Si vous venez de le faire

svn rm foo.txt

alors vous pouvez annuler cela simplement

svn revert foo.txt

Si vous vous êtes déjà enregistré après avoir effectué le "svn rm ", vous pouvez consulter le journal (svn log), recherchez la dernière révision où le fichier existait et récupérez-la dans cette version.

Une façon de le faire est de fusionner dans l'ancienne révision qui contient le fichier. En supposant que la révision actuelle est 123 et que la dernière version avec ce fichier est 120, procédez comme suit:

svn merge -r123:120

Faites peut-être d'abord un essai à sec pour vous assurer qu'il ne fera rien de ce que vous ne voulez pas:

svn --dry-run merge -r123:120

Pour la sous-question, comment supprimer un fichier de svn sans supprimer la copie locale:

svn rm foo.txt --keep-local

Ou, bien sûr, vous pouvez simplement copier dans un fichier temporaire avant svn rm'ing, 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
84
dreeves

pour quelque raison que ce soit, le -r arg ne fonctionnait pas pour moi (svn version 1.6.9). J'ai essayé avant et après le src, mais j'ai continué à recevoir un message indiquant que le fichier était introuvable dans la révision actuelle (duh). Même chose avec --revision. Cependant, l'utilisation de la syntaxe @ style a fonctionné:

svn cp url/to/removed/foo.txt@4 foo.txt
41
Michael Rush

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 conserveront l'historique du fichier. Étant donné que 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"
31
Stefan

Pour les utilisateurs de TortoiseSVN, cela se fait très facilement via le navigateur Repo. Dans le navigateur Repo, passez à la révision avant la suppression du fichier (vous pouvez changer la version en utilisant le bouton "Révision:" en haut à droite):

enter image description here

Vous devriez alors pouvoir voir le fichier supprimé à son emplacement d'origine dans le navigateur Repo. Faites un clic droit dessus et choisissez "Copier sur la copie de travail ...":

enter image description here

Le fichier sera ensuite restauré sur votre copie de travail prêt à être validé (comme si svn a été ajouté) et avec son historique de journal intact.

5
atkins

Pour rétablir un fichier supprimé dans SVN. Trouvez le numéro de révision juste avant la suppression (disons 341). Rétablissez ensuite ce fichier seul avec ce numéro de révision.

svn up -r341 [path_to_deletedFile]
2
Rejeev Divakaran

j'ai utilisé l'élément de menu de copie de la révision précédente en utilisant la tortue, j'ai travaillé pour moi et j'ai gardé l'historique.

1
WendyG