2012-06-26 8 views
6

私はGitリポジトリをフォークし、それをMercurialに変換して、元のGitリポジトリに自分の変更を反映したいと思います。私はその利便性よりも安全で安定した変換プロセスにもっと関心を持っています。私はpullをGitからMercurialに定期的に変更しますが、ほとんどの変更を反映することはめったにありません。MercurialからGitにパッチを提供していますか?

私はhg-gitを使用しても不満です。このプロジェクトに対して報告されたバグの多くは、何年も答えられていないためです。私は、hg-gitを使用するよりも、GitをHgに変換するのに、hg convertを使用する方が安全だと思われます。

質問:すでにリポジトリをMercurialに変換して変更しました。これらの変更を公式リポジトリに戻すにはどうすればよいですか?私は履歴情報を失うことなく、Gitリポジトリに公式の変更を寄稿したいと思います(つまり、複数のチェンジセットを1つのフォームにフォールドしたくありません)。

これを行う最も簡単で安全な方法は何ですか?あなたはMercurialがパッチとしてコミットしようとすると、エクスポートすることができます

+2

プロジェクトが正式にsvnやcvsのようなものでホストされている場合、近代的なscmを使用する理由があります。しかし、プロジェクトがすでに現代のscmでホストされている場合は、ローカルで同じscmを使用しない理由はあまりありません。 – bames53

+0

@ bames53、私は同意しますが、私たちが毎日行っている他の多くの決定と同様に、この1つは純粋に主観的です:) – Gili

+1

リンクが公式のhg-gitリポジトリにないことを知っていますか?それは[ここ](https://github.com/schacon/hg-git)にあります。 – obmarg

答えて

6

hg export --git -r 1 >patch.diff 

この.diffファイルはGitリポジトリで認識されなければならないとgit applyでGitのレポに追加することができます。 hg export
(これはより最新script hg-fast-exportも言及したところ、「Convert a Mercurial Repository to Git」で提案された)

--gitオプションは、あなたがGitの拡張diff形式で差分を生成するようになります。詳細は、hg help diffsを参照してください。

+0

複数のチェンジセットを1つにまとめることはできませんか? – Gili

+0

@Gili:それがそうなら、関心のあるすべてのHgリビジョンをリストし、それぞれに対して、(Gitリポジトリに順番に適用する) '.diff'ファイルを生成するだけです。 'hg export'は1つのリビジョンかリビジョンの範囲を取ることができます。 – VonC

+0

私は簡単なテストを行いました: 'hg export --git -r 1 -r 2> patch.diff'は両方のリビジョンを同じファイルに埋め込みますが、どのチェンジセットがどのチェンジセットに入るのかについての十分な情報を提供します。私はこれがうまくいくと思います。ありがとう! – Gili

関連する問題