Mercurialを使用してプライベートバージョンとパブリックバージョンを分離する

StackOverflow https://stackoverflow.com/questions/602202

  •  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への移植。

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

他のヒント

  

(履歴がプッシュされると、   戻らない!)

あることを確認してください...それがバージョン管理のすべてです!

これまでこのようなことをしたことはありませんが、移植コマンドが役立ちます。また、クローンのクローンを作成して、それらのいずれかにプッシュすることもできます。

フォレスト拡張機能を使用すると、複数のリポジトリを一部として保持できます。大きなものの。そのような音がここで役立つ可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top