Existe-t-il un moyen de récupérer après un «svn revert» accidentel?

94

J'ai réussi à me tirer une balle dans le pied ce matin en faisant ce qui suit:

  1. J'ai commencé à travailler sur une modification de mon projet
  2. J'ai apporté un tas de modifications à un tas de fichiers
  3. Je me suis rendu compte que mon approche était complètement fausse et que je devais recommencer
  4. cd au niveau supérieur de mon projet et a effectué un "svn --recursive revert". pour restaurer mon bac à sable local à son état d'avant les modifications.
  5. J'ai hurlé d'horreur quand j'ai réalisé qu'il y avait eu un certain nombre d'autres changements en suspens dans mon bac à sable local, et je venais de les effacer tous. (le serveur svn était en panne vendredi dernier, je n'avais donc pas pu les enregistrer et je les avais oubliés pendant le week-end)

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, donc j'ai pu alimenter ce fichier dans "patch" et récupérer mon modifications perdues.

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

Jeremy Friesner
la source
34
IIRC TortoiseSVN déplace les fichiers rétablis dans la corbeille, mais le client de ligne de commande SVN d'origine n'a pas de telles nuances.
Dario Solera
1
Je ne trouve pas le fichier dans la corbeille. Suis-je pas de chance?
dalcantara le
5
Top commentaire concernant la corbeille. Cela m'a sauvé la journée!
OrganicPanda
2
le mien aussi! Merci beaucoup. Le fichier rétabli vient d'apparaître dans ma corbeille et peut être restauré.
sladda
1
Vous venez de sauver mon dos avec ce truc de corbeille !!!
Epirocks

Réponses:

79

Non, (absolument) NON .

Si vous dites à Subversion qu'il doit rétablir un fichier, toutes les modifications ont disparu par le vent.

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

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

Exception de plate-forme / logiciel: en utilisant TortoiseSVN sous Windows, Revert lance d'abord les fichiers dans la corbeille, puis les rétablit. Vous pouvez fouiller dans la corbeille pour récupérer les fichiers.

Peter Parker
la source
10
Addendum à ce qui précède: Le contrôle de version ne vous aide que si vous validez réellement les fichiers. Si vous êtes dans une position où tuer votre copie de travail tuera des heures de travail, alors vous ne vous engagez pas assez souvent.
myron-semack
1
D'accord ... dans ce cas, le serveur svn était en panne, et c'est pourquoi j'avais des modifications non validées toujours en attente. : ^ (
Jeremy Friesner
13
Oui!!! Il existe un moyen de récupérer en fonction de votre O / S et / ou IDE - lisez les autres réponses ci-dessous avant d'avoir une crise cardiaque !!
HDave
2
Ce n'est pas vrai, c'est un peu plus compliqué qu'un simple NON. Utilisez un outil de récupération ou si vous avez de la chance, les fichiers sont dans la corbeille.
RaphMclee
1
@RalphMclee: Cela dépend de la plate-forme et du client svn. TortoiseSVN enregistrera les nouveaux fichiers restaurés dans la corbeille. Ceci est simplement une exception. Et je doute qu'un outil de récupération puisse reconstruire les modifications de vos fichiers de manière cohérente. C'est beaucoup plus facile et plus clair à retenir: revenir en arrière détruira votre travail, utilisez-le avec précaution!
Peter Parker
104

Il existe une solution ... allez dans votre corbeille vous y trouverez la dernière version du fichier supprimé. Tortue "jette" dans la corbeille tous les fichiers qu'elle retourne.

shto
la source
2
Incidemment, c'est aussi pourquoi TortoiseSVN semble si lent lors des retours. Le déplacement d'un fichier vers la corbeille est une opération très lente lorsque la corbeille est pleine. Vous pouvez désactiver cette fonction dans les paramètres "Général - dialogues 1" de TortoiseSVN.
Wim Coenen
8
Merci mec, tu m'as sauvé! J'ai accidentellement fait Revert et j'ai failli perdre 2 semaines de travail. Heureusement, je l'ai trouvé dans la corbeille.
Arie Livshin
2
@ArieLivshin, pourquoi travailleriez-vous 2 semaines sans vous engager? Il semble que vous ayez besoin d'en savoir plus sur les succursales.
JoelFan
Ankhsvn ne fait pas ça de façon ennuyeuse
Phil Hale
Merci .. Très utile.
Prem Singh Bist
32

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 que vous faites, vous pouvez garder quelques troncs vérifiés localement (trunk-modif-1, trunk-modif-2 .. .). Chaque "modification" se fait sur une arborescence séparée et il suffit de garder une liste dont les extractions correspondent à quelle modification.

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

