11

次の問題に対して Mercurial をどのように使用しますか。

ライブラリ Core があるとします。私は今、Extension と呼ばれるそのライブラリの拡張機能を開発したいと考えています。Core を Extension から物理的に分離したいと考えています。つまり、Core がオープン ソース ライブラリであり、Extension が Core 上に構築されたプライベート ライブラリであるとします (個人的に保持したいものが含まれている可能性があります)。明らかに、Extension のソース全体をパブリック リポジトリにプッシュしたくありません。しかし一方で、特定の変更を拡張機能からコアにプッシュしたり (拡張機能の一部をコアに「寄付」することにした場合)、またはその逆 (バグ修正を組み込みたい場合など) をしたい場合があります。

特定の変更に対して柔軟に対応しながら、Extension to Core が漏洩するリスクを最小限に抑えながら (履歴が公開サーバーにプッシュされると、元に戻すことはできません!)、これについてどのように対処しますか。枝?クローン?Mqs? 他の何か?

私は現在、リポジトリのクローン作成にしか慣れていませんが、その単純さが非常に気に入っています。

編集: 私はこのスキームを思いつきましたが、ウィンドウの下で動作させることはできません。2 つのリポジトリ (コアと拡張)。Extension には、Core と extension の2 つのブランチがあります。これで、リポジトリごとに Mercurial のフックを登録できるので、Mercurial bookで説明されているように、Extension ブランチからのチェックインを禁止する「pretxnchangegroup」フックを Core リポジトリに登録したいと思います。ただし、ウィンドウの下で機能することはあまりありません。そう:

  • 誰かがウィンドウの下でこのような例(実際、トランザクションの結果を変更するフック)を持っていますか?
  • 移植を使用して、Extension から Core ブランチへの変更をチェリーピックすることはできますよね?
4

3 に答える 3

2

いくつかのテストの後、私はこのスキームを試すつもりです。2 つのメイン リポジトリと 2 つの名前付きブランチ (Core と Extension)。

Core 変更セットとソースのみを含む 1 つのメイン Core リポジトリ。したがって、Core ブランチからの変更セットのみを含める必要があります。これは、そのリポジトリの hgrc で次のリポジトリ フックを使用してチェックされます。

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

少し奇妙に見えますが、基本的には、プッシュまたはプルが完了した後、コミットされる前に起動されます。その時点でフックが失敗すると、トランザクションはロールバックされます。そのため、フックは拡張機能ブランチの変更セットを探し、それが見つかった場合は失敗します。拡張機能の変更がコア リポジトリに入るのを効果的に禁止します。

2 番目のリポジトリには、コア ブランチと拡張ブランチの両方と変更セットが含まれており、2 つのブランチ間で変更セットが交換される場所です。Core から Extension への通常のマージと、Extension から Core への移植。

これが他の誰かに役立つことを願っています。

于 2009-03-06T19:07:44.410 に答える
1

Forest 拡張機能を使用すると、複数のリポジトリを大きなリポジトリの一部として保持できます。それがここで役立つように聞こえます。

于 2009-03-02T21:02:49.500 に答える