我们在企业环境中拥有一个svn仓库结构,看起来像这样:
root
libs
shared_lib1
shared_lib2
private_lib
public_code
private_code
在这里,public_code是一个外部仓库,是开源的,公司外的人可以读写。shared_lib1和shared_lib2也是外部库,被另一家公司的一组程序员共享。我是维护者,并且可以做出技术上最好的选择,外部用户必须作出相应调整。
现在,我想知道从这种结构到一个mercurial仓库的最佳方法是什么。
1)我可以使用mercurial子仓库来紧密模拟旧设置。 或者
2)我可以为我们创建一个大型repo,并为外部合作伙伴创建三个新的较小、独立的仓库(因此基本上是forking projects),并在大型仓库和独立仓库之间交换changeset。
如果在svn中采用设置1),分支是一场噩梦,因为我总是需要在分支root时分支public_code、shared_lib1和shared_lib2。为此,我必须调用svn branch四次,并手动修改三次svn:externals属性。在mercurial中,我是否可以轻松地分支主仓库并自动获取所有子存储库的新分支?
当我进行设置2)时,文件系统将不同于仓库之间。例如,在“根”仓库中,我将有public_code/Makefile,但在“public_code”仓库中,文件将仅为“Makefile”。Mercurial仍然能够同步仓库之间的更改吗?工作流程可能是什么样的?