5

Git および SVN リポジトリからの外部コード (自分で変更できる) を含むプロジェクトを Mercurial に保存したいと考えています。SVN では、ベンダー ブランチでこれを解決し、コードをコピーしますが、Mercurialでは、プロジェクトごとに異なるリポジトリを用意し、必要に応じてそれらの間でプルする方がよいことを理解しました。

プロジェクトのレイアウトは次のようになります。

- externalLibraryA [SVN リポジトリから取得]
  - ...私からいくつかの追加ファイルを添えて
 - externalLibraryB [SVN リポジトリから取得]
  - ...私からいくつかの追加ファイルを添えて
  - externalPluginForExternalLibraryB [Git リポジトリから取得]

In Subversion I would create vendor dir and a trunk dir, copy all external libraries first in vendor, and then in the right place in trunk. (I think) I can do this in Mercurial too, with subrepositories, but is this the best way to do this?

I tried setting up different repositories for the external libraries, but then it seems I can't pull the externalLibraryARepo into the externalLibraryA directory of my main repository? It goes in the main directory, which is not what I want. I can also create a Mercurial mirror repository and include it as a subrepo in my main repository, but then the changes in this subdirectory go to the mirror repository, while I want them to stay in the main repository.

4

2 に答える 2

1

ベンダー コードがチームによってカスタマイズされるかどうかによって異なります。私たちのチームは、プロジェクト名で名前を付けたブランチを独自にカスタマイズして、リポジトリに名前付きの「ベンダー」ブランチを維持することに大きな成功を収めてきました。このベンダー コードは、サブリポジトリとしてプロジェクトに簡単に含めることができます。

このアプローチの注意点: サブリポジトリでアクティブな開発が行われている場合は、サブリポジトリを別のクローンとして直接編集するのが最善です。 .hgsubstate が間違ったリビジョンに転送され、ビルドが壊れます。

サブリポジトリの異なる名前のブランチを指すバージョン間のトップレベル リポジトリ (プロジェクト) のマージに注意してください。これにより、サブリポジトリの「ベンダー」ブランチと「プロジェクト」ブランチが再帰的にマージされる可能性があります。これは望ましくない場合があります。

サブリポジトリ再帰の将来について、mercurial-devel メーリングリストでここ数か月、いくつかの「温かい」議論が行われているため、この機能は将来変更される可能性があることに注意してください。

編集:関連するリンクでもこの議論を見たところです

于 2012-02-03T05:35:26.233 に答える
1

おそらくこれを1つのリポジトリに保存するだけです-あなたが提供するリンクでは、最終的にビルドシステムを使用して、さまざまなリポジトリからのバイナリ出力をまとめていることに注意してください。私は彼らの理論的根拠がはっきりしていません。

あなたが解決しようとしている根本的な問題が、外部をクリーンな方法で更新する方法である場合、おそらく匿名ブランチを使用するでしょう。

つまり、外部ライブラリをプロジェクトに追加し、変更します。動作することを確認してください。ExternalA-v1.0 でタグ付けします。実際のプロジェクトをハックします。現在、ExternalA, Inc. は自社製品の新しいバージョンを持っています。リポジトリを ExternalA-v1.0 タグに更新します。新しいバージョンをインポートし、変更を上に適用します。専念。1 つは最新バージョンのコード (ExternalA-v1.0 で動作) で、もう 1 つは最新バージョンの ExternalA (コードでは動作しない) です。次に、2 つをマージして調整します。今度はExternalA-v2.0でタグを付け直します。必要に応じて繰り返します。

外部を別のリポジトリに保持することはできますが、それらを使用しているプロジェクトは常に最新の状態である必要はないと思います-ベンダーブランチの全体的なポイントは、いくつかの分離ポイントを持つことです.被扶養者と被扶養者の間。もちろん、externalA プロジェクトから、それを使用しているプロジェクトに変更を移動するのは手作業になります (実際には SVN のように、コピーです)。

于 2011-03-15T12:45:24.993 に答える