如何同步两个Subversion版本库?

我的公司有一个互联网连接缓慢的子公司。 我们的开发人员忍受着与我们中央Subversion服务器的交互。 有没有可能为他们configuration一个slave / mirror? 他们将与服务器本地交互,所有提交将自动同步到主服务器。

这应该为开发者尽可能透明地工作。 可用性是必须的。

请不要改变我们的版本控制系统。

当你使用http来托pipe你的仓库时,Subversion 1.5引入了代理支持。 开发人员可以从从站检出工作副本。 然后所有的只读操作(比较,日志,更新等)将使用从属。 提交时,从设备透明地将所有写操作传递给主设备。

这是可能的,但不一定是简单的:你试图解决的问题危险地接近于build立一个分布式的开发环境,这不是SVNdevise的。

SVN镜像的方式

您可以使用SVN书籍文档中解释的svn mirror来创build主存储库的只读镜像。 您的开发人员每个人都与最靠近他们的镜像交互。 然而,从属仓库的用户将不得不使用

svn开关–relocate master_url

在他们可以提交之前,他们将不得不记得在他们完成后重新安置在奴隶身上。 如果您使用命令行客户端,可以使用围绕SVN上的存储库修改命令的包装器脚本来自动执行此操作。 请记住,快速重定位操作会增加一些开销。 (并要小心复制存储库uuid – 请参阅SVN文档 。)

[编辑 – 检查TortoiseSVN文档似乎你可以有TortoiseSVN 执行钩子脚本客户端 。 您现在可以创build一个前/后提交脚本。 或者试试看看你是否可以使用TortoiseSVN自动化界面来做到这一点]。

SVK的方式

svk是一组通过SVN模拟分布式镜像服务的Perl脚本。 您可以设置它,以便本地分支(镜像)由多个开发人员共享。 那么开发人员的基本使用将是完全透明的。 你将不得不使用svk客户端来进行樱桃采摘,合并和重组。 如果你能够分头讨论分布式概念,这是可行的。

git-svn的方式

虽然我从来没有使用过自己,你也可以让遥远的开发者在本地使用git,并使用git-svn网关进行同步。

最后的话

这一切都取决于你的开发环境和你需要的集成水平。 根据您的IDE(如果您可以更改SCM ),您可能需要查看其他完全分布式SCM(支持Mercurial / Bazaar / Git / …),这些支持分布式开发。

你应该尝试SVK版本控制系统

SVK是一个分布式的版本控制系统,内置强大的Subversion文件系统。 它支持存储库镜像,断开操作,历史敏感的合并,并与其他版本控制系统,以及stream行的可视合并工具集成。

在这个链接上有关于使用SVK来同步SVN存储库的文本

如果其中一个存储库是完全读取的,则只能使用“svnsync”使其与主存储库保持同步。 此工具通常与代理支持结合使用以创build主从设置。

例如,Apache这样做是为了将他们的仓库镜像到不同的大洲。 主Repostitory位于美国,但是如果我从EU访问存储库,我会得到一个和主服务器一样的本地镜像。

inotify工具适合我,在这个网站上提到的细节:

http://planet.admon.org/synchronize-subversion-repositories-with-inotify-tools/

如果您需要超越svnsync提供的名为“Subversion MultiSite”的性能和数据安全性,那么有一个商业解决scheme可以提供Subversion版本库的真正主动 – 主动复制(不是主从)。

免责声明:我为做这个解决scheme的公司工作

VisualSVN服务器的多站点存储库复制是为这种情况而devise的。

您可以在主办公室保留主存储库,并在远程位置设置多个可写入的从属存储库。

这应该为开发者尽可能透明地工作。 可用性是必须的。

  • 从设备和主设备之间的复制是透明和自动的,

  • 从用户的angular度来看,每个主从版本库都是一个可写的Subversion版本库,

  • 开箱即用,可通过VisualSVN服务器pipe理器MMC控制台进行几次点击configuration。

VisualSVNServerManagerConsoleMultisite