Svn 管道subversion版本号至diff
好的,我可以运行这样的命令来获取某个日期或日期范围内的修订号列表:Svn 管道subversion版本号至diff,svn,shell,command-line,cygwin,Svn,Shell,Command Line,Cygwin,好的,我可以运行这样的命令来获取某个日期或日期范围内的修订号列表: svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- 这很好,给了我一个这样的列表 12345 12346 12347 svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- | xargs svn diff -c 现在,我想将这些修订号传
svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2-
这很好,给了我一个这样的列表
12345
12346
12347
svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- | xargs svn diff -c
现在,我想将这些修订号传递给diff命令,因此在修订号上手动运行一个简单的svn diff可以像预期的那样工作
svn diff -c12345
但是,如果我尝试像这样将修订列表管道化到diff命令
12345
12346
12347
svn log -q -r{2012-01-25}:HEAD | grep '^r[0-9]' | cut -d\| -f1 | cut -b2- | xargs svn diff -c
它返回一个未找到节点的错误-在我看来,参数传递错误。在管道的最后一部分,
xargs
正在尝试执行:
svn diff -c 12345 12346 12347
应在何时尝试:
svn diff -c 12345
svn diff -c 12346
svn diff -c 12347
因为-c
选项只接受一个参数
要解决此问题,请尝试将
xargs
替换为xargs-n1
问题是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-c12345
或svn diff-c12345
都是有效的。在这种情况下,只需使用-n1
就可以了