创建SVN镜像的最佳方法?


8

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

  • 有一个SVN提交后挂钩,它通过svnsync进行阻止和同步。显然,这里的问题是,提交一直阻塞,直到将数据传输到镜像为止。
  • 有一个SVN后提交钩子,该钩子是非阻塞的,并且可以通过svnsync进行同步。在这里,我看到了以下更微妙的问题:假设有人签入BIG文件,然后不久有人签入了一个小文件。因为提交是非阻塞的,所以两个svnsync进程可以同时运行,并且小文件可能会在到达镜像的过程中超过BIG文件(这在时间上很紧迫,并且不太可能,尽管原则上是可能的)。他们的修订将互换。
  • 与cron作业每15分钟同步一次。如果一次提交花费的时间超过15分钟,并且显然是时间延迟,则会出现同样的问题。

我忘记了可能性吗?我做错了吗?有任何想法吗?已经谢谢你了!

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


因为提交是非阻塞的,所以两个svnsync进程可以同时运行,并且小文件可能会在到达镜像的过程中超过BIG文件(这在时间上很紧迫,并且不太可能,尽管原则上是可能的)。他们的修订将互换。这是不可能的,svnsync复制提交时将其写入存储库。它们将始终以修订顺序显示。
戴夫·切尼

Answers:


3

您可以尝试一种类似于Atlassian的方法

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

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

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


对于svnsync不会乱序的观察,+ 1,唯一的问题是潜在的延迟。
Jim T

你完全正确...我犯了一个愚蠢的思维错误。因此,在大多数情况下,简单美观的SVN后提交挂钩应该可以实现。如果延迟是一个问题,可以参考一下Atlassian文章。非常感谢你!
roesslerj 2010年

请注意,提交后钩子将阻塞提交器,直到该钩子运行完毕。我不确定发布后提交钩子失败会发生什么,我不认为提交会回滚,但这至少会造成混乱。
戴夫·切尼

好吧,使用提交后挂钩,您可以发出一个立即返回的命令(例如,通过Linux上的“ command&”),使其无阻塞。由于挂钩是后提交的,因此无法回滚提交。如果svnsync失败,则下一个svnsync必须同步两个修订版本,而这只是简单地做到了。这里发生的问题我将在主题延迟下提交。
roesslerj 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.