C'è un modo per recuperare da un "ripristino svn" accidentale?


94

Sono riuscito a spararmi al piede questa mattina facendo quanto segue:

  1. Ho iniziato a lavorare su una modifica al mio progetto
  2. Ho apportato molte modifiche a un gruppo di file
  3. Capì che il mio approccio era tutto sbagliato e che dovevo ricominciare da capo
  4. cd al livello più alto del mio progetto e ho eseguito un "svn --recursive revert". per ripristinare la mia sandbox locale allo stato precedente alle modifiche.
  5. Urlai inorridito quando mi resi conto che c'erano stati molti altri cambiamenti in sospeso nella mia sandbox locale, e li avevo appena cancellati tutti. (il server svn era stato disattivato venerdì scorso, quindi non ero stato in grado di registrarli e mi ero dimenticato di loro durante il fine settimana)

Fortunatamente in questo caso avevo fatto un "svn diff> temp.txt" prima di lasciare il lavoro venerdì, e il file temp.txt era ancora sul mio disco rigido, quindi sono stato in grado di inserire quel file in "patch" e recuperare il mio modifiche perse.

Ma per il mio riferimento futuro (cioè la prossima volta che commetto lo stesso stupido errore) ... c'è un modo per dire a svn di annullare un "svn revert"? Svn mantiene un backup dei diff locali / non archiviati ovunque?


34
IIRC TortoiseSVN sposta i file ripristinati nel cestino, ma il client della riga di comando SVN originale non presenta tali sfumature.
Dario Solera

1
Non riesco a trovare il file nel cestino. Sono sfortunato?
dalcantara

5
Commento in alto riguardo al cestino. Mi ha appena salvato la giornata!
OrganicPanda

2
anche il mio! grazie mille. Il file ripristinato è appena apparso nel cestino e potrebbe essere ripristinato.
sladda

1
Mi hai appena salvato il sedere con questa cosa del cestino !!!
Epirocks

Risposte:


79

No, (assolutamente) NO .

Se dici a Subversion che dovrebbe ripristinare un file, tutte le modifiche sono andate per il vento.

Solo la tua memoria può riaverli.

Eccezione: i nuovi file aggiunti, perderanno solo il loro stato "aggiunto", ma il file rimarrà in questa directory, solo lo stato è sconosciuto ("?")

Eccezione piattaforma / software: utilizzando TortoiseSVN su Windows, Ripristina prima getta i file nel Cestino e poi li ripristina. Puoi scavare nel Cestino per recuperare i file.


10
Addendum a quanto sopra: il controllo della versione ti aiuta solo se effettui effettivamente il commit dei file. Se sei nella posizione in cui uccidere la tua copia di lavoro ucciderà ore di lavoro, allora non ti impegni abbastanza frequentemente.
myron-semack

1
D'accordo ... in questo caso il server svn era inattivo, ed è per questo che avevo modifiche non confermate ancora in sospeso. : ^ (
Jeremy Friesner,

13
Sì!!! C'è un modo per recuperare a seconda del tuo O / S e / o IDE - leggi le altre risposte qui sotto prima di avere un attacco di cuore !!
HDave

2
Non è vero, è un po 'più complicato di un semplice NO. Usa uno strumento di ripristino o, se sei fortunato, i file sono nel cestino.
RaphMclee

1
@RalphMclee: dipende dalla piattaforma e dal client svn. TortoiseSVN salverà i nuovi file ripristinati nel cestino. Questa è solo un'eccezione. E dubito che uno strumento di ripristino possa ricostruire le modifiche dei file in modo coerente. È molto più facile e chiaro da ricordare: il ripristino distruggerà il tuo lavoro, usalo con attenzione!
Peter Parker

104

C'è una soluzione ... vai nel tuo cestino dove troverai l'ultima versione del file cancellato. Tortoise "getta" nel cestino ogni file che ripristina.


2
Per inciso, questo è anche il motivo per cui TortoiseSVN sembra così lento durante i ripristini. Spostare un file nel cestino è un'operazione molto lenta quando il cestino è pieno. È possibile disabilitare questa funzione nelle impostazioni "Generale - finestre di dialogo 1" di TortoiseSVN.
Wim Coenen,

8
Grazie amico, mi hai salvato! Ho accidentalmente fatto Revert e ho quasi perso 2 settimane di lavoro. Per fortuna l'ho trovato nel cestino.
Arie Livshin

2
@ArieLivshin, perché dovresti lavorare per 2 settimane senza impegnarti? Sembra che tu abbia bisogno di saperne di più sui rami.
JoelFan

Fastidiosamente ankhsvn non lo fa
Phil Hale

Grazie .. Molto utile.
Prem Singh Bist

32

Non proprio specifico di Subversion, ma se stai lavorando con Eclipse, puoi tentare la fortuna nella storia locale.

