Desidero eliminare le revisioni dal mio repository SVN


33

Le ultime revisioni nel mio repository di codici sono state danneggiate e hanno destabilizzato la mia app. Voglio tornare a una revisione precedente.

Ma non voglio semplicemente usare "ripristina" sulla mia copia di lavoro; In realtà voglio eliminare la mia revisione principale e diverse revisioni precedenti nel mio repository, in tal modo "ripristinando" il mio repository in una revisione precedente, che diventerebbe la revisione principale. Qualcuno sa come lo farei?


1
Non puoi davvero cancellare le vecchie revisioni, tutto ciò che puoi fare è invertire le modifiche e commetterle, come menzionato da Felix. Interessante sidenote, Git (così come altre soluzioni di controllo della versione) in realtà ti consente di eliminare veramente le revisioni ..
davr

3
Sì, puoi solo accedere al repository SVN con svnadmin. Vedi la mia risposta qui sotto.
martin,

davr ha tecnicamente ragione. Quello che descrivi è il dumping di tutte le revisioni tranne quelle sbagliate, quindi il dumping sopra il vecchio repository. Nella mia mente non è proprio la stessa cosa di "cancellare" una revisione.
Sirex,

Risposte:


12

Forse questo link ti aiuta a:

http://www.sampablokuper.com/2009/03/27/svn-revert-to-revision/

Citazione:

  1. Passare alla directory principale all'interno della copia di lavoro (presupponendo che si desideri ripristinare l'intera copia di lavoro).

  2. esegui svn revertper ripristinare i file della tua copia di lavoro allo stato in cui si trovavano quando hai eseguito il commit / il check-out.

  3. corri svn status -vper vedere a quale numero di revisione corrisponde la tua copia di lavoro (è il numero di revisione più alto nell'elenco che svn status -vproduce).

  4. eseguire svn merge -rXX:YYdove XXè il numero ottenuto nel passaggio precedente ed YYè il numero della revisione che si desidera ripristinare.

  5. Fatto! La possibile eccezione a ciò è che i file nella tua copia di lavoro che non esistevano al momento della revisione YYoriginale, saranno ancora lì, perché per impostazione predefinita svn non rimuove le cose. Se vuoi sbarazzartene, esegui uno svn del [filename]su ciascuno di essi.

  6. Molto bene! Ora gioca con la tua copia di lavoro come se tutte quelle modifiche intermedie non fossero mai avvenute. E quando sei pronto a impegnare i tuoi sforzi, usa svn commit come al solito!


1
In Windows OS, l'opzione # 4 esegue svn merge -rXX:YY .Ricorda di inserire un punto alla fine della riga per fare riferimento alla directory corrente. E in TortoiseSVN, c'è un'opzione per invertire l'unione.
Shantha Kumara

3
Questo in realtà non ripristina la "revisione precedente, che diventerebbe la revisione principale". Non trasforma la revisione precedente in HEAD. Piuttosto, crea una nuova TESTA. Vedi la risposta di Martin.
Matthew Flaschen,

Ho modificato la risposta per includere l'osservazione di Shantha sul periodo finale. Questo è lo stesso anche su * nix.
Mike Kormendy,

72

Questo ha funzionato per me. Dato che hai la revisione 1234 come HEAD e vuoi ripristinare gli ultimi tre commit:

svnadmin create newrepo
svnadmin dump -r 0:1231 repo | svnadmin load newrepo
mv repo oldrepo
mv newrepo repo

12
+1. Sei l'unico che entrambi hanno capito la domanda e hanno dato una risposta specifica.
Matthew Flaschen,

6
Questa è tecnicamente la risposta giusta. Va notato, tuttavia, che questo, oltre a essere forse piuttosto complicato da fare, invaliderà anche tutte le copie di cui è stato effettuato il check-out, quindi è necessario avvisare chiunque utilizzi anche il repository.
sleske,

1
facile e veloce, al punto e in realtà ciò che il poster ha richiesto.
unc0nnected l'

7
Fintanto che assicurati di copiare anche l'UUID del repository sul nuovo repository (vedi "svnadmin setuuid", copiando dall'UUID in "svn info" sul vecchio repository), solo i checkout aggiornati alle revisioni che stai tagliando saranno essere invalidato.
Bryan Petty,

1
Sui nuovi repository potrebbe essere necessario correggere i permessi dei file o copiarli nei file hook / conf directory
AdamS

5

So che questa è una vecchia domanda, tuttavia, ho appena scoperto come farlo con Windows / TortoiseSVN.

Come suggerito da un commento, non è possibile "eliminare" una revisione, ma ciò che è possibile fare è effettuare una revisione più attuale che è la stessa della revisione che si desidera ripristinare.

  1. Verifica HEAD del repository per la directory da cui desideri ripristinare la revisione.
  2. Caricare la vista "Mostra registro" in TortoiseSVN per la directory di livello più alto che si desidera ripristinare (ad esempio "Trunk").
  3. Fare clic con il tasto destro del mouse sulla revisione che si desidera rimuovere NOTA: questa è la revisione che si desidera rimuovere, non quella che si desidera ripristinare.
  4. Seleziona "Ripristina modifiche da questa revisione".
  5. Fai clic su "Sì" al prompt.
  6. Aggiorna il checkout normalmente, ma su "HEAD".
  7. Riprova.

Dovrai quindi andare a tutti gli altri che hanno eseguito il check-out e farli aggiornare e assicurarti di rimuovere tutti i nuovi file.

Inoltre, dovrai assicurarti che tutti sappiano cos'è quella revisione e potenzialmente aggiornare la descrizione.


in che modo differisce dalla normale procedura di "ripristino"?
Tomer W,

Un Ripristino modifica semplicemente la tua copia di lavoro con ciò che è nel repository ... ecco come fare in modo che HEAD di un report rifletta lo stato di qualsiasi commit precedente.
Martin,

1
Grazie per questo - In questo modo la tartaruga SVN era proprio ciò di cui avevo bisogno per ripristinare un impegno errato :)
Dr. Andrew Burnett-Thompson,

C'è anche una voce del menu contestuale " Ripristina questa revisione " nella finestra Log.
Uwe Keim,

4

A tale scopo è possibile utilizzare dump / caricamento.

Puoi anche usare svnsync per fare un backup su qualche revisione.

Se hai un grande repository, ci vorrà del tempo.


3

Per me (VisualSVN, 30-HEAD) funziona così:

  del C: \ Repositories \ MyRepo \ revs \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revs \ 0 \ 28
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 30
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 29
  del C: \ Repositories \ MyRepo \ revprops \ 0 \ 28
  echo 27> C: \ Repositories \ MyRepo \ db \ current
  


In che modo è meglio di altre risposte?
Toto

È molto più veloce
Anton Golikhoff,

0

Vai al terminale e vai al repository svn: ora digita

svn update -r "numero di revisione che si desidera ripristinare"


2
Benvenuto in Super User! Si prega di leggere di nuovo attentamente la domanda. La tua risposta non risponde alla domanda originale. OP dice "Non voglio semplicemente usare" ripristina "sulla mia copia di lavoro"
DavidPostill
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.