2010-09-16 77 views
7

我已經從我的本地副本中刪除了很多文件,這些文件出現在主目錄的不同子目錄中。我想從我的SVN倉庫中刪除所有本地刪除的文件。svn腳本提交一組已刪除的文件

如果我使用svn st main_dir檢查我的主目錄的SVN狀態,那麼所有被刪除的文件都顯示爲'!'這意味着相應的文件丟失。但是即使我使用svn ci main_dir來提交我的更改,這些文件也不會從我的SVN存儲庫中刪除。

是否有任何方式或命令或腳本刪除我的主目錄和子目錄的所有本地刪除的文件也從我的SVN存儲庫。我想我們可以遍歷每個文件夾的所有文件,並通過檢查相應的文件SVN STATUS('!')從SVN中刪除本地刪除的文件,但是我不知道如何將我的想法轉換爲腳本。

任何人都可以幫我完成這個任務嗎?在此先感謝...

溼婆

+0

請參見第一個問題我的答案,這是基本的這裏欺騙: http://stackoverflow.com/questions/1308136/svn-set-all-files-marked-with-to-d/1308147#1308147 – jason 2010-09-16 17:42:19

回答

17

for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i; done

+0

非常感謝Gadolin,這是完美的工作。我對這個腳本很陌生,你能否解釋一下這個說法,以便我能夠正確理解。 – Siva 2010-09-16 11:51:34

+0

1. svn st < - svn status – Gadolin 2010-09-16 12:03:52

+1

1. grep只接受以!開頭的svn狀態的行,所以您對此感興趣,因爲svn狀態輸出有兩列,awk需要第二列(文件名是) ,然後將每個文件作爲for循環的輸入作爲'i'。在內部循環中,我調用svn delete $ i,其中$ i被文件替換。 – Gadolin 2010-09-16 12:10:58

0

你應該已經使用svn delete PATH刪除這些文件。這樣它們就會從文件系統和工作副本中被刪除。

查看svn delete瞭解更多詳情。

我建議你svn update從遠程存儲庫取回文件,並使用svn delete刪除它們。

+0

我還沒有手動刪除這些文件,實際上同時升級我的第三方庫之一一些舊文件從該庫的舊版本中刪除。所以我只需要從我的SVN倉庫中刪除這些文件。 – Siva 2010-09-16 11:39:10

+0

這將要求您僅使用svn delete 來刪除文件,這非常乏味,有時根本不可能(例如,當您將工作副本與某個其他版本的項目同步時)。 – mvmn 2012-10-11 09:02:50

1
for i in $(svn st | grep \! | awk '{print $2}'); do svn delete $i'@'; done 

對於文件與@ 2倍於它們。

+0

你是我的救星! :D它很難在谷歌或SO搜索「svn刪除@ 2x」並得到正確的答案!再次感謝! – 2012-04-20 18:55:06

+0

完全沒問題。 :) – 2012-04-20 22:58:49

3

我發現比xargs容易循環:

svn stat | grep \\! | awk '{print $2}' | xargs svn remove 
+0

如果找不到文件,將會出現錯誤。 – goofansu 2013-12-23 07:11:11

0

作品也以空格文件名:

svn st | grep ! | sed 's/!\s*//' | xargs -I{} svn remove '{}'