创建 SVN 镜像的最佳方法?

创建 SVN 镜像的最佳方法?

我目前正在研究设置 SVN 镜像的最佳方法。我目前看到三种可能性,每种都有各自的缺点:

  • 有一个 SVN 提交后挂钩,它正在通过 svnsync 进行阻塞和同步。这里的问题显然是,提交会一直处于阻塞状态,直到数据传输到镜像。
  • 有一个非阻塞的 SVN 提交后挂钩,并通过 svnsync 进行同步。在这里我看到了以下更微妙的问题:假设有人签入了一个大文件,而其他人不久后签入了一个小文件。由于提交是非阻塞的,两个 svnsync 进程可能同时运行,小文件可能在镜像过程中超越大文件(这似乎非常耗时且不太可能,尽管原则上是可能的)。他们的修订将交换。
  • 使用 cron-job 每 15 分钟同步一次。如果提交时间超过 15 分钟,显然存在时间延迟,也会出现同样的问题。

我是不是忘记了某种可能性?我是不是搞错了什么?有什么想法吗?谢谢你!

也许我应该指出,第二种可能性是不同的网站所建议的。例如参见 http://www.kirkdesigns.co.uk/mirror-svn-repository-svnsync

答案1

你可以尝试类似我们在 Atlassian 使用的方法

https://www.atlassian.com/blog/archives/subversion_replication_at_atla?_ga=2.217251286.1933127788.1517539727-1159165484.1517539727

免责声明:我目前是 Atlassian 员工,但未参与实施此解决方案(仅负责维护)

正如我在上面的评论中所说,从远程存储库运行的 svnsync 具有确定性。它不能无序地应用变更集。因此,使用远程存储库的唯一问题是由于变更集传播而导致的滞后量。

答案2

Vanilla SVN 可让您在钩子脚本和 svnsync 工具的帮助下构建存储库镜像解决方案(请参阅SVNBook | 直写代理).基于svnsync的镜像并不完全稳健并且有几个限制。例如,svnsync 不支持锁定-修改-解锁版本控制模型(它不复制文件锁定)。

VisualSVN 服务器提供基于的替代存储库镜像解决方案VDFS(VisualSVN分布式文件系统)技术。VDFS 可帮助 Subversion 管理员部署 Subversion 存储库的可写镜像,而不受 svnsync 的限制。

免责声明:我是 VisualSVN 团队的支持工程师。

相关内容