Vladimir
la source
3
FYI - accédez à l'histoire locale via le menu contextuel du clic droit "Restaurer à partir de l'histoire locale".
HDave
Pour la partie Eclipse, voici une réponse plus concrète: stackoverflow.com/a/18220708/517705
Sk8erPeter
14

Récemment fait cette erreur de ne pas commettre de nouveaux changements de fichiers (environ 10) sur SVN et ils ont tous disparu à cause de ma stupide erreur. Mais ce qui m'a sauvé, c'est l'option "Restaurer les versions précédentes" de la fenêtre dans le menu contextuel. Ouf, c'était un soulagement et une leçon apprise.

JProgrammeur
la source
Je vous remercie! Cela m'a évité de refaire des heures de travail! Je n'ai jamais vu cette fonctionnalité des fenêtres auparavant, mais cela a sauvé mon bacon!
NibblyPig
Où puis-je envoyer les 6000 $ que je vous dois pour cela ayant ainsi économisé des jours de travail? Leçon apprise ...
HDave
Merci, cela m'a sauvé la journée.
Opax Web
Je garde le point de contrôle prenant en charge une telle restauration désactivé car il ruine les performances. Récemment, Eclipse a supprimé un dossier de mes projets, y compris son archive git, en raison d'un problème avec sa fonction Annuler, et j'aurais plutôt souhaité l'avoir activé. Cependant, un programme Windows appelé Recuva m'a sauvé en recherchant l'espace fichier supprimé. J'ai fait très attention de ne pas ajouter de contenu supplémentaire au lecteur affecté jusqu'à ce que j'aie récupéré tous mes fichiers, et cela m'a donné chaque fichier source modifié depuis ma dernière sauvegarde une semaine plus tôt. Les fichiers binaires n'étaient pour la plupart pas récupérables.
Carl
8

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

Mais vous pouvez les récupérer si vous utilisez TortoiseSVN comme 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. C'est sous Paramètres -> Boîte de dialogue 1 -> Utiliser la corbeille lors du retour.

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

Manohar
la source
1
Génial! ... m'a sauvé
Janani Kumar
6

Si vous utilisez InteliJ, vous êtes une personne chanceuse. Dans le menu supérieur, vous avez une option de contrôle de version, et en dessous, vous trouverez l'option d'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 (mise à jour, validation, restauration).

Bonne chance, Arkde

Aurelian Cotuna
la source
1
Et s'il s'agissait d'un nouveau fichier, le fichier lui-même sera supprimé. Dans ce cas, sélectionnez le dossier dans lequel se trouvait le fichier à partir de la vue Projet, puis sélectionnez «Historique local». IntelliJ a de nouveau sauvé la situation.
Nufail
4

De plus, si vous avez rétabli votre code .NET (fichiers .cs, etc.) et que vous avez construit votre application avant de revenir, mais après avoir apporté des modifications, vous pouvez récupérer les modifications du fichier d'assemblage à l'aide de l'un des outils de réflecteur pour afficher le code.

scor4er
la source
2

J'ai annulé la solution (Visual Studio + AnkhSVN) et j'ai perdu les modifications de quelques fichiers. Je ne trouve pas le fichier dans la corbeille.

MAIS: j'ai récupéré mes fichiers perdus avec Handy Recovery, c'est-à-dire que SVN supprime simplement mes fichiers lors du retour.

Utilisez n'importe quel logiciel de récupération de données pour récupérer les fichiers restaurés (comme l'essai Handy Recovery )

Peter Barbanyaga
la source
2

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

fyts
la source
1

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

Mais au cas où quelqu'un parcourt les réponses et n'a 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, donc j'ai pu alimenter ce fichier dans" patch "et récupérer mes changements perdus. "

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

shaneb
la source