如何编写svn钩子脚本

时间:2012-03-19 16:10:35

标签: svn post hook commit

我正在尝试为svn编写一个post commit hook脚本,以将存储库导出到团队基础服务器。 (因此,当您提交代码时,会将最新版本的代码复制到团队基础回购中)

我使用的语言只有C ++和C,我从未编写过脚本。有人可以给我一步一步的指示吗?使用哪种语言,阅读什么等......以及可能的一些示例代码?

是否可以使用c ++编写钩子脚本?或者我应该学习如何使用python或ruby等。

3 个答案:

答案 0 :(得分:7)

如果您愿意,可以使用C或C ++编写钩子。大多数人使用Perl或Python。

主要的是svnlook应该在你的钩子脚本中使用而不是svn。 svnlook比svn更快更安全。事实上,在预提交脚本中,您必须使用svnlook,因为您没有存储库修订版。

以下是关于post-commit挂钩的一些注意事项:

  • 您无法更改修订版,也不会尝试提交更改。你的post-commit钩子最终会调用自己。如果您希望开发人员遵循某些参数,那么如果开发人员没有正确执行,您需要使用pre-commit挂钩失败。
  • 当Subversion调用您的post-commit挂钩时,PATH环境变量已被删除。如果您需要访问其他命令或文件,则必须自己提供完整路径。
  • Subversion将从命令行传递某些参数。不是实际的命令行,但这意味着您可以在ARGV中找到这些参数。两个参数将传递给您:
    1. 服务器上的存储库路径(用于svnlook命令)。
    2. 存储库的修订版。

你必须通过svnlook(你可以通过system命令运行的所有其他内容。但是,由于你实际上是用C和C ++编写的东西,你可以使用内置的在Subversion API)。

另一种可能性:使用像Jenkins这样的连续构建系统为您完成脏工作。您可能会发现通过Jenkins更容易,而不必担心提交后挂钩如何完成此任务。 Jenkins的一个优点是,当出现问题时,您不会向用户发送失败的提交后消息(可能没有错误)。相反,您可以获得所发生事件的完整日志,并提醒实际解决问题的人员。

这是我在Perl写的sample of one。不知道它对你有用吗。

答案 1 :(得分:1)

您可以在此处找到有关如何定义预提交挂钩的说明: http://wordaligned.org/articles/a-subversion-pre-commit-hook

提交后的创建类似于该指令。

将后提交模板复制到新文件后,您只需添加一行来调用您用c ++编写的程序,然后将参数传递给您的程序。

这取决于你的目标,但大多数情况下,使用脚本语言作为shell脚本或python来完成你的工作会节省更多的时间。

答案 2 :(得分:0)

这里有一个stackoverflow答案,其中包含一个用于Windows上的post-commit钩子的示例,使用本机windows shell命令 - https://stackoverflow.com/a/3630534/7984