我在Linux机器上有以下存储库结构:
-- source_control
-- projects
project1
project2
...
-- repositories
repo1
repo2
repo3
...这意味着我有一个包含两个嵌套目录projects和repositories的source_control目录。repositories目录包含“简单的”repos (即没有subrepos的repos ),而projects包含的repos只是薄层,并且包含来自repositories目录的subrepos。
现在,我在不同项目中的.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文件时,subrepos是空的)。
我也尝试过用HTTP为存储库提供服务,但它大大减慢了速度,我想找到一种更好的方法(所有的机器都在本地网络中)。在我的.hgsub中使用相对路径的正确方法是什么,这样我就可以在Windows和Linux机器上工作了?
发布于 2013-01-30 00:46:45
根据Mercurial维基的说法,让它与一个全新的存储库一起工作的方法是:
$ 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"这样做可能意味着更新人员将需要再次删除整个子代码库,或者他们甚至可能需要重新克隆整个项目,但在此之后它应该“只是工作”。
当然,首先在测试项目上尝试它,只是为了确保:)
https://stackoverflow.com/questions/14585491
复制相似问题