我正在尝试设置我的 Mercurial 存储库系统以使用多个子存储库。我基本上按照这些说明使用 Mercurial 客户端 v1.5 设置客户端存储库,并且我正在使用HgWebDir来托管我的多个项目。
我有一个具有以下结构的 HgWebDir:
http://myserver/hg
|-- fooproj
|-- mylib
在哪里mylib
可以使用一些通用模板库集合fooproj
。的结构fooproj
看起来像这样:
fooproj
|-- doc/
| `-- readme
|-- src/
| `-- main.cpp
|-- .hgignore
|-- .hgsub
`-- .hgsubstate
.hgsub
看起来像:
src/mylib = http://myserver/hg/mylib
根据我对文档的解释,这应该可行:
第一个“嵌套”是我们工作目录中的路径,第二个是要从中提取的 URL 或路径。
此外,mylib
项目目录结构如下所示:
mylib
|-- .hg
| |-- 00changelog.i
| |-- dirstate
| |-- requires
| |-- store
| | |-- 00changelog.i
| | |-- 00manifest.i
| | | |-- data
| | | | ` magic.h.i
| | |-- fncache
| | `-- undo
| |-- undo.branch
| `-- undo.dirstate
`-- magic.h
所以,假设我下拉fooproj
到我的主文件夹:
~$ hg clone http://myserver/hg/fooproj foo
它正确地拉下目录结构并添加~/foo/src/mylib
作为本地 Mercurial 存储库的文件夹。这就是问题开始的地方:mylib
除了.hg
. Mercurial 的消息是:
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 5 changes to 5 files
updating working directory
5 files updated, 0 files merged, 0 files removed, 0 files unresolved
用2秒的调查,可以看到src/mylib/.hg/hgrc
是:
[paths]
default = http://myserver/hg/fooproj/src/mylib
这是完全错误的(尝试pull
该 repo 将给出 404,因为该 URL 没有任何意义)。
foo
|-- .hg
| |-- 00changelog.i
| |-- branch
| |-- branchheads.cache
| |-- dirstate
| |-- hgrc
| |-- requires
| |-- store
| | |-- 00changelog.i
| | |-- 00manifest.i
| | |-- data
| | | |-- .hgignore.i
| | | |-- .hgsub.i
| | | |-- .hgsubstate.i
| | | |-- doc
| | | | `-- readme.i
| | | `-- src
| | | `-- main.cpp.i
| | |-- fncache
| | `-- undo
| |-- tags.cache
| |-- undo.branch
| `-- undo.dirstate
|-- .hgignore
|-- .hgsub
|-- .hgsubstate
|-- doc
| `-- readme
`-- src
|-- main.cpp
`-- mylib
`-- .hg
|-- 00changelog.i
|-- branch
|-- dirstate
|-- hgrc
|-- requires
`-- store
从逻辑上讲,默认值应该是我指定的值,.hgsub
否则它会以某种方式从存储库中获取文件。当然,src/mylib/.hg/hgrc
改为:
[paths]
default = http://myserver/hg/mylib
并且运行hg pull && hg update
完美。当然,这与一开始不使用 subrepos 基本上是一样的。
Mercurial 命令都没有返回错误代码(除了 from pull
inside src/mylib
),因此它清楚地认为它的行为正确(并且可能是正确的),尽管这似乎根本不合逻辑。
我究竟做错了什么?
最终的问题可能.hgsubstate
总是看起来像:
0000000000000000000000000000000000000000 src/mylib
但我不知道如何解决这个问题......