我正在尝试为svn编写一个post commit hook脚本,以将存储库导出到团队基础服务器。 (因此,当您提交代码时,会将最新版本的代码复制到团队基础回购中)
我使用的语言只有C ++和C,我从未编写过脚本。有人可以给我一步一步的指示吗?使用哪种语言,阅读什么等......以及可能的一些示例代码?
是否可以使用c ++编写钩子脚本?或者我应该学习如何使用python或ruby等。
答案 0 :(得分:7)
如果您愿意,可以使用C或C ++编写钩子。大多数人使用Perl或Python。
主要的是svnlook
应该在你的钩子脚本中使用而不是svn
。 svnlook比svn
更快更安全。事实上,在预提交脚本中,您必须使用svnlook
,因为您没有存储库修订版。
以下是关于post-commit
挂钩的一些注意事项:
pre-commit
挂钩失败。post-commit
挂钩时,PATH
环境变量已被删除。如果您需要访问其他命令或文件,则必须自己提供完整路径。ARGV
中找到这些参数。两个参数将传递给您:
svnlook
命令)。你必须通过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