5

複数のサブリポジトリで動作するように 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

ドキュメントの私の解釈によれば、これはうまくいくはずです:

最初の「ネストされた」は作業ディレクトリのパスで、2 番目はプル元の 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ます (その URL は意味をなさないため、そのレポにアクセスしようとすると 404 が返されます)。

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は完璧に機能します。もちろん、これはそもそもサブレポを使わないことと基本的に同じことです。

pullどの Mercurial コマンドも ( from withinを除いてsrc/mylib) エラー コードを返さないため、適切に動作していると明確に信じています (また、そうである可能性もあります)。

私は何を間違っていますか?

究極の問題は、.hgsubstate常に次のようになることです。

0000000000000000000000000000000000000000 src/mylib

しかし、私はそれを修正する方法がわかりません...

4

1 に答える 1

4

ファイルの左側のパスは.hgsub、ツリー内のその場所に対する相対パスです。すでにダウンしてsrcいるのでsrc、パスにある必要はありません。.hgsubファイルを次のようにすると思います:

mylib = http://myserver/hg/mylib

そのままにしておくと、必要なものが得られます。別の方法として、 の場所を.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

その最上位.hgsubファイルには次が含まれます。

$ cat .hgsub
src/mylib = https://Ry4an@bitbucket.org/Ry4an/hg-chart-extension/

親のコーンは、子も複製していることを示しています。

$ 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
于 2010-04-03T14:57:40.020 に答える