200

MacでGITを使用しています。十分に言った。私にはツールがあり、経験があります。そしてこれからも使い続けたいです。ここには戦争はありません...

問題は常に相互運用性にあります。ほとんどの人は SVN を使用していますが、これは私にとって素晴らしいことです。Git SVN はすぐに使用でき、飾り気のないソリューションです。人々は引き続き SVN を快適に使用でき、ワークフローもツールも失うことはありません。

さて... Mercurial と一緒に来る人もいます。彼らには問題ありません。彼らには理由があります。しかし、すぐに使用できる GIT HG が見つかりません。HG に切り替えたくはありませんが、HG のリポジトリと相互運用する必要があります。

これに対する簡単な解決策を知っている人はいますか?

4

11 に答える 11

115

ネイティブ サポートを提供する新しい git-remote-hg があります。

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

git-remote-hgを $PATH にコピーし、実行可能にします。それだけで、依存関係はありません (Mercurial 以外):

git clone hg::https://www.mercurial-scm.org/repo/hg/

ネイティブの Git リポジトリであるかのように、プッシュおよびプルできるはずです。

新しい Git ブランチをプッシュすると、それらの Mercurial ブックマークが作成されます。

詳細については、git-remote-hg wikiを参照してください。

于 2012-11-13T02:52:03.413 に答える
106

hg-gitを使用できるはずです。

hg clone <hg repository>

編集~/.hgrcして追加:

[extensions]
hgext.bookmarks =
hggit =

ブックマークを作成して、masterin gitを持つようにします。

cd <repository>
hg bookmark -r default master

.hg/hgrcリポジトリで編集して追加します:

[git]
intree = true

これで git リポジトリを作成できます:

hg gexport

結果のディレクトリを git clone として使用できます。Mercurial からのプルは次のようになります。

hg pull
hg gexport

そしてmercurialにプッシュします:

hg gimport
hg push

(はい、このワークフローでは hg を使用する必要がありますが、ハッキングはすべて git で行います)

PS このワークフローに問題がある場合は、バグを報告してください。

于 2009-07-06T21:06:31.573 に答える
63

2012 年 6 月からの更新。現在、開発者が git 側から作業したい場合、Git/Hg の相互運用性のために次の方法があるようです。

  1. Mercurial とhg-git 拡張機能をインストールします。後者は、パッケージ マネージャーを使用するか、easy_install hg-git. 次に、~/.hgrc に以下が含まれていることを確認します。

    [extensions]
    hggit = 
    

ここでも拡張子の指定について言及している参照がいくつか見られるかもしれませbookmarksんが、これは v 1.8 から Mercurial に組み込まれています。Windows に hg-git をインストールする際のヒントをいくつか紹介します。

hg-git があれば、上記の Abderrahim Kitouni のようなコマンドを大まかに使用できます。ただし、このメソッドは2009 年から改良および調整されており、フレンドリーなラッパーgit-hg-again があります。これにより、最上位ディレクトリが Mercurial と Git の両方の作業ディレクトリとして同時に使用されます。defaultMercurial リポジトリの (名前のない) ブランチの先端と同期する Mercurial ブックマークを作成し、そのブックマークからローカル Git ブランチを更新します。

  1. git-remote-hghg-gitは別のラッパーで、これも Mercurial拡張に基づいていこれはさらにgit-remote-helpersプロトコルを利用します (そのため、その名前が付けられました)。Git 作業ディレクトリにのみトップレベル ディレクトリを使用します。Mercurial リポジトリをむき出しのままにします。また、Git と Mercurial の間の同期をより安全に、より慣用的に git に似せるために、2 つ目の裸の Git リポジトリも維持します。

  2. git-hgスクリプト (以前はここで管理されていましたhg-fast-export) は、fast-export プロジェクトに基づく別の方法を使用します。方法 2 と同様に、これもベア Mercurial リポジトリと追加のベア Git リポジトリを保持します。

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

一部の解説では、このツールは hg->git のみであると説明されていますが、 2011 年 12 月 7 日に git->hg プッシュ サポートに統合されたと主張しています。プッシュ サポートは機能しないようです。

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

  2. 最後に、Tailorは、さまざまな異なる VCS 間で段階的に変換するプロジェクトです。これの開発は積極的に続けられないようです。

これらのアプローチの最初の 3 つは、調査するよう説得するのに十分軽量に見えました。それらを自分のセットアップで実行するには、いくつかの方法でそれらを微調整する必要があり、それらを改善するためにさらに微調整する方法がいくつかありました。次に、それらをさらに微調整して、相互に似た動作をするようにし、評価できるようにしました。それらをより効果的に。次に、同じ評価を行うために、他の人もこれらの調整をしたいと思うかもしれないと思いました. そこで、最初の 3 つのツールの私のバージョンをインストールできるようにするソース パッケージを作成しました。また、必要なhg-fast-export部品のインストールにも注意を払う必要があります。hg-git(ご自身でインストールする必要があります。)

