Mercurialを使用してプライベートバージョンとパブリックバージョンを分離する
-
03-07-2019 - |
質問
次の問題に対してMercurialをどのように使用しますか。
ライブラリCoreがあるとします。次に、Extensionというライブラリーの拡張機能を開発します。 CoreをExtensionから物理的に分離したい、つまり、Coreがオープンソースライブラリであり、ExtensionがCore上に構築されるプライベートライブラリであるとしましょう(個人的に維持したいものが含まれている可能性があります。明らかに、Extensionのソース全体をパブリックリポジトリにプッシュしたくありません。しかし一方で、特定の変更を拡張機能からコアにプッシュしたい場合(拡張機能をコアに「寄付」することを決定する場合)またはその逆(バグ修正を組み込みたい場合など)
拡張機能をコアにリークするリスクを最小限に抑えて(履歴がパブリックサーバーにプッシュされると、戻ることはありません!)枝?クローン? Mqs?他に何か?
現在、リポジトリのクローン作成に精通しているだけで、そのシンプルさに非常によく似ています。
編集: 私はこのスキームを思いつきましたが、私はそれを窓の下で動作させることはできません。 2つのリポジトリ(コアと拡張機能)。拡張機能には2つのブランチがあり、コアと拡張機能もあります。リポジトリごとにMercurialにフックを登録できるようになったので、説明されているように、拡張ブランチからのチェックインを許可しない「pretxnchangegroup」フックをCoreリポジトリに登録したいと思います Mercurialブック内。ただし、それをWindowsで動作させることはできません。だから:
- Windowsでこのような例(実際には、トランザクションの結果を変更するフック)がありますか?
- まだ拡張機能からコアブランチへの変更をチェリーピックに移植することができますか?
解決
いくつかのテストの後、このスキームを試します。 2つのメインリポジトリと2つの名前付きブランチ、CoreおよびExtension。
1つのメインコアリポジトリ。コアチェンジセットとソースのみを含める必要があります。したがって、Coreブランチからの変更セットのみを含める必要があります。 これは、そのリポジトリのhgrcにある次のリポジトリフックを使用して確認されます。
pretxnchangegroup.branch = hg heads --template" current branchs:{branches}" | 「拡張機能」を見つける&&出口1 || 0を終了
少し奇妙に見えますが、基本的にプッシュまたはプルが完了した後、コミットされる前に起動されます。その時点で、フックが失敗した場合、トランザクションはロールバックされます。そのため、フックはExtensionブランチの変更セットを探し、それが見つかった場合は失敗します-実質的に、Extensionの変更がCoreリポジトリに入ることを禁止します。
2番目のリポジトリには、コアと拡張の両方のブランチと変更セットが含まれ、2つのブランチ間で変更セットが交換される場所です。 CoreからExtensionへの通常のマージ、およびExtensionからCoreへの移植。
これが他の人に役立つことを願っています。