SVN çalışma dizinimdeki tüm değişiklikleri nasıl kaldırabilirim?


195

Bir SVN çalışma dizinim var. Bu dizinde bazı değişiklikler yaptım ve içinde görünüyor svn status. Ama oradaki tüm değişiklikleri kaldırmamın ve komut satırını kullanarak her şeyi bagajdan almamın bir yolu var mı?

Yanıtlar:


274
svn revert -R .
svn up

Bu, geçerli dizini ve altındaki her şeyi tekrar tekrar geri döndürecek ve daha sonra en son sürüme güncelleyecektir.


2
Bunun dışsallarla çalışmadığını unutmayın (görünüşte yok sayılırlar).
cic

86

Bu çözümü bulmak için diğer insanların cevaplarının bir kombinasyonunu kullandım:

Normal yerel SVN değişikliklerini geri alma

svn revert -R .

Diğer değişiklikleri kaldırın ve boşlukları olan dosyaları / klasörleri kaldırmayı destekler.

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

SVN'den en son dosyaları almayı unutmayın

svn update --force

Çok teşekkürler Shaize, bu şimdiye kadar gördüğüm en zarif sed, ... boru :) Özellikle de görmezden geliyor.
kabadayı

Tıkır tıkır çalışıyor. Teşekkürler!
Niilo Keinänen

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

* .Class dosyalarını vb. Kaldırmaz.
Trismegistos

2
yok sayılan dosyaları da kaldırmak istiyorsanızsvn cleanup . --remove-ignored
Kip

14

Değişikliğiniz yoksa, her zaman gerçekten kapsamlı ve / veya tembel olabilir ve yapabilirsiniz ...

rm -rf *
svn update

Ama, hayır, gerçekten yok değil sen olmadıkça bunu gerçekten emin nükleer-den-uzay seçenektir İstediğin bu !! Bu, SVN'nin göz ardı ettiği tüm ham yapı, geçici dosyalar ve şeyleri nükleme avantajına sahiptir.

Daha doğru çözüm revert komutunu kullanmaktır:

svn revert -R .

-R, yıkımın tekrarlanmasına neden olur ve geçerli çalışma dizinindeki ve altındaki her şeyi geri alır.


Sıklıkla bu hileyi kullandım, ancak meta verilerin yalnızca WC kökünde depolandığı SVN 1.7 ile, bu artık temiz çözüm değil. Örneğin, silinen dosyalar silinmiş olarak kalır.
Bart van Heukelom

8
svn nuke-from-space
Jason Swett

9

Buradaki cevapların hiçbiri istediğim gibi değildi. İşte ben geldim:

# 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

Linux'ta test edilmiştir; Cygwin'de çalışabilir, ancak '\0'boşlukların yerine xargs'ın bölünmesine izin veren GNU'ya özgü bir uzantıya güvenirim (inanıyorum) .

Yukarıdaki komutun avantajı, korumalı alanı sıfırlamak için herhangi bir ağ etkinliği gerektirmemesidir. Daha önce sahip olduklarınızı tam olarak elde edersiniz ve tüm değişikliklerinizi kaybedersiniz . (birisi beni işini yok eden bu kod için suçlamadan önce feragat) ;-)

Bu komut dosyasını, bazı testleri çalıştırdıktan sonra temiz bir derlemenin gerçekleştirildiğinden emin olmak istediğim sürekli bir entegrasyon sisteminde kullanıyorum.

Düzenleme : Bunun Subversion'ın tüm sürümleriyle çalıştığından emin değilim. svn statusKomutun her zaman tutarlı bir şekilde biçimlendirilip biçimlendirilmediği açık değildir . Böyle bir battaniye rmkomutu kullanan herhangi bir komutta olduğu gibi, kendi sorumluluğunuzda kullanın.


7

svn revert yaptığınız tüm yerel değişiklikleri geri alır


5

Tüm yerel değişiklikleri geri almak için aşağıdaki komutu kullanabilirsiniz:

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

Ben svn, geri almadan için hata mesajı "Yeterli argüman" olsun
dairesel

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

svn update

Değiştirilmiş olan tüm dosyaları kaldıracaktır. Dosyalar ve dizinler eklendiğinde geri döndürme konusunda sorun yaşadığımı hatırlıyorum.



0

Windows'daysanız, döngü için aşağıdakiler çalışma alanınızda yapılan tüm taahhüt edilmeyen değişiklikleri geri alacaktır:

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

Taahhüt edilmemiş tüm değişiklikleri ve tüm sürümlendirilmemiş nesneleri kaldırmak istiyorsanız, 2 döngü gerekir:

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"
)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.