それらを試してみて、何が最適かを自分で決めることをお勧めします。これらのツールが壊れるケースについて聞いてうれしいです。私はそれらをアップストリームの変更と同期させ、アップストリームの作成者が私が有用だと思う調整を確実に認識できるように努めます。

git-hg上で述べたように、これらのツールを評価する際に、プッシュではなく Mercurial からのプルにのみ使用できるという結論に達しました。

関連して、Git と Mercurial の便利な比較/翻訳マニュアルがいくつかあります。場合によっては、Git を既に知っているユーザーを対象としています。

于 2012-06-24T15:31:43.540 に答える
15

これは Python スクリプトであり、 http://repo.or.cz/w/fast-export.githg2git見つけることができる fast-export の一部です。

ただし、me​​rcurial をインストールする必要があります。

于 2009-05-19T15:39:10.313 に答える
9

hg-git は双方向のブリッジであるため、変更セットを Git から Mercurial にプッシュすることもできます。

于 2009-05-20T21:34:06.010 に答える
6

https://github.com/cosmin/git-hggit-hgから大きな成功を収めました( のインストールも必要です)。fetch、pull、pushをサポートし、( gitと同様の機能)よりも安定しています。hghg-githg

使用例については、 https://github.com/cosmin/git-hg#usageを参照してください。ユーザー インターフェイスは、 と非常によく似ていgit-svnます。

にはgit-hg、複製された hg リポジトリごとに追加のディスク領域が必要です。この実装では、完全な mercurial クローン、追加の git ベア クローン、および実際の git リポジトリを使用します。必要なディスク容量は、通常の git のみの使用の約 3 倍です。追加のコピーは.git、作業ディレクトリのディレクトリ (またはGIT_DIR通常の場所) の下に保存されます。

注意:解決しようとする基本的な問題は、とフィーチャgit-hgの間に 1:1 のマッピングがないことです。最大の問題は、git ブランチとhg の名前のないブランチ、およびhg の名前付きブランチhg のブックマークの間のインピーダンスの不一致です(これらはすべて、ユーザーにとってはブランチのように見えます)。関連する問題は、ブランチ名がデフォルトでテンプレート コミット メッセージにのみ追加される git とは対照的に、元の名前付きブランチ名をバージョン履歴に保存しようとすることです。githggithg

gitとの間の相互運用可能なブリッジを作成すると主張するツールはhg、このインピーダンス マッチングをどのように処理するかを説明する必要があります。次に、選択したソリューションがニーズに合っているかどうかを判断できます。

使用する解決策git-hgは、すべての hg ブックマークを破棄し、名前付きブランチを git ブランチに変換することです。さらに、git master ブランチをデフォルトの名前のない hg ブランチに設定します。

于 2012-06-27T09:59:04.950 に答える
6

Hg-Git Mercurial プラグイン. 自分で試したことはありませんが、チェックする価値があるかもしれません。

于 2009-05-19T15:32:52.330 に答える
3

hggitを試しました。私はgit'ersとhg'ersの仕事に対処しなければならないので、私にとってはうまくいきます。特にレビューに関しては、これは素晴らしいです。

そのトピックに関する小さな問題/警告:

hg を使用して、安定した Linux カーネル リポジトリのクローンを作成しようとしました。これらのリポジトリは git で維持され、通常、多数のファイルが含まれています。

とても遅かったです。作業コピーを完全に複製して更新するのに 2 日かかりました。

于 2011-08-04T06:45:39.750 に答える
0

2021年の最新の回答はgit cinnabar、Firefoxなどで使用されているようです。

このページで提案されているその他のスクリプトは、メンテナンスされていないか、古いソフトウェア (通常は python 2.7) を実行する必要があります。対照的に、cinnabar は python 3.5+ で動作し、少なくとも執筆日まで維持されます。

cinnabar をインストールしたら、次のプレフィックスを付けることで、mercurial リポジトリを直接複製できますhg::

git clone hg::https://hg.mozilla.org/mozilla-unified

または、リモートを追加または設定します

git remote set-url origin hg::https://hg.mozilla.org/mozilla-unified
git fetch origin

Mercurial リモートにプッシュできます。

hg2gitおよびコマンドを使用すると、 git2hggit commit sha1s を Mercurial チェンジセットに変換したり、元に戻したりできます。github ページで利用可能なその他のドキュメント。

于 2021-10-17T06:59:41.920 に答える