Come posso rimuovere tutte le mie modifiche nella mia directory di lavoro SVN?


195

Ho una directory di lavoro SVN. Ho apportato alcune modifiche in quella directory e si vede in svn status. Ma c'è un modo per me di rimuovere tutte le mie modifiche lì dentro e ottenere tutto dal trunk usando la riga di comando?

Risposte:


274
svn revert -R .
svn up

Ciò ripristinerà in modo ricorsivo la directory corrente e tutto ciò che la contiene e si aggiornerà all'ultima versione.


2
Nota che questo non funziona con gli esterni (apparentemente vengono ignorati).
cic

86

Ho usato una combinazione di risposte di altre persone per trovare questa soluzione:

Ripristina normali modifiche SVN locali

svn revert -R .

Rimuovi qualsiasi altra modifica e supporta la rimozione di file / cartelle con spazi, ecc.

svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf

Non dimenticare di ottenere gli ultimi file da SVN

svn update --force

Grazie mille Shaize, questa è la sed più elegante, ... pipe che ho visto finora per questo :) Soprattutto prendendosi cura degli ignoranti.
bullo,

Funziona come un fascino. Grazie!
Niilo Keinänen,

28
svn revert -R .
svn cleanup . --remove-unversioned

Non rimuove i file * .class ecc.
Trismegistos,

2
se si desidera rimuovere anche i file ignorati-svn cleanup . --remove-ignored
Kip

14

Se non hai cambiamenti, puoi sempre essere davvero completo e / o pigro e fare ...

rm -rf *
svn update

Ma no davvero, non farlo a meno che tu non ne sia veramente sicuro che l'opzione Nuke-from-space sia ciò che vuoi !! Questo ha il vantaggio di nuking anche tutto il build cruft, i file temporanei e le cose che SVN ignora.

La soluzione più corretta è utilizzare il comando revert:

svn revert -R .

-R fa sì che la sovversione venga richiamata e ripristini tutto dentro e sotto la directory di lavoro corrente.


Ho usato spesso questo trucco, ma con SVN 1.7, in cui i metadati sono memorizzati solo nella radice del WC, questa non è più la soluzione pulita che era. Ad esempio, i file eliminati rimangono eliminati.
Bart van Heukelom,

8
svn nuke-from-space
Jason Swett,

9

Nessuna delle risposte qui era proprio quello che volevo. Ecco cosa mi è venuto in mente:

# Recursively revert any locally-changed files
svn revert -R .

# Delete any other files in the sandbox (including ignored files),
# being careful to handle files with spaces in the name
svn status --no-ignore | grep '^\?' | \
    perl -ne 'print "$1\n" if $_ =~ /^\S+\s+(.*)$/' | \
    tr '\n' '\0' | xargs -0 rm -rf

Testato su Linux; può funzionare in Cygwin, ma si basa su (credo) un'estensione specifica per GNU che consente agli xargs di dividere in base al '\0'posto dello spazio bianco.

Il vantaggio del comando precedente è che non richiede alcuna attività di rete per ripristinare il sandbox. Ottieni esattamente quello che avevi prima e perdi tutte le modifiche . (dichiarazione di non responsabilità prima che qualcuno mi incolpi per questo codice che distrugge il suo lavoro) ;-)

Uso questo script su un sistema di integrazione continua in cui desidero assicurarmi che venga eseguita una build pulita dopo aver eseguito alcuni test.

Modifica : non sono sicuro che funzioni con tutte le versioni di Subversion. Non è chiaro se il svn statuscomando sia sempre formattato in modo coerente. Utilizzare a proprio rischio, come con qualsiasi comando che utilizza tale rmcomando generale .


7

svn revert annullerà tutte le modifiche locali che hai apportato


5

È possibile utilizzare il comando seguente per ripristinare tutte le modifiche locali:

svn st -q | awk '{print $2;}' | xargs svn revert

Viene visualizzato il messaggio di errore "Argomenti insufficienti" per svn revert
circolare del

4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Rimuoverà qualsiasi file che è stato modificato. Mi sembra di aver avuto problemi con il ripristino quando potrebbero essere stati aggiunti file e directory.



0

Se sei su Windows, il seguente ciclo per ripristinare tutte le modifiche non confermate apportate allo spazio di lavoro:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)

Se si desidera rimuovere tutte le modifiche senza commit e tutti gli oggetti non controllati, saranno necessari 2 loop:

for /F "tokens=1,*" %%d in ('svn st') do (
  svn revert "%%e"
)
for /F "tokens=1,*" %%d in ('svn st') do (
  svn rm --force "%%e"
)
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.