
我有一個 svn 工作副本,我在其中執行了以下命令
尋找 ./source * -type f -exec sed "s/@version 0.5.3/@version 0.5.4/" -i {} \;
文件全部更新,但 svn 在執行其中之一時無法識別任何更改
svn狀態./來源
svn 差異 ./源
svn提交./來源
我還嘗試編寫一個腳本來檢查 $?從 sed 可以「觸摸」檔案來更新它的 mdate 但 sed 似乎總是返回 0 -.-
我現在能做什麼? -.-
答案1
問題在於您的使用find
:
find dir1 -type f
將匹配目錄結構中的所有文件,包括.svn
目錄內的文件。中的檔案.svn
是用來執行svn diff
攻擊的檔案。因此,本質上,您修改了樹中文件的所有副本,而不僅僅是工作副本。
試試這個語法:
find ./source * -type f ! -path '*/.svn/*' -exec sed "s/@version 0.5.3/@version 0.5.4/" -I {} \;
答案2
就我而言,事實證明我正在更新真實文件的符號連結。我使用 sed 就地更新。有趣的是,這會將符號連結轉換為常規檔案。然後 svn 就不高興了,因為「物件」類型當然改變了。
以下是將符號連結更改為常規文件的方法:
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28 2020 txtfile
lrwxrwxrwx 1 user user 7 Aug 5 11:07 txtln -> txtfile
user@host>sed -i "s/hello/mello/" txtln
user@host>ls -l txt*
-rw-rw-r-- 1 user user 90 Feb 28 2020 txtfile
-rw-rw-r-- 1 user user 90 Aug 5 11:08 txtln
user@host>