我已经阅读过关于Mercurial子存储库的每个问题,但我仍然不确定它是如何工作的。我们在IIS上使用hgweb.cgi,因此我们有http://指向我们所有存储库的路径。
这是基本布局:
/Libraries - http://server/Libraries
/Project1 - http://server/Project1
/Project1/LibrariesSubrepo - http://server/Project1/LibrariesSubrepo (clone of libraries)
/Project2 - http://server/Project1
/Project2/LibrariesSubrepo - http://server/Project2/LibrariesSubrepo (clone of libraries)
在.hgsub文件中,我将路径设置为:
LibrariesSubrepo = LibrariesSubrepo
如果我想处理项目,我将它们从服务器克隆到我的工作站,这样我就可以克隆Project1和Project2,它也会自动拉出子项目。
在我本地工作站的project1中,我对/ Project1 / LibrariesSubrepo中的文件进行了一些更改。如何确保这些更改使其返回到服务器上的库的源代码库?我是否必须手动将更改从subrepo推送到subrepo的源repo?
我希望能够在本地更改Project1 repo,然后提交/推送这些更改,然后在Project2中,我应该能够从服务器中提取更改Project2 / LibrariesSubrepo的更改到最新版本
答案 0 :(得分:4)
您绝对可以从LibrariesSubrepo
Project1
手动推送到服务器上的Libraries
存储库,然后手动从Libraries
拉入LibrariesSubrepo
Project2克隆。
但是,您也可以链接服务器上的子目录:
share extension允许您创建两个或多个共享.hg
文件夹的存储库。在服务器上执行此操作,以便服务器上的子实例的三个实例共享.hg
文件夹。
符号链接.hg
文件夹 - 更多oldschol,它只适用于您可以创建符号链接的服务器(Unix服务器或Windows Vista以及更高版本的权限)。
在服务器上只保留一个子参数,但在hgweb
配置中将其暴露三次。像这样:
[paths]
Project1 = /repos/Project1
Project1/LibrariesSubrepo = /repos/Libraries
Project2 = /repos/Project2
Project2/LibrariesSubrepo = /repos/Libraries
在所有情况下,服务器上实际上只有三个存储库:Project1
,Project2
和Libraries
。