我经常与Mercurial合作,保留我的上游克隆的本地商店,然后在本地再次克隆我的实际工作环境:
$ cd /clones
$ hg clone ssh://external-repo.example.com/some/repo/path/foo
$ cd ~/Development
$ hg clone /clones/foo
这对我来说特别有用,因为我经常想在飞机等上制作新的克隆,我无法访问互联网。但是,当原始克隆包含subrepos时,这不起作用 - .hgsubstate
文件的存在意味着hg
将始终发送到互联网而不是获取本地克隆版本(即使它们是相同的)。有没有办法让本地克隆复制文件而不需要上网?
This question有一个可能有效的答案,但对于长期管理似乎非常不幸(删除.hgsubstate
中克隆中的/clones/
文件,然后从中创建本地克隆这一点)。
答案 0 :(得分:5)
您可以在.hgsub
文件中使用“普通”子存储库路径,如下所示:
foo = foo
bar = bar
这是recommended setup。设置布局的优点是克隆与您克隆的存储库具有相同的结构。因此,您可以在飞机上克隆克隆。
或者,您可以使用[subpaths]
设置将URL重新映射到本地路径。这可以让你添加
[subpaths]
http://server/(.*) = /clones/libs/\1
到您的~/.hgrc
文件,然后您会在克隆时看到路径重新映射到/clones/libs
。
答案 1 :(得分:1)
您可以通过自己克隆子存储库来实现此目的。假设foo有一个名为bar的子报名:
$ cd ~/Development
$ hg clone -U /clones/foo
$ hg clone -U /clones/foo/bar foo/bar
$ hg update -R foo
更新不需要访问互联网,因为子存储库存在并且包含主服务器上更新所需的变更集。