在克隆中进行更改时,Mercurial子存储库保持最新的工作流程?

时间:2011-09-01 13:11:55

标签: version-control mercurial subrepos

我已经阅读过关于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的更改到最新版本

1 个答案:

答案 0 :(得分:4)

您绝对可以从LibrariesSubrepo Project1手动推送到服务器上的Libraries存储库,然后手动从Libraries拉入LibrariesSubrepo Project2克隆。

但是,您也可以链接服务器上的子目录:

  1. share extension允许您创建两个或多个共享.hg文件夹的存储库。在服务器上执行此操作,以便服务器上的子实例的三个实例共享.hg文件夹。

  2. 符号链接.hg文件夹 - 更多oldschol,它只适用于您可以创建符号链接的服务器(Unix服务器或Windows Vista以及更高版本的权限)。

  3. 在服务器上只保留一个子参数,但在hgweb配置中将其暴露三次。像这样:

    [paths]
    Project1                  = /repos/Project1
    Project1/LibrariesSubrepo = /repos/Libraries
    Project2                  = /repos/Project2
    Project2/LibrariesSubrepo = /repos/Libraries
    
  4. 在所有情况下,服务器上实际上只有三个存储库:Project1Project2Libraries