2012-05-02 53 views
35

如何使用svn命令行工具從SVN簽出中刪除所有未跟蹤的文件? Git和Hg爲此提供了cleanpurge命令,但我在SVN中找不到相應的命令。如何刪除SVN中的未跟蹤文件

我不在乎是否必須恢復所有本地修改(在這種情況下本質上是想將我的結帳恢復到原始狀態)還是本地修改被跟蹤的文件可以保持不變;任何情況都是可以接受

+0

的可能重複[我怎樣才能刪除我的工作拷貝所有未版本控制/忽略的文件/文件夾?](HTTPS ://stackoverflow.com/questions/2803823/how-can-i-delete-all-unversioned-ignored-files-folders-in-my-working-copy) – Ruslan

+0

@Ruslan:即使我的問題不是關於TortoiseSVN ,是的,這基本上是一樣的。 –

回答

52

有可能是內置的方式,但如果是這樣,我不知道它。然而,像下面應該做的工作:(所有版本的文件,應該出現在一個svn st?開頭的行)

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf 

EDIT(@GearoidMurphy 這是具有挑戰性的獲得這段代碼在cygwin環境下工作,因爲xargs將windows路徑斜線視爲轉義序列,並且無法解析'\ r \ n'行結尾,下面是我對這個完全有效答案的改編解決方案:

svn st | grep '^?' | gawk '{printf(\"%s|\", $2)}' | xargs -d "|" -n1 C:\cygwin\bin\rm -r 
+0

是的,我想這可能不得不做,雖然它非常難看,並且需要一些額外的非SVN工具。 –

+2

這不考慮忽略的文件,所以你可能還需要'--no-ignore'標誌到'svn st' –

+1

另外我認爲這可能會失敗的文件名包含空格 –

20

svn-clean腳本正是這樣做的,儘管它確實依賴於安裝了perl。它會使本地修改保持不變,但會刪除被忽略的文件。使用'-p'運行以預覽將被刪除的文件。

3

這個命令應該做的工作,空格和所有(試穿OSX只):

svn status | grep '^\?' | sed 's/? *//' | xargs -I% rm -fr % 
相關問題