1. ホーム
  2. git

[解決済み】Git と Mercurial リポジトリの相互運用性

2022-04-14 09:47:39

質問

MacでGITを使っています。十分です。私はツールを持っており、経験もあります。そして、これからも使い続けたいと思っています。ここに戦争はない...

問題は常に相互運用性です。ほとんどの人がSVNを使っていて、それは私にとっては素晴らしいことです。Git SVNは箱から出してすぐに使えるし、無駄のないソリューションです。人々は喜んでSVNを使い続けることができ、私は自分のワークフローやツールを失うことがないのです。

さて... Mercurialを使う人が出てきました。彼らには彼らの理由があります。しかし、私はGIT HGのアウトオブザボックスを見つけることができません。私はHGに乗り換えたくはないのですが、彼らのリポジトリと相互運用する必要があります。

どなたか簡単な解決策をご存じないでしょうか?

どのように解決するのですか?

2012年6月より更新。現在、開発者が git 側から作業を行いたい場合の Git/Hg 相互運用の方法としては、以下のようなものがあるようです。

  1. Mercurialをインストールし hg-git 拡張 . 後者は、パッケージマネージャを使うか、あるいは easy_install hg-git . そして、~/.hgrc に以下があることを確認してください。

    [extensions]
    hggit = 
    
    

を指定することについて述べている文献を見かけることがあります。 bookmarks エクステンションもありますが、これは Mercurial v 1.8 以降で組み込まれたものです。以下はその例です。 Windowsでのhg-gitのインストールに関するいくつかのヒント .

hg-gitを入手したら、おおまかに以下のようなコマンドを使用することができます。 Abderrahim Kitouniが上に投稿しました。 . この方法は、これまで より洗練され、微調整された しかし、2009年以降、フレンドリーなラッパーがあります。 git-hg-again . これは、toplevel ディレクトリを Mercurial と Git の両方の作業ディレクトリとして同時に使用します。の先端と同期したMercurialのブックマークを作成します。 default (ブランチを更新し、そのブックマークからローカルの Git ブランチを更新します。

  1. git-remote-hg は別のラッパーで、同じく Mercurial の hg-git 拡張です。これはさらに git-remote-helpers プロトコルを使用します(これが名前の由来です)。トップレベル・ディレクトリはGitの作業ディレクトリとしてのみ使用し、Mercurialのリポジトリは裸のままにしておきます。また、Git と Mercurial の同期をより安全に、より git ライクにするために、2つ目の Git ベアリポジトリを維持します。

  2. git-hg スクリプト(旧メンテナンス こちら をベースとした別の方法を使用しています。 hg-fast-export から 高速エクスポートプロジェクト . 方法2と同様に、これもMercurialのベアリポジトリと追加のGitベアリポジトリを保持しています。

プルする場合、このツールは Mercurial のブックマークを無視し、代わりに名前のついた Mercurial ブランチをすべて Git ブランチにインポートし、デフォルトの (名前のない) Mercurial ブランチは master にインポートします。

このツールはhg->gitのみであるとする解説もありますが、2011年12月7日にgit->hg pushをサポートするようにマージされたとしています。で説明しているように これらのツールのレビュー しかし、このツールのプッシュサポートの実装方法は、うまくいっていないようです。

  1. また git-remote-hg というプロジェクトもあります。 . 上記のバージョンとは異なり、このバージョンは hg-git に依存せず、代わりに Mercurial Python API に直接アクセスします。今のところ、これを使うにはパッチを当てたバージョンの git も必要です。私はまだこれを試していません。

  2. 最後に テーラー は、さまざまな異なる VCS 間をインクリメンタルに変換するプロジェクトです。これの開発は積極的には続けられないようですね。

このうち最初の3つのアプローチは、私が調査するのに十分なほど軽量に見えました。私のセットアップで動作させるためには、いくつかの点で手を加える必要がありました。そして、それらを改善するためにさらに手を加える方法がいくつか見つかりました。そして、他の人も同じように評価するために、このような微調整をしたいと思うかもしれないと思ったのです。そこで、私は ソースパッケージの作成 このツールは、最初の3つのツールのうちのどれでも、私のバージョンをインストールできるようにするものです。また、このツールは必要な hg-fast-export の部分を削除しました。(あなたは hg-git を各自で作成してください)。

ぜひ試してみて、何が一番効果的かを自分で判断してください。これらのツールが壊れた場合について教えていただければ幸いです。私は、上流の変更と同期させ、私が有用だと思う調整を上流の作者に認識させるよう努力するつもりです。

前述したように、これらのツールを評価する中で、私は次のような結論に達しました。 git-hg は、Mercurial からの pull にのみ使用でき、push には使用できません。

また、Git と Mercurial の比較・翻訳マニュアルもあります。