2013-05-10 36 views
3

需要shell命令的一些帮助来获取基于svn注释中的字符串的Subversion主机URL中的所有转速。如何根据svn注释中的字符串获取Subversion URL(trunk/branch)中的所有修订版本?

我想通过一个文件得到它,而不是URL。我试过svn log URL --stop-on-copysvn log URL --xml以获得转速但不成功。

谢谢!

+0

什么是 “不工作” 是什么意思?我没有问题(使用1.7)通过URL获取特定于任何子树的完整日志消息集。 – parsifal 2013-05-10 15:42:48

+0

我的意思是如何仅基于svn注释中的字符串获取这些转速 - 如票号。我尝试用管道输入“svn log URL --stop-on-copy”和“svn log URL --xml”.. – iaav 2013-05-10 15:46:16

+0

所以“不起作用”的意思是“我无法从多线提取我需要的东西输出'svn log'“?在这种情况下,我猜* Sithsu *的命令行字符串会做你想做的事(没有尝试过)。不幸的是,'svn log'没有给你一个选项来生成你自己的格式。 – parsifal 2013-05-10 17:36:18

回答

0

请尝试以下操作。

x="refactoring"; svn log --limit 10 | egrep -i --color=none "($x|^r[0-9]+ \|.*lines$)" | egrep -B 1 -i --color=none $x | egrep --color=none "^r[0-9]+ \|.*lines$" | awk '{print $1}' | sed 's/^r//g' 

用搜索字符串替换refactoring
更改svn log参数以满足您的需求。
使用不区分大小写的匹配(egrep -i)。


根据评论编辑。

x="ILIES-113493"; svn log | egrep -i --color=none "($x|^r[0-9]+ \|.*lines$)" | egrep -B 1 -i --color=none $x | egrep --color=none "^r[0-9]+ \|.*lines$" | awk '{print $1}' | sed 's/^r//g' 

注:

  • x是包含搜索字符串变量,并x是在命令 两个地方使用。
  • 为了在shell本身中使用x作为变量,需要将整个命令放在一行(从x=".."; svn log ... sed '...')。分号;可用于在同一行分隔多个命令。
  • 我在例子中使用了--limit 10来限制日志条目的数量, 更改以及使用其他svn log参数来套用您的 需求。使用--limit 10将限制搜索到10个最近的日志条目。
+0

@iaav已更新的答案。几个问题在你尝试的方式。 1)第一个egrep中票号后的空格。2)x也用于第二个egrep,也应该用票号代替它。 3)'--limit 10'只给出最近的10个条目。我用它来测试。 – Sithsu 2013-05-10 19:18:34

0

谢谢大家的帮助!这对我有效:

svn log $URL --stop-on-copy | grep -B 2 $STRING | grep "^r" | cut -d"r" -f2 | cut -d" " -f1 

Use "--stop-on-copy" or "--limit" options depending on the requirement. 
1

使用sed的另一种方法。这可能不完美,但它也适用于多行注释。将SEARCH_STRING替换为您的个人搜索。

svn log -l100 | sed -n '/^r/{h;d};/SEARCH_STRING/{g;s/^r\([[:digit:]]*\).*/\1/p}' 
1

针对Subversion 1.8是

svn log URL --search STRING

相关问题