如何同步两个Subversion存储库?
我公司的子公司的Internet连接速度很慢。我们的开发人员无法与我们的中央Subversion服务器进行交互。是否可以为其配置从站/镜像?它们将与服务器本地交互,并且所有提交将自动同步到主服务器。
对于开发人员来说,这应该尽可能透明。可用性是必须的。
请,没有建议更改我们的版本控制系统。
解决方案
我们应该尝试SVK版本控制系统
SVK is a decentralized version control system built with the robust Subversion filesystem. It supports repository mirroring, disconnected operation, history-sensitive merging, and integrates with other version control systems, as well as popular visual merge tools.
在此链接上,有关于使用SVK同步SVN存储库的文本
这是可能的,但不一定是简单的:我们要解决的问题很危险地接近于建立分布式开发环境,而这并不是SVN的确切目的。
SVN镜像方式
我们可以按照SVN图书文档中的说明使用" svn mirror"来创建主存储库的只读镜像。开发人员都与离他们最近的镜像进行交互。但是,从存储库的用户将不得不使用
svn开关-重新定位master_url
在他们提交之前,他们将必须记住,一旦完成,便要重新安置在奴隶上。如果使用命令行客户端,则可以使用围绕SVN的存储库修改命令的包装器脚本来自动执行此操作。请记住,快速进行重定位操作会增加一些开销。 (并小心复制存储库uuid,请参阅SVN文档。)
[编辑检查TortoiseSVN文档,看来我们可以让TortoiseSVN在客户端执行挂钩脚本。我们现在可以在此之前/之后创建提交脚本。或者,或者尝试看看是否可以使用TortoiseSVN自动化界面来执行此操作]。
SVK方式
svk是一组Perl脚本,它们模拟SVN上的分布式镜像服务。我们可以对其进行设置,以便多个开发人员共享本地分支(镜像)。这样,开发人员的基本用法将完全透明。我们将必须使用svk客户端来进行樱桃采摘,合并和合并。如果我们可以绕开分布式概念,这是可行的。
git-svn方式
尽管我自己从未使用过它,但是我们也可以让遥远的开发人员在本地使用git并使用git-svn网关进行同步。
最后的话
这完全取决于开发环境和所需的集成级别。根据IDE(如果可以更改SCM),我们可能希望查看支持分布式开发的其他完全分布式SCM(例如Mercurial / Bazaar / Git / ...)。
当我们使用http托管存储库时,Subversion 1.5引入了代理支持。开发人员可以从从站签出他们的工作副本。然后,所有只读操作(差异,日志,更新等)将使用从属服务器。提交时,从设备将所有写操作透明地传递给主设备。
如果其中一个存储库是完全只读的,则可以使用'svnsync'使其与主存储库保持最新。此工具通常与代理支持结合使用以创建主从设置。
例如。 Apache这样做是为了将其存储库镜像到不同的大陆。主存储库位于美国,但是如果我从欧盟访问存储库,则会得到一个与主服务器一样工作的本地镜像。