【问题标题】:svn server synchronise automaticallysvn 服务器自动同步
【发布时间】:2010-01-25 06:52:31
【问题描述】:
我在本地局域网上有一个 svn 服务器,它在 Windows 上。开发人员使用并从中签入/签出。为了安全起见,我们从 rackspace 和 linux 中获取了一台服务器。是否可以每周自动从本地 svn 服务器同步到远程服务器。远程的将主要用作远程备份,但以防万一有人想访问,他们可以这样做,因为我们的局域网没有静态或外部 IP。
【问题讨论】:
标签:
svn
version-control
synchronization
subversive
【解决方案1】:
我建议为此使用svnsync。当从 post-commit 钩子触发时,这个工具(svn 发行版的一部分)允许在 2 个(或更多)svn 服务器之间进行实时同步。
【解决方案2】:
只要备份服务器以只读方式使用,rsync 之类的基本功能就应该可以工作。但是您可能希望实现一个重试循环,它会一直同步直到没有要同步的内容,这样您就不会在有人提交某事时准确同步状态。
如果您需要在两个站点上进行读/写访问,使用 git 之类的东西并在客户端使用 git-svn 作为“向后兼容性”可能会更安全、更容易。
另一种选择是使用SVK,这是一个建立在 SVK 之上的分布式版本控制系统。但这也不会对客户完全透明。
【解决方案3】:
您可以使用svnadmin dump 转储整个存储库。
您可以使用 postcommit 钩子和相同的命令以独立格式转储提交,以后可以重新应用
结合这些和 rsync,您可以有效地将您的服务器复制到任何其他服务器上。只要您的备份服务器仅以只读方式访问,它就可以使用。如果发生故障,一个简单的 svn 开关将允许您的开发人员使用备份服务器。
我会建议您setup acls 禁止写入备份服务器,除非它成为主服务器。
peter 提到的另一种解决方案可能是 svk,但它不能用于完全自动同步:如果在两个服务器上进行了冲突更改会发生什么?该脚本将失败或破坏它。诸如分布式合并之类的任何事情都必须由人工审核。
另一种解决方案是 svn --mirror 方式
您应该尝试阅读此内容以获取有关保持 repos 同步的更多详细信息:How to synchronize two Subversion repositories? :)