Tra*_*kel 5 mercurial subrepos
我正在尝试设置我的 Mercurial 存储库系统以使用多个子存储库。我基本上按照这些说明使用 Mercurial 客户端 v1.5 设置客户端存储库,并且我正在使用HgWebDir来托管我的多个项目。
我有一个具有以下结构的 HgWebDir:
http://myserver/hg
|-- fooproj
|-- mylib
Run Code Online (Sandbox Code Playgroud)
. .mylib使用的公共模板库的一些集合在哪里fooproj?的结构fooproj看起来像这样:
fooproj
|-- doc/
| `-- readme
|-- src/
| `-- main.cpp
|-- .hgignore
|-- .hgsub
`-- .hgsubstate
Run Code Online (Sandbox Code Playgroud)
而.hgsub看起来像:
src/mylib = http://myserver/hg/mylib
Run Code Online (Sandbox Code Playgroud)
根据我对文档的解释,这应该有效:
第一个“嵌套”是我们工作目录中的路径,第二个是要从中提取的 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
Run Code Online (Sandbox Code Playgroud)
所以,假设我下拉fooproj到我的主文件夹:
~$ hg clone http://myserver/hg/fooproj foo
Run Code Online (Sandbox Code Playgroud)
它正确地拉下目录结构并添加~/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
Run Code Online (Sandbox Code Playgroud)
通过 2 秒的调查,可以看到的src/mylib/.hg/hgrc是:
[paths]
default = http://myserver/hg/fooproj/src/mylib
Run Code Online (Sandbox Code Playgroud)
这是完全错误的(尝试使用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
Run Code Online (Sandbox Code Playgroud)
从逻辑上讲,默认值应该是我指定的值,.hgsub否则它会以某种方式从存储库中获取文件。当然,src/mylib/.hg/hgrc改为:
[paths]
default = http://myserver/hg/mylib
Run Code Online (Sandbox Code Playgroud)
并且运行hg pull && hg update完美。当然,这和一开始不使用 subrepos 基本上是一样的。
Mercurial 命令没有返回错误代码(除了 a pullfrom inside src/mylib),因此它显然认为它的行为正常(并且可能是),尽管这似乎根本不合逻辑。
最终的问题可能.hgsubstate总是看起来像:
0000000000000000000000000000000000000000 src/mylib
Run Code Online (Sandbox Code Playgroud)
但我不知道如何解决这个问题......
文件中的左侧路径.hgsub是相对于它在树中的位置的。它已经位于 中src,因此src不需要位于路径中。我想如果你让.hgsub文件看起来像:
mylib = http://myserver/hg/mylib
Run Code Online (Sandbox Code Playgroud)
并将其留在原处,您将得到您想要的。或者,您可以将目录的位置向上移动(在root.hgsub的外部),然后它就会像现在一样正确。src
我刚刚通过如下设置确认了这种解释:
.
|-- .hg
| |-- 00changelog.i
| |-- branch
| |-- branchheads.cache
| |-- dirstate
| |-- last-message.txt
| |-- requires
| |-- store
| | |-- 00changelog.i
| | |-- 00manifest.i
| | |-- data
| | | |-- .hgsub.i
| | | `-- .hgsubstate.i
| | |-- fncache
| | `-- undo
| |-- undo.branch
| `-- undo.dirstate
|-- .hgsub
|-- .hgsubstate
`-- src
`-- mylib
|-- .hg
| |-- 00changelog.i
| |-- branch
| |-- branchheads.cache
| |-- dirstate
| |-- hgrc
| |-- last-message.txt
| |-- requires
| |-- store
| | |-- 00changelog.i
| | |-- 00manifest.i
| | |-- data
| | | |-- .hgignore.i
| | | |-- _p_k_g-_i_n_f_o.i
| | | |-- _r_e_a_d_m_e.i
| | | |-- hgext
| | | | `-- chart.py.i
| | | `-- setup.py.i
| | |-- fncache
| | `-- undo
| |-- tags.cache
| |-- undo.branch
| `-- undo.dirstate
|-- .hgignore
|-- PKG-INFO
|-- README
|-- hgext
| `-- chart.py
`-- setup.py
Run Code Online (Sandbox Code Playgroud)
该顶级.hgsub文件包含以下内容:
$ cat .hgsub
src/mylib = https://Ry4an@bitbucket.org/Ry4an/hg-chart-extension/
Run Code Online (Sandbox Code Playgroud)
父对象的圆锥体显示它也克隆了子对象:
$ hg clone parent parent-clone
updating to branch default
pulling subrepo src/mylib
requesting all changes
adding changesets
adding manifests
adding file changes
added 8 changesets with 14 changes to 5 files
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4128 次 |
| 最近记录: |