svn post-commit execute(如果消息~Rendition.blah)

时间:2011-08-30 15:50:59

标签: svn bash

我需要一个更聪明的提交后脚本。

如果提交消息表明“添加Revision-v.10.3生产”,则需要执行ssh命令。

是否可以通过提交后执行此操作?

3 个答案:

答案 0 :(得分:4)

<击> 没有简单的方法可以从SVN post-commit挂钩获取提交消息。您可以向svn log询问该消息,然后将其解析出来。

 MESSAGE=$(/usr/bin/svn log "$1" -r HEAD --limit 1 --incremental | sed '1,3d')

来自:here

要从post-commit获取提交消息,请使用此:

MESSAGE=$(svnlook propget --revprop -r $REV $REPOS_PATH svn:log)

答案 1 :(得分:1)

NO!没有! NO!

您应该做的最后一件事是在提交后执行ssh

我不确定你的意图是什么,我认为它们是光荣的。但是,请记住,在提交后挂钩完成执行之前,Subversion不会将控制权返回给客户端。如果您的ssh命令只需要十秒钟就可以执行,那么用户会看到svn commit在那里挂了十秒钟才能执行任何操作。

在这十秒钟内,用户将对您,公司和Subversion产生沸腾的仇恨。他们将成为他们以前自我的苦恼之壳,这将是你的错误!你想要那种内疚吗?不这么认为。

最好的解决方案是使用像Jenkins这样的连续构建服务器并执行SSH命令。它可以获取命令的结果,如果失败,则将结果通过电子邮件发送给开发人员及其团队。 Jenkins非常容易设置和使用,通过Jenkins(即正确的方式)这样做不应该花费超过几个小时(最多)。

因此,用户提交不会挂在那里,但他们仍然会获得他们需要的信息。而且,既然你把它绑在Jenkins上,你可能会找到Jenkins的各种插件来做各种你认为不可能的奇妙事情。你将成为英雄并被尊为上帝。这不比激怒仇恨好吗?

选择权在你手中。

(顺便说一句,您可以通过svn propget --rev-prop -r $REV svn:log

获取提交消息

答案 2 :(得分:0)

仅仅是一个FYI,我刚刚设置的是一个PHP脚本,用于在提交后执行。如果您对PHP感到满意,这将为您提供大量控制,并且可以运行ssh命令。我在这里概述了它: https://stackoverflow.com/a/10146169/654235