如何在不再提取subrepos的情况下制作本地克隆?

时间:2012-02-24 09:00:42

标签: mercurial clone dvcs subrepos

我经常与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/文件,然后从中创建本地克隆这一点)。

2 个答案:

答案 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

更新不需要访问互联网,因为子存储库存在并且包含主服务器上更新所需的变更集。