8

Subreposを使用してMercurialでプロジェクトをセットアップする際に問題があります。Mercurialにサブレポをネストすることはできますか?

目標:

私はそうのような構造を設定したい:

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

だから3つのレポがある:Aは、Aの構築、およびB. BはAの内側にネストされていますルート構築リポジトリ内にネストされています。ビルド・レポは依存関係を追跡するために使用され、サブペコAはメイン・ソース・ファイルを追跡するために使用され、サブペクトB(およびその他)はモジュール/プラグイン開発を追跡するために使用されます。

問題/質問

私は単純に.hgsubファイルにSubrepo_Aパスやソースを追加し、ビルドレポにコミットして初期ビルドレポおよびネストされたSubrepo_Aを設定何の問題もありません。しかし、ときに私は、ビルドレポの.hgsubにsubrepo_Bパス/ソースを追加し、私はエラーメッセージを取得コミットしようとした後:

アボート:パス「Subrepo_A /モジュール/ Sebrepo_Bは、」ネストされたレポの内部にある」をSubrepo_A '

Mercurialは、すでにネストされたレポ内のネストされたレポのようには見えません。これは本当ですか、それとも何か不足していますか?ビルド/依存関係の管理方法に関するより良いアイデアはありますか?

+0

使用している言語/ツールセットは何ですか?一般的に、依存関係管理としてのsub-reposは最適以下です。私はモジュールを構築し、そのアーティファクト(ネクサス、アーティファクトなど)を公開し、依存モジュールがそれを消費するのが好きです。 – thekbb

答えて

0

状況によっては、subrepoAにsubrepoBを追加する必要があります。

ツリーに2つのレベルしかないように依存関係を移動することをお勧めしますが、これは可能ではない可能性があります。そうでなければ常に滑らかな経験ではありません。

+1

この状況での依存関係の管理方法に関するその他の推奨事項はありますか? –

+0

これに対する答えは、他の人が指摘しているように、subrepoBをsubrepoAのサブポリブン、subrepoAをbuild_repoのサブペコにすることです。あなたは何らかの理由でこれをしたくないようです。 SubrepoAはあなたがコントロールしていないプロジェクトのクローンであるため、サブペコを追加することはできません。その方法は、subrepoAのプライベートフォーク/クローンを作成し、それを " subrepoA "と呼ばれる。そうすることで、カスタマイズを追加することができます(subrepoを追加します)。そして、subrepoAへのpulic/externalアップデートと同期を維持します。 –

1

ここでの問題は、Mercurialの避けられない制約の1つです。リポジトリは、コンピュータのフォルダツリーに対応しています。リポジトリは、そのフォルダツリーの下のすべてを担当します。

トップレベルリポジトリにサブリポジトリが含まれている場合、そのサブフォルダは、そのフォルダ構造のその部分のサブレポ完全制御に引き渡されます。トップレベルでは、最初のサブレポルフォルダのどこかに別のサブレポジトリを指定することはできません。

ソリューション1

Subrepo_Bは、実際にSubrepo_Aの依存関係です。その場合は、Subrepo_Aの.hgsubファイルを編集してSubrepo_BをModules/Sebrepo_Bの下に追加して、リポジトリに真の依存関係を反映させます。これは、Subrepo_Aがそのフォルダを制御できるためです。

ソリューション2

Subrepo_Aは、Subrepo_Bに依存しない、あなたは、利便性のためにそこにそれを入れました。この場合、Subrepo_AとSubrepo_Bの両方をBuild_Repoのサブレポ(別の場所に)にする必要があります。

関連する問題