5

我经常与 Mercurial 合作,在本地存储我的上游克隆,然后在本地再次克隆以用于我的实际工作环境:

$ cd /clones
$ hg clone ssh://external-repo.example.com/some/repo/path/foo
$ cd ~/Development
$ hg clone /clones/foo

这对我特别有用,因为我经常想在飞机等上制作新的克隆,而我无法访问互联网。但是,当原始克隆包含子存储库时,这不起作用 -.hgsubstate文件的存在意味着hg将始终访问 Internet,而不是获取本地克隆修订版(即使它们相同)。有没有办法让本地克隆复制文件而无需上网?

这个问题有一个可能会起作用的答案,但对于长期管理来说似乎非常不幸(删除.hgsubstate克隆中的文件/clones/,然后从中进行本地克隆)。

4

2 回答 2

5

您可以在.hgsub文件中使用“平凡”的子存储库路径,如下所示:

foo = foo
bar = bar

这是推荐的设置。设置布局的优点是克隆与您从中克隆的存储库具有相同的结构。因此,您可以在飞机上克隆您的克隆。

或者,您可以使用该[subpaths]设置将 URL 重新映射到本地路径。这使您可以添加

[subpaths]
http://server/(.*) = /clones/libs/\1

到你的~/.hgrc文件,然后你会看到/clones/libs克隆时路径被重新映射。

于 2012-02-24T11:15:32.420 回答
1

您可以通过自己克隆子存储库来实现这一点。假设 foo 有一个名为 bar 的子仓库:

$ cd ~/Development
$ hg clone -U /clones/foo
$ hg clone -U /clones/foo/bar foo/bar
$ hg update -R foo

更新不需要访问 Internet,因为子存储库存在并且包含主更新所需的变更集。

于 2012-02-24T11:16:57.603 回答