4

我已经阅读了有关 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 中的文件进行了一些更改。如何确保这些更改返回到服务器上库的源代码库?我是否必须手动将更改从子存储库推送到子存储库的源存储库?

我希望能够在本地对 Project1 存储库进行更改,然后提交/推送这些更改,然后在 Project2 中,我应该能够从应该将 Project2/LibrariesSubrepo 更新到最新版本的服务器中提取更改。

4

1 回答 1

3

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

但是,您也可以链接服务器上的子存储库:

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

  2. .hg文件夹进行符号链接 - 更多 oldschol 并且仅当您在可以创建符号链接的服务器上(Unix 服务器或 Windows Vista 以及具有正确权限的更高版本)上时才有效。

  3. 在服务器上只保留一个子存储库,但在hgweb配置中公开它 3 次。像这样:

    [paths]
    Project1                  = /repos/Project1
    Project1/LibrariesSubrepo = /repos/Libraries
    Project2                  = /repos/Project2
    Project2/LibrariesSubrepo = /repos/Libraries
    

在所有情况下,服务器上实际上只有三个存储库:Project1Project2Libraries

于 2011-09-06T10:16:29.167 回答