Come "ripristinare" una cartella eliminata in Subversion / TortoiseSVN?


96

Abbiamo cancellato accidentalmente la cartella "tag" dal nostro repository Subversion dove intendevamo eliminare solo un tag specifico. Qual è il modo più semplice per recuperare la cartella "tag"?

Usiamo TortoiseSVN come nostro client e ho pensato che quando vado nel browser del repository e mostro il registro, ci sarà qualcosa come "annulla le modifiche da questa revisione", in modo simile a quello che puoi vedere in una finestra di dialogo simile sulla tua copia di lavoro. Ma non esiste un tale comando lì ...

Risposte:


115

Basta copiare la cartella eliminata da una revisione precedente.

Nel browser del repository, fai clic sul pulsante con l'etichetta HEAD (nell'angolo in alto a destra) per mostrare a una revisione la tua cartella esiste ancora, quindi fai clic con il pulsante destro del mouse su quella cartella e seleziona "Copia in ..." e inserisci il percorso lì desidera che la cartella venga ricreata (probabilmente lo stesso percorso che è già nella casella di testo).


4
Ottimo consiglio, grazie. One TortoiseSVN gotcha - in quella finestra di dialogo "copia in ..." ho dovuto cambiare il percorso da "example.com/svn/tags" a "tags1" e poi di nuovo per abilitare il pulsante OK.
Borek Bernard

2
Questo potrebbe andare bene per i tag, ma non dovrebbe essere fatto per ripristinare qualsiasi altra cartella poiché perderai la cronologia
slckin

3
Conserva la storia, lo ha fatto anche solo.
acdcjunior

assicurati solo di deselezionare "Interrompi in copia / rinomina" durante la visualizzazione del registro, perché altrimenti TortoiseSVN non mostrerà la cronologia prima dell'azione di ripristino (ovviamente) ...
Oli

Ha funzionato completamente. Mi ha fatto risparmiare molto tempo. Grazie :)
dgupta3091

78

per gli appassionati della riga di comando:

  • prima trova il numero di revisione in cui è avvenuta l'eliminazione:

    svn log -v http://svnserver/path/to/folderContainingDeletedFolder
    

diciamo che trovi che la directory è stata cancellata nella revisione 999 (btw: potresti trovare più facile trovare il numero di revisione con il browser del repository svn)

  • copia la cartella dalla revisione meno 1

    svn copy http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder@998 http://svnserver/path/to/folderContainingDeletedFolder/deletedFolder -m "undeleted folder"
    

voilà hai finito!

nel tuo caso potrebbe essere:

    svn copy http://svnserver/project/tags@998 http://svnserver/project/tags -m "undeleted folder"

1
Grazie .. ho risparmiato un sacco di tempo
Dharani Kumar

Questo ha appena salvato la mia pancetta!
axiopisty

Volevo solo confermare che l'approccio "copia svn" in effetti preserva tutta la cronologia, e per le cartelle opera in modo ricorsivo, ripristinando la cartella e tutti i figli.
WallStProg

11

La maggior parte di queste risposte funzionerà fino a un certo punto, ma la risposta corretta è quella di Daniel. Fai un'unione inversa. In questo modo mantieni la cronologia delle versioni.

svn merge -r R1:R2

dove R1 è la revisione in cui ti trovi e R2 è la revisione che contiene il file o la cartella eliminati.


1
In una fusione inversa, R1 dovrebbe essere la revisione che si desidera ripristinare con R2 come revisione precedente.
arleslie

2
Non perdi alcuna storia con svn copy.
maxschlepzig

Per quelli di noi che non sono appassionati della riga di comando, vedere: tortoisesvn.net/docs/nightly/TortoiseSVN_en/…
Pascal

2
Questo non ripristinerebbe tutti i file / cartelle eliminati? Funzionerebbe se volessi ripristinare solo una specifica cartella eliminata ma non altre cartelle eliminate?
GU 7

8

Dovrai fare un'unione inversa .

Per i dettagli su come farlo (e praticamente qualsiasi altra cosa che vorresti o avresti mai dovuto fare con SVN), il libro ufficiale è disponibile online .


3

A seguito della risposta di Raudi che ha funzionato per me dopo questa revisione.

Alcuni client svn potrebbero richiedere il numero di revisione specificato utilizzando il parametro di revisione -r invece di utilizzare @ dopo la cartella come segue:

svn copy svn://svnserver/project/tags svn://svnserver/project/tags **-r 998** -m "undeleted folder"

Se stai ripristinando da una cartella che esiste ancora, allora -r <revision>funzionerà. Tuttavia, se stai tentando di ripristinare la cartella direttamente, dovrai utilizzare @<revision>. Altrimenti ti dirà che il file non è stato trovato.
arleslie

2

Vai al Repository Browsertuo repository, fai clic con il tasto destro sulla cartella principale in cui esisteva la cartella eliminata . Ora, Show Logdalla cartella principale, e seleziona la revisione precedente in cui hai eseguito l'operazione di cancellazione. Avrai un elenco e fai clic con il pulsante destro del mouse sulla cartella dalle informazioni di revisione e seleziona Update to this Revision.

Hai fatto


Oh capisco, non era nella finestra di dialogo Mostra registro ma nella finestra principale del browser del repository. Tuttavia, quel comando tenterà di aggiornare la mia copia di lavoro locale mentre vorrei risolvere questo problema direttamente sul server (puoi immaginare che il controllo di centinaia di tag, ciascuno contenente migliaia di file, non è esattamente quello che vorrei fare).
Borek Bernard,

Ha funzionato per me. L'opzione del menu contestuale (facendo clic con il pulsante destro del mouse) è "Ripristina modifiche da questa revisione" e annullerebbe l'unione delle modifiche.
hsg
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.