似乎是一个简单的问题:
- 我的防火墙内有一个 SVN 存储库。
- 我在防火墙外有一个 SVN 仓库。
- 我在防火墙内外都有用户。(没有 VPN 不是一种选择 :( 那太容易了)
- 防火墙内的机器可以与外部 SVN 服务器通信。但不是另一种方式。
- 外部 SVN 是暂时的——主要的回购将永远在里面。
我想以某种方式(从内部,最有可能)将所有更改集中在一个中,并将它们应用于另一个。反之亦然。听起来很简单,我假设像 GIT 一样可以做到这一点,但我们使用的是 SVN。
有人做过这个吗?我不介意这是一个手动过程——只有几个外部人员,他们不需要即时更新,一天两到三次就可以了。
我相信 apache.org 会这样做,但我找不到关于他们如何做到这一点的文档。有几种产品可以做到这一点(好吧,一种),但我很想知道是否有人有一种漂亮、干净的方法可以在没有它们的情况下做到这一点。svnsync 这样做,只是在一个方向上(主从)
很高兴让它在 Windows、Linux 或 Mac 上运行,因为我们拥有所有这些。不过首选 Windows 和 Mac。
帮助!:) :)
[更新] 经过 12 个月的胡闹(最终不需要这个),在我看来,正确答案是正确的。使用 git - 有一个从 SVN-A 拉取的 repo,然后推送到一个新的 git repo,然后从那里推送到 SVN-B。应该管用 :)
这两个都可以让您创建 svn 存储库的外部镜像,并允许外部开发人员直接向外部镜像提交。然后,您可以将更改从此外部镜像拉取并推送到您的内部主存储库。
git-svn 会(我认为)要求外部开发人员使用 git。我更喜欢它,但我不愿意把它强加给别人。
然而,SVK 允许外部开发人员继续使用 svn。由于内部 repo 只能在内部访问,因此内部帐户或用户必须处理定期同步(cron 作业可能会起作用)。
这是 SVK wiki 上的扩展指南:UsingSVKAsARepositoryMirroringSystem
简单通常是最好的方法,听起来您已经有了一个简单的解决方案:在防火墙外使用 SVN 存储库。
你已经说过防火墙内的机器可以访问它,显然外面的机器可以访问它......所以这是每个人,那么你有什么理由在防火墙内建立第二个 SVN 存储库?如果它只是作为备份,那么只需备份外面的那个。
如果我遗漏了您的部分要求,请告诉我。
另一个想法......如果你有内部和外部SVN实例......什么是阻止他们同时给出相同的更改列表ID,用于不同的目的?如果您正在寻找去中心化的解决方案,您应该寻找GIT而不是 SVN。
VisualSVN Server Enterprise Edition 的功能之一是多站点存储库复制,它可以满足您的需求。
该功能基于 VisualSVN 分布式文件系统 (VDFS) 技术,该技术旨在实现跨地理分布式站点的透明 Subversion 存储库复制。VDFS 的一些显着特性:
- 所有分布式 VDFS Subversion 存储库都是可写的,
- VDFS 实现透明的双向数据复制,
- VDFS 支持复制授权规则和高级身份验证机制,例如具有安全 SSL/TLS 加密的集成 Windows 身份验证(NTLM/协商)。
- 所有 VDFS 存储库都包含相同的数据集,
- 使用 VDFS 通过 WAN 进行存储库复制比基于直写代理的复制快 10 倍,
- VDFS 配置通过图形界面完成,无需任何复杂的步骤。
值得注意的是,VDFS 遵循经典的主从复制模型,与主从复制模型相比具有显着优势,因为它更适合复制具有 FSFS fs 类型后端的 Subversion 存储库。VDFS技术比SVN的master-master复制解决方案可靠得多。
嗯...保持两个回购协议彼此同步是非常重要的,我认为。它基本上涉及将 SVN 转换为 Mercurial 或 Git。
您可以尝试的一件事是在文件级别复制回购协议。我在类似的情况下使用 FolderShare(http://www.foldershare.com - 在 Windows 和 Mac 上运行),尽管我复制它只是为了备份目的,并没有尝试使用 SVN 连接到副本。
http://wandisco.com/subversion/multisite/
Subversion MultiSite 利用 WANdisco 独特的复制技术来立即同步通过广域网 (WAN) 连接的 Subversion 存储库。每个位置的用户都可以体验局域网 (LAN) 的读取和写入操作速度性能。Subversion MultiSite 还提供连续热备份和自我修复功能,可自动进行灾难恢复,从而几乎消除了停机时间。