我公司有一家子公司,其 Internet 连接速度很慢。我们那里的开发人员与我们的中央Subversion服务器进行交互。是否可以为它们配置从属/镜像?他们将在本地与服务器交互,所有提交将自动同步到主服务器。
这应该对开发人员尽可能透明。可用性是必须的。
请不要建议更改我们的版本控制系统。
我公司有一家子公司,其 Internet 连接速度很慢。我们那里的开发人员与我们的中央Subversion服务器进行交互。是否可以为它们配置从属/镜像?他们将在本地与服务器交互,所有提交将自动同步到主服务器。
这应该对开发人员尽可能透明。可用性是必须的。
请不要建议更改我们的版本控制系统。
这是可能的,但不一定很简单:您试图解决的问题非常接近于建立一个分布式开发环境,而这并不是 SVN 的设计目标。
SVN镜像方式
您可以svn mirror
按照 SVN 书籍文档中的说明使用来创建主存储库的只读镜像。您的开发人员每个人都与离他们最近的镜像交互。但是,从存储库的用户必须使用
svn switch --relocate master_url
在他们提交之前,他们必须记住在完成后重新定位到从站。如果您使用命令行客户端,则可以使用围绕存储库修改命令的包装脚本自动执行此操作。请记住,快速的重定位操作会增加一些开销。(并小心复制存储库 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 引入了代理支持。开发人员可以从从站签出他们的工作副本。然后所有只读操作(差异、日志、更新等)都将使用从站。提交时,slave 透明地将所有写操作传递给 master。
你应该试试SVK 版本控制系统
SVK是一个分散的版本控制系统,使用强大的 Subversion 文件系统构建。它支持存储库镜像、断开操作、历史敏感合并,并与其他版本控制系统以及流行的可视化合并工具集成。
如果其中一个存储库是完全只读的,您可以使用“svnsync”使其与主存储库保持同步。此工具通常与代理支持结合使用以创建主从设置。
例如,Apache 这样做是为了将他们的存储库镜像到不同的大陆。主存储库位于美国,但如果我从欧盟访问存储库,我会得到一个与主服务器一样工作的本地镜像。
inotify-tools 对我来说效果很好,这个网站上提到了细节:
http://planet.admon.org/synchronize-subversion-repositories-with-inotify-tools/
如果您需要超出 svnsync 提供的称为“Subversion MultiSite”的性能和数据安全性,有一个商业解决方案可以提供 Subversion 存储库的真正主动-主动复制(不是主从)。
免责声明:我为提供此解决方案的公司工作
VisualSVN Server 的Multisite Repository Replication就是为这种情况而设计的。
您可以将主存储库保留在您的主要办公室,并在远程位置设置多个可写的从存储库。
这应该对开发人员尽可能透明。可用性是必须的。
从属和主控之间的复制是透明和自动的,
从用户的角度来看,每个主从存储库都是一个可写的 Subversion 存储库,
开箱即用,可以通过 VisualSVN 服务器管理器 MMC 控制台单击几下进行配置。