我在Linux机器上有以下存储库结构:
-- source_control
-- projects
project1
project2
...
-- repositories
repo1
repo2
repo3
...
含义我有一个source_control
目录,其中包含两个名为projects
和repositories
的嵌套目录。 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机器上工作?
答案 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"
这样做可能意味着更新人员需要再次下载整个子程序,或者他们甚至可能需要重新克隆整个项目,但之后它应该“正常工作”。
当然,首先在测试项目上尝试,只是为了确保:)