SVN annulla la cancellazione prima del commit


135

Se elimini una directory da una copia di lavoro SVN, ma non hai ancora eseguito il commit, non è ovvio come ripristinarla. Google suggerisce persino "svn annulla eliminazione prima del commit" come query comune quando si digita "svn annulla d", ma i risultati della ricerca non sono utili.

modifica: Vorrei una soluzione che funziona in sovversione 1.4.4


Esistono directory di pari livello rispetto a quelle che hai eliminato con modifiche in sospeso? In tal caso, fai attenzione quando torni da un livello superiore, potresti perdere le modifiche.
Russell,

Risposte:


145

svn revert deletedDirectory

Ecco la documentazione per il svn revertcomando.


MODIFICARE

Se è deletedDirectorystato eliminato usando rmdire no svn rm, dovrai farlo

svn update deletedDirectory

anziché.


3
Deve essere nuovo, non funziona in SVN 1.4.4. (È stata la prima cosa che ho provato.)
LaC,

4
Questo è ciò che dice 1.4.4, a proposito: $ svn aiuta a ripristinare ripristina: Ripristina file di copia di lavoro incontaminato (annulla la maggior parte delle modifiche locali). utilizzo: ripristina PERCORSO ... Nota: questo sottocomando non richiede l'accesso alla rete e risolve eventuali stati in conflitto. Tuttavia, non ripristina le directory rimosse.
LaC,

1
1.6.6 ha lo stesso testo nella guida, ma ha funzionato per me quando l'ho provato. Nota che se non hai usato svn deleteper cancellare la directory, ma invece l' rmdirhai eliminata usando , dovrai svn update deletedDirectoryinvece.
Michael Hackner,

Ho eliminato un file (svn del) da una directory svn-ed locale. L'aggiornamento svn non ha funzionato, ma il ripristino svn ha funzionato. Stavo usando SynchroSVN per Mac. Tuttavia, grazie per i suggerimenti.
Karim,

5
Come per il link, usa svn -R ripristina per ripristinare l'intera directory con tutti i contenuti, che è probabilmente quello che vuoi. svn ripristina senza -R ripristina solo la directory, non i contenuti.
n13

156

1) fare

svn revert . --recursive

2) analizzare l'output per errori come

"Failed to revert 'dir1/dir2' -- try updating instead."

3) chiama svn up per ciascuna delle directory degli errori:

svn up dir1/dir2

12
Questa è la risposta più accurata, grazie mille, mi hai aiutato molto.
Greenoldman,

1
Tranne che ripristina tutto? Potresti non volerlo fare.
n13

1
Questo ha più senso se hai un'intera cartella che SVN pensa sia stata eliminata. L'ho avuto mentre controllavo una copia funzionante. Esisteva già una cartella, quindi è stata messa in conflitto e non è stata estratta. Era un collegamento a un'altra cartella. L'ho rinominato e ho provato svn upa farlo controllare, ho capito il conflitto, l'ho fatto svn resolved fooe svn statusmi hanno detto che avevo circa 10k file contrassegnati come D. svn upe svn revertnon li ha recuperati, ma questo ha risolto il problema.
simbabque,

6
+1 per il --recursivequale aiuta a ripristinare i contenuti delle directory cancellate.
Melebio

1
Oh mio Dio, mi hai salvato la serata!
ArturOlszak,

32

Ciò che ha funzionato per me è

svn revert --depth infinity deletedDir

Questo ha funzionato benissimo per me (svn 1.7.10) in cui svn ripristina l'eliminazione di Dir non è riuscita. Risposta eccellente.
Roma,

4

Esegui un'operazione (ricorsiva) di ripristino da un livello sopra la directory che hai eliminato.


1
Questo cancellerà MODO più cambiamenti del necessario.
Michael Hackner,

Questo non funziona con Subversion 1.4.4 (l'ho appena provato). svn help ripristina dice anche "questo sottocomando non richiede l'accesso alla rete e risolve eventuali stati in conflitto. Tuttavia, non ripristina le directory rimosse." Mi dispiace, avrei dovuto specificare la versione. 1.4.4 è ciò che viene fornito con Mac OS X 10.5.
LaC,

4

Per trasformarlo in una fodera puoi provare qualcosa del tipo:

svn status | cut -d ' ' -f 8 | xargs svn revert

Posso creare una directory con spazi nel suo nome. Potrebbe rompere AFAIK 'tagliato'.
Denis Barmenkov,

1

La soluzione più semplice che ho trovato è stata quella di eliminare la directory principale dalla copia di lavoro (con rm -rf, non svn delete), e quindi eseguire svn update nel nonno. Ad esempio, se hai eliminato a / b / c, rm -rf a / b, cd a, svn su. Ciò riporta tutto indietro. Naturalmente, questa è solo una buona soluzione se non ci sono altre modifiche non confermate nella directory principale che si desidera conservare.

Spero che questa pagina sia in cima ai risultati la prossima volta che google questa domanda. Sarebbe ancora meglio se qualcuno suggerisse un metodo più pulito, ovviamente.


Ciò presuppone che non ci siano sottodirectory nel genitore con modifiche in sospeso.
Russell,

0

È possibile rimuovere la cartella e aggiornare la directory principale prima di eseguire il commit:

rm -r some_dir

svn update some_dir_parent

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.