2009-03-02 14 views
11

次の問題に対してどのようにMercurialを使用しますか?Mercurialを使用してプライベート版とパブリック版を分離する

ライブラリコアがあるとします。私は今Extensionというライブラリの拡張を開発したいと思っています。私は、コアを物理的にエクステンションと区別したい、つまりコアがオープンソースライブラリであり、エクステンションがコア上に構築されたプライベートライブラリであるとしましょう(多分私は個人的なものを保持したいと思っています。明らかに、Extensionのソース全体を公開リポジトリにプッシュしたくないのです。しかし、一方では、ExtensionからCoreへの変更(コアにExtensionの一部を "寄付する"ことを決めた場合)やその逆(もし私がバグ修正を取り入れたいのであれば)を押したいかもしれません。

どのようにすればExtensionをCoreにリークさせるリスクを最小限に抑えることができますか(特定の履歴を公開サーバにプッシュすると戻ってきません)。枝?クローン? Mqs?他に何か?

私は現在のところ、クローニングリポジトリに精通しているだけであり、そのシンプルさと非常によく似ています。

編集: 私はこのスキームを考え出しましたが、私はそれをWindowsの下で動作させることはできません。 2つのリポジトリ(コアとエクステンション)。エクステンションには、ブランチの2つがあり、コアとエクステンションもあります。リポジトリごとにMercurialのフックを登録することができますので、拡張ブランチからのチェックインを許可しないコアリポジトリに 'pretxnchangegroup'フックを登録したいと思います。in the Mercurial bookのようなものです。私は窓の下で働くことをかなり得ているわけではありません。だから:

  • 誰もがこのようなもの(実際には、トランジションの結果を変えるフック)の例を窓の下に持っていますか?
  • エクステンションからコアブランチへのチェリーピックの変更に移植を使用することはできますか?

答えて

2

いくつかのテストの後、このスキームを試してみます。 2つのメインリポジトリと2つのブランチ、CoreとExtension

主要なコアリポジトリは、コアチェンジセットとソースのみを含む必要があります。したがって、コアブランチからのチェンジセットのみが含まれているはずです。 これはそのレポのhgrcに次のリポジトリフックを使用してチェックされます。

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

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

2番目のレポには、コアとエクステンションの両方のブランチとチェンジセットが含まれており、2つのブランチ間でチェンジセットが交換されます。通常はコアからエクステンションにマージし、エクステンションからコアに移植します。

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

+0

どのようにしてフックを変更してコアのみを許可することができますか? && exit 0 ||出口1? –

1

(歴史が押されたら、後戻り があります!)

あることを確認...それはバージョン管理はすべてに約あるものです!

これまでのようなことはありませんでしたが、transplantコマンドが役立つように聞こえます。また、クローンのクローンを持つことができ、それらのいずれかにプッシュすることができます。

+0

私は、それがプッシュされると、それをサーバーから取り戻すことはほとんど不可能であることを意味します。私が非公開にしたいコードは、今や世界と共有されています。 –

+0

移植についての良いヒント。 –

+0

ええ、これは本当ですが、あなたは森林も望んでいます(言及したように)...私はいつも水銀でそれらを忘れています。 – nlucaroni

1

は、いくつかのレポを大きなものの一部として保持することができます。そのような音がここで助けになるかもしれません。

+0

それは分かりませんでしたが、どのように役立つかは分かりません。一度にプッシュ/プルしたいパブリックリポジトリがたくさんある状況に、より適しているようです。それは、偶然、公的サーバーに突入するリスクを増大させるように思えます。 –

+0

プライベートコードとパブリックコードを区別して同期させるのに役立ちます。フォレスト内のリポジトリ間で変更を加えるリスクはありません。 しかし、CoreをExtensionの純粋なサブセットとして保持したいですか?それはより難しいでしょう。 : - | – Macke