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?
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:
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.
Ho usato una combinazione di risposte di altre persone per trovare questa soluzione:
svn revert -R .
svn status --no-ignore | grep -E '(^\?)|(^\I)' | sed -e 's/^. *//' | sed -e 's/\(.*\)/"\1"/' | xargs rm -rf
svn update --force
svn revert -R .
svn cleanup . --remove-unversioned
svn cleanup . --remove-ignored
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.
svn nuke-from-space
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 status
comando sia sempre formattato in modo coerente. Utilizzare a proprio rischio, come con qualsiasi comando che utilizza tale rm
comando generale .
È possibile utilizzare il comando seguente per ripristinare tutte le modifiche locali:
svn st -q | awk '{print $2;}' | xargs svn revert
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"
)