如何设置mercurial subrepos从Windows和Linux克隆

时间:2013-01-29 14:42:02

标签: mercurial

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

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

含义我有一个source_control目录,其中包含两个名为projectsrepositories的嵌套目录。 repositories目录包含“简单”repos(即没有subrepos的repos),projects包含repos,它们只是薄层,包含repositories目录中的子目录。

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

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

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

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

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

但是这不起作用(当我提交.hgsub文件时,子目录是空的)。

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

1 个答案:

答案 0 :(得分: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正在清除目录,因为您已重新定义了subrepo指向的内容(我不知道这种行为是否符合设计)。所以也许在你提交之前你可以自己删除整个子目录并重新克隆:

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

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

当然,首先在测试项目上尝试,只是为了确保:)