2011-12-26 64 views

回答

1

SVN日志+ SVN责备

试用开始svn log -v -q -l 1内WC

+0

OP提到了“自动”和“钩子脚本”。我在这里看到没有钩子... – Dialecticus 2011-12-26 10:39:52

+0

两个这些命令+一些grepping +一些逻辑,放在post-commit - 成为钩子 – 2011-12-26 10:49:19

+0

这应该从服务器端 – shaggy 2011-12-26 10:59:11

1

的第一步是通过使用

svnlook changed REPO_PATH 

提取改变的路径,你必须使用-r选项在post-Hook脚本中已知的修订(CommittedRev)。

以上将给出必须由脚本解析的已更改文件的列表。

如果您尝试提取添加/修改svn的行怪,这将给你已经在特定版本被修改的行...

svn blame -rCommittedRev:CommittedRev file:///Repository/ | grep "^ CommittedRev " 

你不能责备提取物线已被删除。

+0

显示svn blame命令中显示错误? – shaggy 2011-12-26 11:32:03

+0

你的意思是什么样的错误? – khmarbaise 2011-12-26 18:30:41

1

您可以使用svnlook来获取变化的差异,然后grep用于以+符号开头的行,表示添加的行。

例如,如果我想查看到任何线路是否加入其中提到System.out,我可以使用下面的管道:

svnlook diff -t "$TXN" "$REPOS" | grep -E "^\+" | grep -qE "System\.out" 

和测试的返回值 - 0意味着它找到匹配线。

+0

谢谢......其有帮助 – shaggy 2011-12-26 11:47:09

1

否否否

不要使用这种钩呢!

当您使用挂钩脚本时,您的用户将被卡住,等待挂钩完成。而是使用Jenkins来处理该任务。詹金斯是一个构建系统,但你可以让它做这样的事情,并完全跳过构建步骤。这样,用户不必等待钩子脚本完成,并且您可以在其中自动发布您所做的差异结果。

顺便说一句,为什么只有新添加的行,而不是所有的更改?您可以解析svn diff的结果以查找所有添加项,但我会假设您对所有更改都感兴趣。

+0

如果是一个快速检查(例如,几百毫秒),为什么用户必须等待Jenkins作业异步通知她?一个明智的预先提交钩子可以确保提交不首先发生,如果它是一个有问题的提交。 – Avi 2011-12-27 14:20:11

+0

@Avi - 这个挂钩是假设检查新添加的行。你打算如何将这些行回报给用户?你打算给他们发邮件吗?更新网页?使用詹金斯解决_reporting问题_因为詹金斯有一个地方来显示报告。另外,你有詹金斯变化的全部历史。另外,它不会在解析更改时阻止用户,然后尝试发送电子邮件或更新网页。钩子可以直接和立即地与用户沟通。预提交钩可防止用户做错事。为此,詹金斯更好。 – 2011-12-27 18:31:54

+1

我不确定你是如何阅读所有这些问题的。这个问题并没有说他想要增加的行的*报告,他只是想找到它们;我正假设自动对他们做些什么。不知道他想用他们做什么,我想我会回答这个问题(这是怎么做到的),而不是告诉他他做错了。 – Avi 2011-12-27 22:03:16