如何使用Subversion获得主-主复制?
似乎是一个简单的问题:
- 我的防火墙内有一个SVN存储库。
- 我的防火墙外有一个SVN存储库。
- 我在防火墙的内部和外部都有用户。 (没有VPN不是一种选择:(那太容易了)
- 防火墙内的计算机可以与外部SVN服务器通信。但不是另一回事。
- 外部SVN是临时的-主存储库将始终位于内部。
我想以某种方式(最有可能从内部)进行所有更改,然后将其应用于另一更改。反之亦然。听起来很简单,我认为喜欢GIT的人可以做到这一点,但是我们正在使用SVN。
有人这样做吗?我不介意这是一个手动过程,只有几个外部人员,他们不需要一分钟更新一次,一天只需更新两次或者三遍即可。
我相信apache.org可以做到这一点,但是我找不到有关他们如何做到这一点的文档。有很多产品可以做到这一点(嗯,一个),但是我很想知道是否有人可以在没有它们的情况下以一种不错的,干净的方式来做到这一点。 svnsync仅在一个方向上执行此操作(主从)
很高兴能在Windows,Linux或者Mac上运行它,因为我们都有它们。 Windows和Mac是首选。
帮助! :) :)
[更新]经过12个月的摸索(最终不需要这样做)后,我认为正确的答案是正确的。使用git有一个从SVN-A提取的仓库,然后推送到新的git仓库,然后从那里推送到SVN-B。应该管用 :)
解决方案
简单通常是最好的方法,听起来我们已经有了一个简单的解决方案:在防火墙外使用SVN存储库。
我们已经说过防火墙内的机器可以到达,而且显然外部的机器也可以到达...所以这就是每个人,那么对于防火墙内的第二个SVN存储库我们有什么理由?如果只是备份,则只需将其备份在外部即可。
让我知道是否遗漏了部分要求。
另一个想法...如果我们同时具有内部和外部SVN实例...该如何阻止它们同时出于不同的目的同时给出相同的变更列表ID?如果我们正在寻找分散式解决方案,则应考虑使用GIT而不是SVN。
我们可以尝试的一件事是在文件级别复制存储库。我在类似的情况下使用FolderShare(在Windows和Mac上运行的http://www.foldershare.com),尽管我仅出于备份目的对其进行复制,但并未尝试使用SVN连接到副本。
嗯...我认为保持两个仓库同步是不平凡的。基本上将涉及将SVN转换为Mercurial或者Git。
我建议使用SVK或者git-svn。
这两种方法都可以让我们创建svn信息库的外部镜像,并允许外部开发人员直接向外部镜像进行提交。然后,我们可以将更改从此外部镜像拉入内部主存储库。
git-svn(我认为)将要求外部开发人员使用git。我更喜欢它,但是我不愿意将此推到别人身上。
但是,SVK允许外部开发人员继续使用svn。由于内部存储库只能在内部访问,因此内部帐户或者用户将必须处理定期同步(cron作业可能会起作用)。
这是SVK Wiki上的扩展方法:UsingSVKAsARepositoryMirroringSystem
http://wandisco.com/subversion/multisite/
Subversion MultiSite leverages WANdisco's unique replication technology to immediately synchronize Subversion repositories connected over a wide area network (WAN). Users at every location experience local area network (LAN) speed performance for both read and write operations. Subversion MultiSite also provides continuous hot backup and self-healing capabilities that automate disaster recovery, so that downtime is virtually eliminated.