2010-01-25 80 views
5

我的本地局域网上有一台svn服务器,它在windows上。开发人员使用并检入/退出。为了更安全一方,我们从一个linux机架上占用了一台服务器。是否有可能从本地svn服务器到远程服务器进行自动每周同步?远程服务器主要用作远程备份,但如果有人想访问,那么他们可以这样做,因为我们的LAN没有静态或外部IP。svn服务器自动同步

回答

4

我建议为此使用svnsync。当从post-commit钩子触发时,这个工具(svn发行版的一部分)允许在两个(或多个)svn服务器之间进行实时同步。

+0

如果你去这个方向(推荐)如果提交后挂钩失败,请确保您阅读了不同步的疑难解答。除了提交后挂钩之外,您可能还想查看定期同步。 一个例子可以在这里找到 http://blogs.atlassian.com/developer/2008/11/subversion_replication_at_atla.html – Dan 2010-01-25 17:48:52

0

只要备份服务器使用只读,像rsync这样的基本应该工作。但是你可能想要实现一个重试循环,保持同步,直到没有什么需要同步为止,以便在某人正在提交内容时不会同步某个状态。

如果你需要两个站点的读/写访问权限,那么使用git之类的东西可能会更安全和更容易,并且在客户端使用git-svn作为“向后兼容性”。

另一种选择是使用SVK,这是一个建立在SVK之上的分布式版本控制系统。但这对客户来说也不完全透明。

0

您可以使用svnadmin dump转储整个存储库。 您可以使用postcommit挂钩以及相同的命令以独立格式转储提交,以后可以重新应用

将这些和rsync结合使用,您可以在任何其他服务器上有效地复制服务器。只要您的备份服务器只是只读访问,它就可以使用。在发生故障的情况下,一个简单的svn开关将允许开发人员使用备份服务器。

我会建议你setup acls禁止写入备份服务器,除非它成为主服务器。

peter提到的另一个解决方案可能是svk,但不能用于完全自动同步:如果在两台服务器上发生冲突更改,会发生什么情况?该脚本将失败或破坏这一点。任何分布式合并都必须由人来审查。

另一种解决办法是使用svn --mirror方式

你应该尝试在保持回购同步阅读本作更详细的信息:How to synchronize two Subversion repositories? :)