SVN提交后钩子 - 查找提交的文件夹

3
我们的代码仓库结构如下所示:

Dev
    Project1
        source
        docs
        ...
    Project2
        source
        docs
        ...
    ...

在我们提交 Project1 源代码之后,我们希望部署 Project1(编译、测试、复制等)。如何在 post-commit-hook 中找出我们是否提交到了 Dev/Project1,以便我们可以导出此项目并运行一些任务?当提交到 svn 时(例如使用 TortoiseSVN),会显示:“提交至:...”。如何找到“提交至”?


一个提交可以更改多个项目。对于Subversion而言,项目文件夹没有任何特殊之处。 - Wim Coenen
2个回答

3
你应该使用 标签。
svnlook changed -r REV REPOPATH

在一个post-commit钩子中,SVN将以REPOPATH和REV作为参数提供。您将获得一个包含所有更改路径的列表(每行一个)。然后,您可以轻松使用grep或其他工具搜索更改的路径。
记住:为构建/部署启动一个新线程,因为svn将等待post-commit钩子完成(因此在部署完成之前您将看不到“提交版本XX”)。

好的,当我获取所有更改的路径后,如何找到基本的“项目”?以及如何在提交后钩子中启动新线程进行部署? - Sazug
您可以使用正则表达式检查路径。在启动部署的命令中添加“&”(仅适用于Unix服务器)。 - Peter Parker
你应该使用一些脚本语言作为 post-commit-hook,如 Perl、Python 或 VBScript。我不知道如何启动另一个线程,但在 Windows 中很容易实现。 - Peter Parker
哦,我真丢脸...我刚刚测试了一下。你是对的,对于我的错误建议感到抱歉。 - Peter Parker
1
在Windows上以异步模式启动提交后钩子的最简单方法是从postCommit.bat调用vbs(Visual Basic脚本),然后从vbs调用您的程序。这就是我所做的,它非常有效,用户不必等待钩子终止。 - Victor Ionescu
显示剩余2条评论

3
我建议使用像CruiseControl.NET这样的持续集成服务器来完成集成任务,而不是使用提交后钩子。
这些工具可以轻松地监视您的存储库以检测特定URL下的更改,但它们不必以与您的Subversion服务器相同的权限运行。特别是它们永远不会损坏您的存储库。您可以在任何(旧)服务器上运行它们,而将您的存储库运行在更突出/稳定/备份的服务器上。

你说得对,持续集成是他问题的更好解决方案(+1),然而,我直接参考了他的标题和问题。 - Peter Parker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接