我的公司有一家互联网连接缓慢的子公司。我们的开发人员可能会与我们的中央Subversion服务器进行交互。是否可以为它们配置从站/镜像?它们将与服务器进行本地交互,并且所有提交都将自动同步到主服务器。
这应该对开发人员尽可能透明地起作用。可用性是必须的。
请不要改变我们的版本控制系统。
答案 0 :(得分:49)
这是可能但不一定简单:您尝试解决的问题非常危险地接近于设置分布式开发环境,这不完全是SVN的设计目标。
SVN镜像方式
您可以按照SVN书籍文档中的说明使用svn mirror
来创建主存储库的只读镜像。您的开发人员各自与最接近他们的镜像进行交互。但是,从属存储库的用户必须使用
svn switch --relocate master_url
在他们可以提交之前,他们将不得不记得在完成后重新安置奴隶。如果您使用命令行客户端,则可以使用围绕SVN上的存储库修改命令的包装器脚本自动执行此操作。请记住,快速重定位操作会增加一些开销。 (并且要小心复制存储库uuid - 请参阅the SVN documentation。)
[编辑 - 检查TortoiseSVN文档,您似乎可以拥有TortoiseSVN execute hook scripts client side。您可以在此时创建前/后提交脚本。要么是这样,要么试着看看你是否可以使用TortoiseSVN automation interface来做到这一点。
SVK方式
svk是一组Perl脚本,它通过SVN模拟分布式镜像服务。您可以对其进行设置,以便多个开发人员共享本地分支(镜像)。然后开发人员的基本用法将完全透明。您将不得不使用svk客户端进行樱桃采摘,合并和starmerging。如果您能够了解分布式概念,那么这是可行的。
git-svn方式
虽然我自己从未使用过,但您也可以让远程开发人员在本地使用git并使用git-svn网关进行同步。
最后的话
这完全取决于您的开发环境和所需的集成级别。根据您的IDE(以及您是否可以更改SCM),您可能希望查看其他完全分布式的SCM(请考虑Mercurial / Bazaar / Git / .. 。)支持开箱即用的分布式开发。
答案 1 :(得分:29)
当您使用http来托管您的存储库时,Subversion 1.5引入了代理支持。开发人员可以从奴隶核对他们的工作副本。然后所有只读操作(差异,日志,更新等)将使用从属。提交时,从设备透明地将所有写操作传递给主设备。
答案 2 :(得分:6)
您应该尝试The SVK version control system
的文字SVK是一个分散的版本控制系统,使用强大的Subversion文件系统构建。它支持存储库镜像,断开连接操作,历史敏感的合并,并与其他版本控制系统以及流行的可视化合并工具集成。
答案 3 :(得分:2)
如果其中一个存储库完全只读,则可以使用“svnsync”使其与主存储库保持同步。此工具通常与代理支持结合使用,以创建主从设置。
E.g。 Apache这样做是为了将他们的存储库镜像到不同的大陆。主存储库位于美国,但如果我从EU访问存储库,我会得到一个与主服务器一样的本地镜像。
答案 4 :(得分:1)
inotify-tools对我很有用,详情请见本网站:
http://planet.admon.org/synchronize-subversion-repositories-with-inotify-tools/
答案 5 :(得分:1)
如果您需要超出svnsync提供的称为“Subversion MultiSite”的性能和数据安全性,那么有一种商业解决方案可以提供Subversion存储库的真正主动 - 主动复制(非主 - 从)。
免责声明:我为制作此解决方案的公司工作
答案 6 :(得分:1)
VisualSVN Server的Multisite Repository Replication是专为此案例设计的。
您可以将主存储库保留在主办公室中,并在远程位置设置多个可写的从属存储库。
这应该对开发人员尽可能透明地起作用。 可用性是必须的。
从站与主站之间的复制是透明且自动的,
从用户的角度来看,每个主存储库和从属存储库都是可写的Subversion存储库,
开箱即用,可通过VisualSVN Server Manager MMC控制台点击几下进行配置。