2012-01-25 79 views
0

好了,我可以運行如下命令來獲得在特定日期或日期範圍內的版本號的列表:管道顛覆版本號給diff的

svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- 

這工作得很好,給我的列表這樣

12345 
12346 
12347 

現在,我想這些版本號傳遞給diff命令,手動按預期工作即

修訂號碼,以便運行一個簡單的svn差異0

但是,如果我試圖管修訂列表diff命令這樣

svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- | xargs svn diff -c 

返回該節點沒有發現錯誤 - 就像我傳遞的參數錯誤在我看來。

回答

0

它看起來像,在管道的最後部分,xargs正試圖執行:

svn diff -c 12345 12346 12347 

當它應該嘗試:

svn diff -c 12345 
svn diff -c 12346 
svn diff -c 12347 

因爲-c選項只接受一個參數。

要解決該問題,請嘗試用xargs -n1替換xargs

0

問題是,每個12345,12346,12347作爲單獨的參數傳遞;您需要將它與-c結合爲一個參數。

假設您使用的是GNU findutils版本xargs,則可以使用-I選項。一個例子不使用SVN:

$ printf "12345\n12346\n12347\n" | xargs -n 1 -I{} echo svn diff -c{} 
svn diff -c12345 
svn diff -c12346 
svn diff -c12347 

注意,這個調用svn diff一次爲每個版本號。您的命令使用多個版本號調用svn一次。如果你想爲多個版本號調用一次svn:

svn diff -c12345 12346 12347 

然後一個不同的解決方案將是必要的。

編輯:

閱讀對方的回答和SVN文檔,它看起來像你可以-c後有空間,所以無論是svn diff -c12345svn diff -c 12345是有效的。在這種情況下,只需使用-n 1就可以做到。