2011-08-26 11 views
14

È possibile nel server svn rimuovere una revisione come se non fosse mai esistita?SVN Annulla traccia, elimina una revisione come se non fosse mai esistita?

Così abbiamo le seguenti modifiche:

1004 // Commit of some bogus code that broke the build and was just wrong 
1003 // Change 1.2 
1002 // Change 1.1 
1001 
1000 *** Initial checkin 

Possiamo togliamo il 1004 in svn e tornare al 1003, come se 1004 non è mai esistito?

Perdona la mia ignoranza, sto ancora imparando come usare SVN.

risposta

14

I sistemi VCS sono progettati specificamente per rendere questo più complicato possibile. Di solito non vuoi farlo.

Detto questo, dalla documentazione ufficiale:

Ci sono casi particolari in cui si potrebbe desiderare di distruggere tutte le prove di un file o commettere. (Forse qualcuno ha accidentalmente commesso un documento confidenziale.) Questo non è così facile, perché Subversion è stato progettato deliberatamente per non perdere mai le informazioni. Le revisioni sono alberi immutabili che si fondono l'un l'altro. Rimuovere una revisione dalla cronologia causerebbe un effetto domino, creando il caos in tutte le revisioni successive ed eventualmente invalidando tutte le copie di lavoro.

Il progetto ha in programma, tuttavia, di implementare un giorno un comando svnadmin obliterate che consentirebbe l'eliminazione definitiva delle informazioni. (Vedere issue 516.)

Nel frattempo, l'unica soluzione è quella di svnadmin dump il repository, quindi il tubo del dumpfile attraverso svndumpfilter (escluso il cattivo percorso) in un comando svnadmin load. Vedi chapter 5 del libro Subversion per i dettagli su questo.

http://subversion.apache.org/faq.html#removal

+0

Grande, grazie per le informazioni, sembra più lavoro di quello che vale per il problema che sto cercando di risolvere. Penso che dovrò fare un aggiornamento, controllare la revisione di cui ho bisogno per ricoprire in una cartella separata. Esportare questi file sul mio codice di accesso, risolvere eventuali problemi e ricontrollare. – Mantisimo

+0

Non la più pulita delle soluzioni anche se – Mantisimo

+1

@Mantisimo: Martin ha dato questa risposta perché hai chiesto "di rimuovere una revisione ** come se non fosse mai esistita ** ". Ciò che pensava era così: non dovrebbe nemmeno comparire nella cronologia del registro. Se è quello che vuoi, la sua risposta è quella giusta. Se vuoi solo annullare un commit, allora la mia soluzione è quella giusta. –

26

Questi incidenti hapen, e non è un problema se SVN li tiene nella sua storia. Ciò che è importante è riparare l'incidente. Il modo per farlo è ripristinare le modifiche apportate da questo commit. utilizzare i seguenti comandi:

svn merge -r [current_version]:[previous_version] [repository_url] 
svn commit -m “Reverting previous commit and going back to revision [previous_version].” 

Se stai usando TortoiseSVN, si può solo mostrare i registri, selezionare il commit, e scegliere "Ripristina le modifiche da questa revisione" nel menu contestuale. Cambierà la tua copia di lavoro alla versione precedente e dovrai solo eseguire il commit.

Immagino che altri client grafici abbiano la stessa opzione.

+2

Hi JB, Grazie per il vostro suggerimento, questo è quello che volevo fare , tuttavia, ho dato a Martin la risposta corretta in risposta alla mia domanda iniziale. Ho provato questo, ma la build che ho rotto è stata una fusione composita di un certo numero di cose e non sembra funzionare. Ho dovuto ricorrere a più misure manuali alla fine. Penso che per una inversione meno complicata sarebbe una soluzione ideale (l'esempio di domanda era una semplificazione eccessiva del mio problema). Grazie. – Mantisimo

0

È possibile creare un dump del repository corrente e saltare la falsa revisione nel dump. È quindi possibile caricare il dump su un nuovo repository sullo stesso server o su uno diverso.

4

È possibile spostare il tronco ad un altro ramo (backup) e copiare la revisione corretta schiena al tronco

svn mv trunk https://svn_path/tags/trunk_broken 
svn cp -r revNo http://svn_path/tags/trunk_broken http://svn_path/trunk 

Si prega di notare il numero di revisione viene incrementato e tutte le modifiche saranno visualizzati in svn log.

0

Si consiglia di lasciare la revisione se non si dispone di una vera ragione (ad esempio mancanza di spazio) per rimuoverla. Questo è il lavoro principale del server SVN, per mantenere le modifiche.

+0

questo è solo il tuo _recommendation_ e _observation_ ma non risponde in modo particolare alla domanda effettiva – staticVoidMan

Problemi correlati