web-dev-qa-db-ja.com

MercurialクライアントとしてのGitですか?なぜgit-hgがないのですか?

これはしばらくの間私を悩ませてきた質問です。宿題をしてstackoverflowをチェックし、質問に関する少なくとも次の2つのトピックを見つけました。 Gitはgit-svnのようなMercurial用です/ GitとMercurialリポジトリとの相互運用性

この問題を解決するためにいくつかの深刻なグーグルを行いましたが、これまでのところ運はありません。また、 Git Internals 本と、 Mercurial Definitive Behind the Scenes を読んでこれを理解しようとしましたでる。なぜ適切なgit-hgタイプのツールを見つけることができなかったのか、まだ少し戸惑っています。

私の観点から見ると、git-svnは主要な機能の1つであり、仕事中にMercurialよりもgitを使用することを選択した理由です。それは私が好きなワークフローを使用することを可能にし、彼らが気にしなければ、誰も気にする必要はありません。チェーンの1つで示唆されているように、中間のhgリポジトリを使用して前後に変換することには意味がありません。

とにかく、私が読んだhgとgitの概念設計は非常に似ているようです。フードの下に differences がありますが、hg用のgitクライアントの作成を妨げるものはありません。どうやら、リモートトラッキングブランチとタコのマージにより、gitはhgよりもさらに強力になります。

それで、本当の質問は、git-hgが存在しない(または少なくとも見つけるのが非常に難しい)本当の理由はありますか? gitユーザー(および開発者)からgit-hgツールの欠如を引き起こしたhgカウンターパートに対する敵意はありますか?このようなものを開発し、公開する計画はありますか?私は(非常に弱いCスキルであるにもかかわらず)ボランティアで参加して、これを達成することができました。私はこれを自分で始めるのに十分な知識を持っていません。

これは、すべてのDVCS戦争を永久に終わらせるためのツールでしょうか?

73
Kai Inkinen

hg-git と著者の Pyconプレゼンテーション 状況についての彼の見解を説明します。

18
Tom Willis

私はこれを試していませんが、 git-hg プロジェクトがあるようです。プロジェクトは、ページ上で自身を説明し、README=

Mercurialリポジトリをチェックアウトおよび追跡するためのgit-hgユーティリティ。

Mercrial [sic]プロジェクトをチェックアウトおよび追跡するための一連のスクリプト。

ただし、双方向では機能しないようです( issue tracker を参照)。

20
akaihola

これを実現する別のプロジェクトがあります:git-remote-hg。実際には2つ、ネイティブのもの( https://github.com/msysgit/msysgit/wiki/Guide-to-git-remote-hg を参照)とhg-gitに基づくもう1つ( https://github.com/rfk/git-remote-hg )を参照してください。前者は後者よりはるかに高速ですが、まだ不完全で開発中です。

他のシステム用のgitリモートヘルパー(これらのツールが呼び出されるため)は実際に存在します。これには、Subversion、CVS、Bazaar、MediaWikiのサポートも含まれます。

Gitを介してMercurialリポジトリのクローンを作成するには、次のようにします。

git clone hg::https://hg.example.com/some-Mercurial-repo

更新:今までに、3番目の「ネイティブ」もあります。つまり、ここでの回答で彼が言及したFelipeによるものです。これはすぐにgit 'contrib' dirの一部になりそうです: https://github.com/felipec/git-remote-hg git自体にパッチを必要とせずに動作しますが、 gitへのパッチ(現在レビュー中)を適用して、ユーザーエクスペリエンス全体を改善できます。

更新2:そして今、さらに別の候補があり、これは非常に活発に開発中であり、felipeのコードに基づいています: https://github.com/buchuki/gitifyhg -それは非常にうまく機能します私はこれまでのところ、まだいくつかの大まかなスポットがあります。

更新3:gitifyhgとFelipeのgit-remote-hgの両方が現在アクティブに維持されていません。とりあえず、最近のMercurialバージョンで動作するようにするなど、いくつかの修正を加えたFelipeのコードを作成しました。 https://github.com/fingolfin/git-remote-hg から取得できます。最後に、最近の別の候補であるgit-cinnabar、内部で完全に異なるアプローチを使用します(それを気にしない場合でも、使用方法は他のgit-remote-hg実装とほぼ同じです)。私はまだ自分で試したことはありませんが、 https://github.com/glandium/git-cinnabar で見つけることができます

17
Max

hg-gitは明らかに、リモートMercurialリポジトリを使用してgitをローカルで操作するために使用できます。 http://traviscline.com/blog/2010/04/27/using-hg-git-to-work-in -git-and-Push-to-hg /

コメントもお見逃しなく。

8
Thomas Broyer

誰かがすでに2つのgit-remote-hgについて言及していますが、ここに新しいものがあります:

MercurialとBazaarのgitでのブリッジサポート

より多くの機能があり、msysgitよりも確実に動作するはずですが、最も重要なことです。依存関係やカスタムgitビルドは必要ありません。 $ PATHにコピーするだけです。

出力がhg-gitとまったく同じであることを確認するための広範なテストがあるため、少なくとも同様に動作するはずです。

5
FelipeC

それを実現する新しいプロジェクトがあります:

双方向のことをうまく統合します。

3
abourget

本当にそれを作成するインセンティブはあまりないと思います。誰もが他の人の上に使用することによって恐ろしく不自由になることはありません。両方ともDVCSです。確かに、おそらく誰もが好みを持っていますが、彼らは一般的にそれを吸い上げ、必要に応じて他のものを使用します。 gitは非常に広く使用されているため、hg-gitが登場したと思いますが、hgを採用しているプロジェクトははるかに少ないです。

対照的に、プロジェクトがsvnまたはcvsを使用している場合、DVCSの趣味を持っている人はだれでも痛い思いをするでしょう。まだcvs/svnを使用しているプロジェクトがたくさんあるので、たくさんの需要があります。

おそらく、2つのうちの1つが他の1つよりもゆっくりと勝つことはないと仮定して、それが有用なものであることはおそらく正しいでしょう(gitは実際にはるかに大きなユーザーベースを持っていると思います)。

また、大きな技術的な障害がないことも正しいです。hg-gitは双方向であるため、明らかに、2つの間で情報をマッピングすることが可能です。

2
Cascabel