好的,所以我可以运行这样的命令来获取在特定日期或日期范围内制作的修订号列表:
svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2-
这很好用,给我一个这样的列表
12345
12346
12347
现在,我想将这些修订号传递给diff命令,因此在修订号上手动运行一个简单的svn diff会按预期运行,即
。svn diff -c12345
但是,如果我尝试将修订列表传递给diff命令,就像这样
svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- | xargs svn diff -c
它返回一个错误,找不到该节点 - 看起来像我传递的参数错误。
答案 0 :(得分:0)
看起来,在管道的最后部分,xargs
正在尝试执行:
svn diff -c 12345 12346 12347
应该尝试:
svn diff -c 12345
svn diff -c 12346
svn diff -c 12347
因为-c
选项只接受一个参数。
要解决此问题,请尝试将xargs
替换为xargs -n1
。
答案 1 :(得分:0)
问题是12345
,12346
,12347
中的每一个都作为单独的参数传递;你需要它与-c
一起加入一个参数。
假设您使用的是xargs
的GNU findutils版本,则可以使用-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 -c12345
或svn diff -c 12345
有效。在这种情况下,只需使用-n 1
即可。