如何编写svn钩子脚本

kik*_*iki 3 svn hook post commit

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

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

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

Dav*_* W. 8

如果您愿意,可以使用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中编写的一个示例.不知道它对你有什么好处.