web-dev-qa-db-fra.com

Existe-t-il un moyen de récupérer d'un "svn revert" accidentel?

J'ai réussi à me tirer une balle dans le pied ce matin en procédant comme suit:

  1. Commencé à travailler sur un changement de mon projet
  2. Fait un tas de modifications à un tas de fichiers
  3. Réalisé que mon approche était complètement fausse et que je devais recommencer à zéro
  4. cd au plus haut niveau de mon projet et fait un "svn --recursive revert". restaurer mon sandbox local à son état de pré-modifications.
  5. Hurlais d'horreur lorsque je réalisai qu'il y avait eu un certain nombre d'autres changements en suspens dans mon bac à sable local et que je venais de tous les effacer. (le serveur svn étant en panne vendredi dernier, je n'avais pas pu les enregistrer et je les avais oubliés le week-end)

Heureusement, dans ce cas, j’avais fait un "svn diff> temp.txt" avant de quitter mon travail vendredi et le fichier temp.txt se trouvait toujours sur mon disque dur. changements perdus.

Mais pour ma future référence (c’est-à-dire la prochaine fois que je ferai la même erreur stupide) ... y at-il un moyen de dire à svn d’annuler un "svn revert"? Svn conserve-t-il une copie de sauvegarde des diffs locaux/non enregistrés?

91
Jeremy Friesner

Non (absolument)NON

Si vous dites à Subversion qu'il doit inverser un fichier, toutes les modifications ont disparu. 

Seule votre mémoire peut les récupérer. 

Exception: Les nouveaux fichiers que vous avez ajoutés ne perdront que leur statut "ajouté", mais le fichier restera dans ce répertoire, seul le statut est inconnu ("?")

Exception de plate-forme/logiciel: Utilisation de TortoiseSVN sous Windows, Revert commence par jeter les fichiers dans la corbeille, puis les restaure. Vous pouvez creuser dans la corbeille pour récupérer les fichiers.

70
Peter Parker

Il existe une solution… .. allez dans votre corbeille, vous y trouverez la dernière version du fichier supprimé… .. Tortoise "jetant" dans la corbeille tous les fichiers qu'il a restaurés.

98
shto

Pas vraiment spécifique à Subversion, mais si vous travaillez avec Eclipse, vous pouvez tenter votre chance dans l’histoire locale.

Maintenant, quelque chose d'un peu plus spécifique à Subversion: si vous ne voulez pas créer de branche pour chaque changement, vous pouvez garder quelques trunk extraits localement (trunk-modif-1, trunk-modif-2 .. .) Chaque "modification" est effectuée sur une arborescence distincte et il vous suffit de conserver une liste des extractions correspondant à la modification.

Ou vous pouvez utiliser Git localement mais je ne l'ai jamais essayé.

30
Vladimir

Récemment, nous avons commis cette erreur en ne modifiant pas le fichier (environ 10) sur SVN et ils ont tous disparu à cause de mon erreur stupide. Mais ce qui m'a sauvé, c'est l'option "Restaurer les versions précédentes" de Windows dans le menu contextuel. Ouf, c'était un soulagement et une leçon apprise.

13
JProgrammer

Vous ne pouvez pas récupérer les fichiers si vous utilisez client de ligne de commande svn .

Mais vous pouvez les récupérer si vous utilisez TortoiseSVN en tant que client svn. TortoiseSVN les déplacera automatiquement dans votre corbeille. Vous pouvez les restaurer à partir de là après un retour accidentel.

C'est une option configurable dans TortoiseSVN. Il se trouve sous Paramètres -> Dialogue 1 -> Utiliser la corbeille lors de la restauration.  

Par défaut, cette option est cochée, ce qui signifie que les fichiers sont déplacés vers la corbeille. Si vous voulez (la plupart du temps, vous ne vous souciez pas de désactiver ceci. Si vous avez une raison, merci de me le faire savoir également)

7
Manohar

Si vous utilisez InteliJ, vous êtes une personne chanceuse. Dans le menu du haut, vous avez une option Contrôle de version et sous celle-ci, vous trouverez l'option de l'historique local, où vous trouverez tout l'historique du fichier sélectionné, y compris toutes les opérations que vous avez effectuées avec ce fichier (update, commit, revert).

Bonne chance, Arkde

5
Aurelian Cotuna

De même, si vous avez restauré votre code .NET (fichiers .cs, etc.) et que vous avez créé votre application avant de restaurer, mais après avoir apporté les modifications, vous pouvez récupérer les modifications du fichier Assembly à l'aide de n'importe quel outil de réflecteur pour afficher le code.

4
scor4er

Je suis revenu solution (Visual Studio + AnkhSVN) et perds les modifications de quelques fichiers. Je ne trouve pas le fichier dans la corbeille.

BUT: J'ai récupéré mes fichiers perdus avec Handy Recovery, c’est-à-dire que SVN supprime simplement mes fichiers lors de la restauration.

Utilisez n’importe quel logiciel de récupération de données pour récupérer des fichiers annulés (comme trial Handy Recovery )

1
Peter Barbanyaga

J'ai eu beaucoup de chance de trouver un journal de modifications local du fichier (Révisions locales) dans le navigateur d'historique d'Eclipse. J'avais examiné les différences une par une et j'avais effectué quelques sauvegardes dans le fichier avant de l'écraser.

1
fyts

Non, SVN ne garde pas de journal ni de sauvegarde (bien qu'il existe une solution pour TortoiseSVN mentionnée dans les autres réponses). 

Mais au cas où quelqu'un parcourrait les réponses et n'aurait pas remarqué ce commentaire dans la question du PO:

"Heureusement dans ce cas, j'avais fait un" svn diff> temp.txt "avant de quitter le travail vendredi, et le fichier temp.txt était toujours sur mon disque dur. J'ai donc pu alimenter ce fichier en" patch "et le récupérer. mes changements perdus. "

J'imagine que c'est un paradigme commun de faire 'svn diff' AVANT de faire un 'svn revert'. Si vous avez l’habitude de le faire, même si le diff est renvoyé au terminal, vous avez au moins une possibilité pour récupérer vos modifications perdues.

0
shaneb