2011-05-13 44 views
14

我們有一個存儲庫有幾個文件(沒有文件夾)。每次構建時,我們必須從另一個源(db)下載相同的文件夾,然後提交SVN更改 - 更新現有的,刪除不存在並添加新文件。SVN:hg的addremove模擬

所以想法是有數據庫的腳本「複製」在SVN每個版本(這就是爲什麼的MSBuild使用)

問題是,我不知道addremove的模擬 - 它會自動同步兩個文件夾。

有沒有人知道如何addremove可以模擬?

+1

這裏的一個交包括兩個殼別名(一個叫做add_all,另一個叫做rm_all)。這基本上可以讓你運行'add_all && rm_all'來完成'hg addremove'所做的事情,但是可以實現顛覆。 http://www.plexusweb.com/staff/travis/blog/post/267/Batch-addremove-files-to-Subversion – 2011-05-13 13:24:58

+0

我不能相信這是不可能的與svn,但我不明白如何。如果沒有更好的選擇,你可能想考慮使用hgsubversion來維護一個本地的hg repo,使用'hg addremove',然後將這些改變推回到svn。 – 2011-05-13 14:08:49

回答

0

爲了達到這個目的,我一直使用svn附帶的svn_load_dirs.pl腳本。

9

我個人有一點bash腳本來做到這一點(在Linux上是):

svn status | grep "^\?" | gawk '{print $2}' | xargs -r svn add 
svn status | grep "^\!" | gawk '{print $2}' | xargs -r svn remove 

編輯:感謝cesar,這裏有一個簡單的版本:

svn status | gawk '/^\?.*/ {print $2}' | xargs -r svn add 
svn status | gawk '/^\!.*/ {print $2}' | xargs -r svn remove 
+1

爲什麼不跳過grep,只需要: 'svn status | gawk'/^\?.*/ {print $ 2}'| xargs -r svn add' – cesar 2012-01-16 04:38:35

+2

@anonymous很好的問題,可能是因爲我已經通過grep管道來查看實際輸出,然後嘗試使用它。當然,實際上並未真正閱讀gawk手冊頁,因此不瞭解該語法。謝謝。 – 2012-01-17 02:36:43

+0

包含空格的文件名怎麼樣?我不知道足夠的gawk語法來將記錄分隔符更改爲\ 0 ... – moi 2015-11-26 10:22:37

0

(@Eric的改進-Karl的答案)

作品爲:

  • 與 '空間' 路徑字符
  • 與路徑 '@' 字符
  • 與 '\' 字符路徑(MSYS殼)

svn status | perl -ne 'print "$1\0" if /^\?\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn add '[email protected]' 
svn status | perl -ne 'print "$1\0" if /^\!\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn remove '[email protected]'