如何编写post-commit钩子来自动同步两个存储库

时间:2014-10-14 13:56:23

标签: svn ssl version-control

我正在尝试使用subversion(SVN)同步两个存储库,并在源服务器和镜像服务器上使用visualSVN。

我能够手动同步它们,即通过命令行,但我希望它使用主存储库的post commit钩子自动触发。

我在源存储库(master)的post-commit钩子中编写以下代码,以自动与镜像存储库(slave)同步:

svnsync --non-interactive --sync-username syncuser --sync-password syncuserpassword sync mirror-repository-url

但是当我将一些文件签入源存储库(master)时,它会显示以下错误:

**post-commit hook failed(exit code 1) with output:

svnsync:E230001:Unable to connect to a repository at URL 'mirror-repository-url' svnsync:E230001:Server SSL certificate verification failed; Certificate issued for a different hostname; issuer is not trusted**

但是我在SVN(主服务器)的源存储库中获取文件,但是没有到镜像存储库(slave),所以我尝试手动提供相同的代码,这些代码是通过命令行的主存储库的post-commit钩子编写的。镜像服务器,然后镜像存储库(从属)与添加到源存储库(主)的新修订同步

如何在使用提交后挂钩自动同步时解决此问题?我哪里做错了?你能提出一些想法来克服这个错误吗?

1 个答案:

答案 0 :(得分:1)

  

所以我尝试手动提供相同的代码,这些代码是通过镜像服务器的命令行在主存储库的post-commit钩子中编写的

首先,您正在测试错误的服务器。如果在主服务器上执行提交后挂钩有问题,那么您应该在主服务器上测试命令。

通常,当您看到命令行与提交后挂钩的上下文之间的行为不同时,它与未设置环境变量的事实有关。来自SVN book section on hooks

  

出于安全原因,Subversion存储库执行具有空环境的钩子程序 - 即根本没有设置环境变量,甚至不是$ PATH(或Windows下的%PATH%)。因此,许多管理员在他们的钩子程序手动运行时感到困惑,但是在Subversion运行时不起作用。请务必在钩子程序中明确设置任何必要的环境变量和/或使用程序的绝对路径。