Jak mogę usunąć wszystkie moje zmiany z mojego katalogu roboczego SVN?


195

Mam katalog roboczy SVN. Wprowadziłem kilka zmian w tym katalogu i pokazuje się w svn status. Ale czy jest jakiś sposób, aby usunąć wszystkie moje zmiany i po prostu pobrać wszystko z pnia za pomocą wiersza polecenia?

Odpowiedzi:


274
svn revert -R .
svn up

Spowoduje to rekurencyjne cofnięcie bieżącego katalogu i wszystkich znajdujących się pod nim katalogów, a następnie zaktualizowanie do najnowszej wersji.


2
Zauważ, że to nie działa z zewnętrznymi (pozornie są one ignorowane).
cic

86

Użyłem kombinacji odpowiedzi innych ludzi, aby wymyślić to rozwiązanie:

Cofnij normalne lokalne zmiany SVN

svn revert -R .

Usuń wszelkie inne zmiany i obsługuje usuwanie plików / folderów ze spacjami itp.

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

Nie zapomnij pobrać najnowszych plików z SVN

svn update --force

Wielkie dzięki Shaize, to jest najbardziej elegancka sed, ... fajka, jaką do tej pory widziałem :) Szczególnie zwracając uwagę na ignorowanie.
tyran

Działa jak marzenie. Dzięki!
Niilo Keinänen

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

Nie usuwa plików * .class itp.
Trismegistos

2
jeśli chcesz również usunąć zignorowane plikisvn cleanup . --remove-ignored
Kip

14

Jeśli nie masz żadnych zmian, zawsze możesz być naprawdę dokładny i / lub leniwy i zrobić ...

rm -rf *
svn update

Ale tak naprawdę nie rób tego, chyba że jesteś naprawdę pewien, że opcja nuke-from-space jest tym, czego chcesz !! Ma to tę zaletę, że nukuje także wszystkie cruft kompilacji, pliki tymczasowe i rzeczy, które SVN ignoruje.

Bardziej poprawnym rozwiązaniem jest użycie polecenia revert:

svn revert -R .

-R powoduje, że subversion powtarza się i przywraca wszystko w bieżącym katalogu roboczym i poniżej niego.


Często korzystałem z tej sztuczki, ale w SVN 1.7, gdzie metadane są przechowywane tylko w katalogu głównym WC, nie jest to już czyste rozwiązanie. Na przykład usunięte pliki pozostają usunięte.
Bart van Heukelom

8
svn nuke-from-space
Jason Swett

9

Żadna z odpowiedzi tutaj nie była tym, czego chciałem. Oto, co wymyśliłem:

# 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

Testowane na systemie Linux; może działać w Cygwin, ale opiera się (jak sądzę) na specyficznym dla GNU rozszerzeniu, które pozwala na dzielenie xargs na podstawie '\0'zamiast białych znaków.

Zaletą powyższego polecenia jest to, że resetowanie obszaru izolowanego nie wymaga żadnej aktywności sieciowej. Dostajesz dokładnie to, co miałeś wcześniej i tracisz wszystkie swoje zmiany . (wyłączenie odpowiedzialności, zanim ktoś obwinie mnie za to, że ten kod niszczy ich pracę) ;-)

Używam tego skryptu w systemie ciągłej integracji, w którym chcę mieć pewność, że po uruchomieniu niektórych testów zostanie wykonana czysta kompilacja.

Edycja : Nie jestem pewien, czy to działa ze wszystkimi wersjami Subversion. Nie jest jasne, czy svn statuspolecenie jest zawsze formatowane konsekwentnie. Używaj na własne ryzyko, jak w przypadku każdego polecenia, które używa takiego rmpolecenia zbiorczego .



5

Aby cofnąć wszystkie zmiany lokalne, możesz użyć następującego polecenia:

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

Otrzymuję komunikat o błędzie „Za mało argumentów” do przywrócenia svn
okólny

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

svn update

Usunie każdy zmodyfikowany plik. Wydaje mi się, że pamiętam problemy z przywracaniem, gdy pliki i katalogi mogły zostać dodane.



0

Jeśli korzystasz z systemu Windows, poniższe polecenie pętli przywróci wszystkie niezatwierdzone zmiany wprowadzone w obszarze roboczym:

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

Jeśli chcesz usunąć wszystkie niezatwierdzone zmiany i wszystkie niewersjonowane obiekty, będzie to wymagało 2 pętli:

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"
)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.