291

Mercurial プロジェクトを git プロジェクトに変換する必要がありますが、コミット履歴はそのままにしておきたいです。私の現在の解決策は、hg 関連ファイルを削除してから git init && 必要なファイルを手動で追加することでしたが、それでは履歴が保持されません。これに対する解決策はありますか?

4

8 に答える 8

291

fast-exportを使用して試すことができます:

cd ~
git clone https://github.com/frej/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

この SO question もご覧ください。


Mercurial バージョン 4.6 未満を使用している場合は、adrihanuが役に立ちます。

彼はコメントで次のように述べています。 ." .

于 2013-04-16T13:04:42.587 に答える
81

既存の mercurial リポジトリを 'GitHub' リポジトリにインポートする場合は、こちら[ログインが必要]から入手できるGitHub インポーターを使用するだけです。高速エクスポートなどをいじる必要はもうありません(ただし、非常に優れたツールです)。

すべてのコミットブランチ、およびタグをそのまま取得します。もう 1 つのすばらしい点は、作成者の電子メール IDも変更できることです。以下のスクリーンショットをご覧ください。

ここに画像の説明を入力

ここに画像の説明を入力

于 2016-01-21T13:43:24.717 に答える
21

Mercurial を Git に変換した私の経験のいくつかのメモ。

1.hg-高速エクスポート

hg-fast-export の使用は失敗し、上記のように --force が必要でした。次に、このエラーが発生しました:

エラー: ref 'refs/heads/stable' をロックできません: 'refs/heads/stable/sub-branch-name' が存在します。「refs/heads/stable」を作成できません

hg-fast-export が完了すると、レポが切断されてしまいました。このリポジトリには孤立したブランチがいくつかあり、hg-fast-export にはある程度理想化されたリポジトリが必要だと思います。これは端が少し粗いように見えたので、Kiln Harmony ( http://blog.fogcreek.com/announce-kiln-harmony-the-future-of-dvcs/ )に移りました。

2.窯

上記のように、Kiln Harmony は無料利用枠のアカウントには存在しないようです。Git のみのリポジトリと Mercurial のみのリポジトリのどちらかを選択できましたが、切り替えるオプションはありません。私はサポート チケットを発行しました。返信があれば結果を共有します。

3.hg-git

Hg-Git mercurial プラグイン ( http://hg-git.github.io/ ) はうまくいきました。Mac OSX の参考までに、次のように macports 経由で hg-git をインストールしました。

  • sudo ポート インストール python27
  • sudo ポート選択 --set python python27
  • sudo ポート インストール py27-hggit
  • vi ~/.hgrc

.hgrc には次の行が必要です。

[ui]
username = Name Surname <me@mydomain.com>

[extensions]
hgext.bookmarks =
hggit = 

その後、次の方法で成功しました:

hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git

4. 警告: レポジトリを知る

上記はすべて鈍い手段であり、チームが git を適切に使用できるようになるまでに十分な時間がかかったので、先に進めただけです。

(3) に従ってプロジェクトを最初にプッシュすると、すべての新しい変更が失われました。これは、このコード行はガイドとしてのみ表示する必要があるためです。

$ hg bookmark -r default master # make a bookmark of master for default, so a ref gets created

理論的には、デフォルト ブランチは git にプッシュするときにマスターとみなすことができ、私の場合、マスターに相当するものとして「安定」を使用するレポを継承しました。さらに、レポの先端は「安定版」ブランチとまだマージされていないホットフィックスであることも発見しました。

Mercurial と変換するリポジトリの両方を正しく理解していない場合は、おそらく変換を行わない方がよいでしょう。

2 回目の変換試行に備えてリポジトリを準備するために、次のことを行いました。

hg update -C stable
hg merge stable/hotfix-feature
hg ci -m "Merge with stable branch"
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git

この後、git で検証可能な同等のプロジェクトを作成しましたが、前述の孤立したブランチはすべてなくなりました。あまり深刻ではないと思いますが、見落としとして後悔することになるかもしれません。したがって、私の最終的な考えは、とにかくオリジナルを維持することです。

編集: git で最新のコミットだけが必要な場合は、上記のマージよりも簡単です。

hg book -r tip master
hg push git+ssh://git@bitbucket.org:myaccount/myrepo.git
于 2015-12-13T19:38:42.253 に答える
2

これはコメントの方が良いでしょう。申し訳ありませんが、コメント権限がありません。

@ mar10 コメントは、これを行うために必要な欠けていた部分でした。

'/path/to/old/mercurial_repo' は (URL ではなく) ファイル システム上のパスでなければならないことに注意してください。そのため、前に元のリポジトリを複製する必要があります。— マル10

このコメントは、私にとってこれを解決した回答に関するものでし。 /2148757

これにより、コミット履歴をそのままにして、hg プロジェクトを git に移動しました。

于 2016-06-16T15:21:03.423 に答える