1

我在 Linux 机器上有以下存储库结构:

-- source_control
    -- projects
        project1
        project2
        ...
    -- repositories
        repo1
        repo2
        repo3
        ...

这意味着我有一个source_control目录,其中包含两个名为projectsand的嵌套目录repositories。该repositories目录包含“简单”存储库(即,没有子存储库的存储库)并projects包含只是薄层的存储库并包含repositories目录中的子存储库。

现在我在各种项目中的 .hgsub 文件看起来像这样:

repo1 = /mnt/network/drive/source_control/repositories/repo1
repo2 = /mnt/network/drive/source_control/repositories/repo2

等等。现在,由于所有开发人员都在安装了相同网络驱动器的 linux 机器上工作,所以这非常有效。但是,我们现在也需要在 Windows 上工作。这会导致一些问题,因为 Windows 机器无法访问 subrepos 路径(网络驱动器可以从 Windows 机器访问,它们只是使用不同的路径)。

我尝试将.hgsub文件更改为:

repo1 = ../../repositories/repo1
repo2 = ../../repositories/repo2

但这不起作用(当我提交.hgsub文件时,子存储库为空)。

我也尝试在 HTTP 中提供存储库,但它大大减慢了速度,我想找到一种更好的方法(所有机器都在本地网络中)。在我的中使用相对路径的正确方法是什么,.hgsub以便我可以在 Windows 和 Linux 机器上工作?

4

1 回答 1

1

根据Mercurial wiki,让它与一个全新的存储库一起工作的方法是:

$ echo repo1 = ../../repositories/repo1 > .hgsub
$ hg clone ../../repositories/repo1
; here you could update to whichever version you wanted
$ hg add .hgsub
$ hg commit -m "New relative subrepo added"

然后克隆主存储库也会克隆子存储库,因为路径是相对的。它适用于我的 Windows 机器,所以你的想法基本上是正确的。

在您的实例中,我认为提交修改.hgsub的内容是清除目录,因为您已经重新定义了子存储库指向的内容(我不知道这种行为是否是设计使然)。因此,也许在您提交之前,您可以自己删除整个子目录并重新克隆:

; modify .hgsub as above
$ rm -rf repo1
$ hg clone ../../repositories/repo1
$ hg commit -m "Made repo1 relative"

这样做可能意味着更新人员需要再次拉下整个子存储库,或者他们甚至可能需要重新克隆整个项目,但之后它应该“正常工作”。

当然,首先在测试项目上尝试一下,以确保:)

于 2013-01-29T16:46:45.063 回答