同步两个本地 SVN 签出

同步两个本地 SVN 签出

问题概述。我有一个使用 SVN 的网站,并在 2 个不同的服务器上签出以实现负载平衡。这是一个 drupal 网站,除了资产和文件目录之外的所有内容都在服务器上本地签出。

现在,在更新时,我必须手动更新两个本地签出。(svn up)这很容易出错,如果我们决定在轮换中添加另一个网络服务器,将提供更多的开销。

简而言之:我必须找到一种方法来自动保持 2 个本地结帐同步,这样我只需要在 1 台服务器上更新,所有内容都会同步。

我尝试过的事情:

  • 使用 find 命令对服务器 1 上的目录和通过 SSH 在服务器 2 上的目录(不包括 .svn 目录)进行 md5 求和,然后使用 diff 的结果作为参数在服务器 2 上执行 svn ups。它总是给我相同的不同文件。

    ssh $TARGET "cd "$SVN_TARGET" && 查找 . -name .svn -prune -o -type f -print0 | xargs -0 md5sum" >> /tmp/server2.sums

    cd $SVN_SOURCE && find . -name .svn -prune -o -type f -print0 | xargs -0 md5sum >> /tmp/server1.sums

    diff /tmp/server1.sums /tmp/server2.sums | cut -d"." -f2 | xargs -i ssh $TARGET "su www-data -c'svn up /dir/to/svn/repo/{} --username \"******\" --password \"******\"'"

  • 使用 svn info,然后使用 svn diff 和主要修订版本来获取所有更改的文件。问题是,即使它是最新的,本地修订版本 ID 也不等于 SVN 服务器上的主要修订版本 ID。

任何帮助都非常感谢,并且对冗长的文字表示歉意:)

答案1

那么,每五分钟在每个主机上设置一个 crontab 条目来运行一个脚本怎么样?该脚本可以更新 svn 存储库并执行任何必要的后期处理……

或者您可以使用 Subversion 中的提交后钩子来触发对两个客户端的部署……

答案2

如何在其中一个主机上的 crontab 中运行控制作业,该作业执行 svn info 来确定修订版本,然后对该修订版本执行 svn update,并同时在另一台主机上运行 ssh svn update 到同一修订版本?

答案3

如果你在 Linux 操作系统上运行,你可以使用DRBD在块级别同步两个 SVN 服务器之间的数据,而不必担心 Subversion。

答案4

我强烈建议使用卡皮斯特拉诺用于代码部署。有关与 Drupal 集成的信息,请参阅以下教程:第一的第二

相关内容