Bagaimana saya bisa menghapus semua perubahan di direktori kerja SVN saya?

195

Saya memiliki direktori kerja SVN. Saya membuat beberapa perubahan di direktori itu, dan itu muncul di svn status. Tetapi apakah ada cara bagi saya untuk menghapus semua perubahan saya di sana dan hanya mendapatkan semuanya dari bagasi menggunakan baris perintah?

n179911
sumber

Jawaban:

274
svn revert -R .
svn up

Ini akan secara rekursif mengembalikan direktori saat ini dan semua yang ada di bawahnya dan kemudian memperbarui ke versi terbaru.

Mike McQuaid
sumber
2
Perhatikan bahwa ini tidak bekerja dengan eksternal (tampaknya diabaikan).
cic
86

Saya menggunakan kombinasi jawaban orang lain untuk menghasilkan solusi ini:

Kembalikan perubahan SVN lokal normal

svn revert -R .

Hapus perubahan lain dan mendukung penghapusan file / folder dengan spasi, dll.

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

Jangan lupa untuk mendapatkan file terbaru dari SVN

svn update --force
Shaize
sumber
Terima kasih banyak Shaize, ini adalah sed yang paling elegan, ... pipa yang telah saya lihat sejauh ini untuk ini :) Terutama memperhatikan tentang pengabaian juga.
pengganggu
Bekerja seperti pesona. Terima kasih!
Niilo Keinänen
28
svn revert -R .
svn cleanup . --remove-unversioned
lexa-b
sumber
Itu tidak menghapus file * .class dll.
Trismegistos
2
jika Anda juga ingin menghapus file yang diabaikan-svn cleanup . --remove-ignored
Kip
14

Jika Anda tidak memiliki perubahan, Anda selalu dapat benar-benar teliti dan / atau malas dan ...

rm -rf *
svn update

Tapi, tidak ada yang benar-benar, jangan tidak melakukan itu kecuali jika Anda benar-benar yakin bahwa opsi nuke-dari-ruang apa yang Anda inginkan !! Ini memiliki keuntungan juga nuking semua build cruft, file sementara, dan hal-hal yang diabaikan SVN.

Solusi yang lebih tepat adalah dengan menggunakan perintah revert:

svn revert -R .

-R menyebabkan subversi berulang dan mengembalikan semua yang ada di dalam dan di bawah direktori kerja saat ini.

Bbum
sumber
Saya sering menggunakan trik ini, tetapi dengan SVN 1.7, di mana metadata disimpan hanya di root WC, ini bukan lagi solusi bersih itu. Misalnya, file yang dihapus tetap terhapus.
Bart van Heukelom
8
svn nuke-from-space
Jason Swett
9

Tidak ada jawaban di sini yang saya inginkan. Inilah yang saya pikirkan:

# 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

Diuji di Linux; mungkin bekerja di Cygwin, tetapi bergantung pada (saya percaya) ekstensi khusus GNU yang memungkinkan xargs untuk dibagi berdasarkan pada '\0'bukan spasi putih.

Keuntungan dari perintah di atas adalah tidak memerlukan aktivitas jaringan untuk mereset kotak pasir. Anda mendapatkan apa yang Anda miliki sebelumnya, dan Anda kehilangan semua perubahan Anda . (penafian sebelum seseorang menyalahkan saya untuk kode ini menghancurkan pekerjaan mereka) ;-)

Saya menggunakan skrip ini pada sistem integrasi berkelanjutan di mana saya ingin memastikan build bersih dilakukan setelah menjalankan beberapa tes.

Sunting : Saya tidak yakin ini berfungsi dengan semua versi Subversion. Tidak jelas apakah svn statusperintah selalu diformat secara konsisten. Gunakan dengan risiko Anda sendiri, seperti halnya perintah yang menggunakan rmperintah selimut .

mpontillo
sumber
7

svn revert akan membatalkan perubahan lokal yang Anda buat

Sean
sumber
5

Anda dapat menggunakan perintah berikut untuk mengembalikan semua perubahan lokal:

svn st -q | awk '{print $2;}' | xargs svn revert
NaN
sumber
Saya mendapatkan pesan kesalahan "Tidak cukup argumen" untuk svn revert
circular
4
svn status | grep '^M' | sed -e 's/^.//' | xargs rm

svn update

Akan menghapus file apa pun yang telah dimodifikasi. Sepertinya saya ingat mengalami masalah dengan pemulihan ketika file dan direktori mungkin telah ditambahkan.

Juan
sumber
0

Jika Anda berada di windows, loop berikut ini akan mengembalikan semua perubahan yang tidak dikomit ke ruang kerja Anda:

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

Jika Anda ingin menghapus semua perubahan yang tidak dikomit dan semua objek tidak berversi, itu akan membutuhkan 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"
)
David
sumber