Ora, qualcosa di un po 'più specifico di Subversion: se non vuoi fare un branch per ogni modifica che fai, puoi tenere un paio di trunk controllati localmente (trunk-modif-1, trunk-modif-2 .. .). Ogni "modifica" viene eseguita su un albero separato e devi solo tenere un elenco di quali check out corrispondono a quale modifica.

Oppure potresti usare Git localmente ma non l'ho mai provato.


3
Cordiali saluti: accedi alla cronologia locale tramite il menu di scelta rapida "Ripristina dalla cronologia locale".
HDave

Per la parte di Eclipse, qui è una risposta più concreta: stackoverflow.com/a/18220708/517705
Sk8erPeter

14

Recentemente ho commesso questo errore di non eseguire il commit di nuove modifiche ai file (circa 10) su SVN e sono scomparse tutte a causa del mio stupido errore. Ma quello che mi ha salvato è stata l'opzione "Ripristina versioni precedenti" di Windows nel menu contestuale. Phew è stato un sollievo e ho imparato una lezione.


Grazie! Questo mi ha salvato dal rifare ore di lavoro! Non ho mai visto questa funzionalità di Windows prima, ma mi ha salvato la pancetta!
NibblyPig

Dove posso spedire i 6000 $ che ti devo per aver risparmiato così giorni di lavoro? Lezione appresa ...
HDave

Grazie, mi ha salvato la giornata.
Opax Web

Tengo disattivato il checkpoint che supporta tale ripristino perché rovina le prestazioni. Recentemente, Eclipse ha cancellato una cartella dei miei progetti incluso il suo archivio git, a causa di un problema con la sua funzione Annulla, e avrei preferito averla attivata. Tuttavia, un programma Windows chiamato Recuva mi ha salvato cercando nello spazio file cancellato. Sono stato molto attento a non aggiungere altro contenuto all'unità interessata fino a quando non ho ripristinato tutti i miei file e mi ha fornito tutti i file di origine modificati dal mio backup più recente una settimana prima. I file binari erano per lo più non recuperabili.
Carl

8

Non è possibile recuperare i file se si utilizza il client della riga di comando svn .

Ma puoi recuperarli, se stai usando TortoiseSVN come client svn. TortoiseSVN li sposterà automaticamente nel Cestino. Puoi ripristinarli da lì dopo un ripristino accidentale.

Questa è un'opzione configurabile in TortoiseSVN. È in Impostazioni -> Finestra di dialogo 1 -> Usa cestino durante il ripristino.

Per impostazione predefinita è selezionata, il che significa che i file vengono spostati nel cestino. Se vuoi (per lo più non ti interessa disabilitarlo. Se hai un motivo, fammelo sapere)


1
Fantastico! ... mi ha salvato
Janani Kumar

6

Se stai usando InteliJ, sei una persona fortunata. Nel menu in alto, hai un'opzione di controllo della versione e sotto di essa troverai l'opzione della cronologia locale, dove troverai tutta la cronologia per il file selezionato, incluse tutte le operazioni che hai fatto con quel file (aggiornamento, commit, ripristino).

Buona fortuna, Arkde


1
E se si trattava di un nuovo file, il file stesso verrà eliminato. In tal caso, seleziona la cartella in cui si trovava il file dalla vista Progetto, quindi seleziona "Cronologia locale". IntelliJ ha salvato di nuovo la situazione.
Nufail

4

Inoltre, se hai ripristinato il codice .NET (file .cs ecc.) E hai creato la tua applicazione prima di ripristinarla, ma dopo aver apportato modifiche, puoi ripristinare le modifiche dal file di assieme utilizzando uno degli strumenti del riflettore per visualizzare il codice.


2

Ho ripristinato la soluzione (Visual Studio + AnkhSVN) e ho perso le modifiche di pochi file. Non riesco a trovare il file nel cestino.

MA: ho recuperato i miei file persi con Handy Recovery, cioè SVN cancella i miei file al ripristino.

Utilizzare qualsiasi software di recupero dati per recuperare i file ripristinati (come Handy Recovery di prova )


2

Sono stato estremamente fortunato a trovare un registro delle modifiche locale del file (Revisioni locali) nel browser della cronologia in Eclipse. Stavo esaminando le differenze una per una e avevo fatto un paio di salvataggi sul file prima di sovrascriverle.


1

No, SVN non conserva un registro o un backup (sebbene esista una soluzione per TortoiseSVN annotata nelle altre risposte).

Ma nel caso qualcuno stia sfogliando le risposte e non abbia notato questo commento nella domanda dell'OP:

"Fortunatamente in questo caso avevo fatto un" svn diff> temp.txt "prima di lasciare il lavoro venerdì, e il file temp.txt era ancora sul mio disco rigido, quindi sono stato in grado di inserire quel file in" patch "e ripristinare le mie modifiche perse. "

Immagino che sia un paradigma comune fare "svn diff" PRIMA di eseguire un "svn revert". Se prendi l'abitudine di farlo, anche se il diff è solo eco al terminale, hai almeno una possibile strada per recuperare le modifiche perse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.