Domanda

Ho eliminato un file da un repository e ora voglio reinserirlo.La cosa migliore che riesco a capire è:

  • aggiornare alla revisione prima dell'eliminazione
  • copiare i file altrove
  • aggiornamento alla testa
  • copiare nuovamente i file
  • aggiungerli
  • commettere

Ha un cattivo odore e per giunta perde tutta la storia.Deve esserci un modo migliore per farlo.Ho già guardato dentro Il libro SVN ma non ho trovato nulla e ora sto guardando l'elenco dei tag SVN.

È stato utile?

Soluzione

Usa svn merge:

svn merge -c -[rev num that deleted the file] http://<path to repository>

Quindi un esempio:

svn merge -c -12345 https://svn.mysite.com/svn/repo/project/trunk
             ^ The negative is important

Per TortoiseSVN (penso ...)

  • Fai clic destro in Explorer, vai a TortoiseSVN - > Unisci ...
  • Assicurati " Unisci una serie di revisioni " è selezionato, fai clic su Avanti
  • Nel " Intervallo di revisione per unire " casella di testo, specifica la revisione che ha rimosso il file
  • Controlla " Inverti unione " casella di controllo, fare clic su Avanti
  • Fai clic su Unisci

Questo è completamente non testato, tuttavia.


Modificato da OP : funziona sulla mia versione di TortoiseSVN (il vecchio tipo senza il pulsante successivo)

  • Vai alla cartella da cui sono state eliminate le cose
  • Fai clic destro in Explorer, vai a TortoiseSVN - > Unisci ...
  • nella sezione Da inserisci la revisione che ha fatto l'eliminazione
  • nella sezione A inserisci la revisione prima dell'eliminazione.
  • Fai clic su " unisci "
  • commit

Il trucco è unire indietro . Complimenti a sean.bright per avermi indicato nella giusta direzione!


Modifica: stiamo utilizzando versioni diverse. Il metodo che ho descritto ha funzionato perfettamente con la mia versione di TortoiseSVN.

Inoltre, tieni presente che se ci sono state più modifiche nel commit che stai unendo al contrario, vorrai ripristinare quelle altre modifiche una volta effettuata l'unione prima di eseguire il commit. In caso contrario, anche queste modifiche extra verranno annullate.

Altri suggerimenti

Il problema con l'unione svn come suggerito da Sean Bright è che reintroduce altre modifiche apportate nella stessa revisione dell'eliminazione. Una copia svn è un'operazione più mirata che interesserà solo i file eliminati.

Usando Tortoise SVN è possibile resuscitare un file che è stato cancellato dalla directory della copia di lavoro e dalle successive revisioni SVN, tramite una copia svn come segue:

  • Passa alla cartella della copia di lavoro che precedentemente conteneva il file.
  • Fai clic destro sulla cartella in Explorer, vai a TortoiseSVN - > Mostra registro.
  • Fare clic con il tasto destro del mouse sul numero di revisione appena prima della revisione che ha eliminato il file e selezionare " Sfoglia repository " ;.
  • Fare clic con il pulsante destro del mouse sul file eliminato e selezionare " Copia nella copia di lavoro ... " e salva.

Il file eliminato sarà ora nella cartella della copia di lavoro. Per aggiungerlo nuovamente a SVN, fai clic con il pulsante destro del mouse sul file ripristinato e seleziona SVN Commit.

NB: questo metodo preserverà la cronologia precedente del file ripristinato, tuttavia per vedere la cronologia precedente nel registro TortoiseSVN è necessario assicurarsi che " Stop on copy / rename " è deselezionato nella finestra di dialogo Messaggi di registro.

Per completezza, questo è ciò che avresti trovato nel libro svn, se avessi saputo cosa cercare. È quello che hai già scoperto:

Annullamento delle modifiche

Resurrezione di elementi eliminati

Stessa cosa, dalla versione più recente (e dettagliata) del libro:

Annullamento delle modifiche

Resurrecting Deleted Items

Utilizzare la funzionalità di copia SVN di Tortoise per ripristinare le modifiche apportate:

  1. Fai clic con il pulsante destro del mouse sulla cartella principale che contiene i file / la cartella eliminati
  2. Seleziona " mostra registro "
  3. Seleziona e fai clic con il pulsante destro del mouse sulla versione prima della quale sono state apportate le modifiche / cancellate
  4. Seleziona " sfoglia il repository "
  5. Seleziona il file / la cartella che deve essere ripristinato e fai clic con il tasto destro del mouse
  6. Seleziona " copia in " che copierà i file / le cartelle nella revisione principale

Spero che aiuti

Mi sembra sempre di usare svn copy come operazione server quindi non sono sicuro che funzioni con due percorsi di lavoro.

Ecco un esempio di ripristino di un file eliminato in una copia di lavoro locale del progetto:

svn copy https://repos/project/modules/module.js@3502 modules/module.js

Pur trovandosi nella directory del progetto. Funziona anche per ripristinare intere directory.

Se stai utilizzando Tortoise SVN, dovresti essere in grado di ripristinare le modifiche apportate solo da quella revisione alla tua copia di lavoro (eseguendo effettivamente un'unione inversa), quindi eseguire un altro commit per aggiungere nuovamente il file.I passaggi da seguire sono:

  1. Passare alla cartella nella copia di lavoro in cui è stato eliminato il file.
  2. Vai al repository-browser.
  3. Passare alla revisione in cui hai eliminato il file.
  4. Nell'elenco delle modifiche, trova il file che hai eliminato.
  5. Fare clic con il tasto destro sul file e andare su "Annulla modifiche da questa revisione".
  6. Ciò ripristinerà il file nella tua copia di lavoro, mantenendo la cronologia.
  7. Salva il file per aggiungerlo nuovamente al tuo repository.

Con Tortoise SVN :

  

Se non hai ancora eseguito il commit delle modifiche, puoi ripristinare la cartella principale in cui hai eliminato il file o la directory.

     

Se hai già eseguito il commit del file eliminato, puoi utilizzare il browser del repository, passare alla revisione in cui il file esisteva ancora e quindi utilizzare il comando Copia in ... dal menu di scelta rapida. Immettere il percorso della copia di lavoro come destinazione e il file eliminato verrà copiato dal repository nella copia di lavoro.

Il modo più semplice in cui sono stato in grado di ripristinare i file e di non perdere la cronologia delle revisioni è usare Copia SVN , l'esempio di fusione sopra a me sembra un modo più complesso per ottenere la stessa cosa. Perché è necessario unire quando si desidera semplicemente ripristinare una revisione?

In questo caso uso quanto segue e funziona abbastanza bene.

svn copy -m 'restoring file' -r <rev_number_file_to_restore> http://from/file.cs http://pathTo/file.cs

Mi sembra di usare sempre svn copy come operazione server quindi non sono sicuro che funzioni con due percorsi di lavoro.

Dovresti essere in grado di controllare solo il file che desideri ripristinare. Prova qualcosa come svn co svn://your_repos/path/to/file/you/want/to/restore@rev dove rev è l'ultima revisione in cui esisteva il file.

Ho dovuto fare esattamente questo poco tempo fa e se ricordo bene, usando l'opzione -r su svn non ha funzionato; Ho dovuto usare la sintassi :rev. (Anche se avrei potuto ricordarmelo all'indietro ...)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top