Mercurial プロジェクトを git プロジェクトに変換する必要がありますが、コミット履歴はそのままにしておきたいです。私の現在の解決策は、hg 関連ファイルを削除してから git init && 必要なファイルを手動で追加することでしたが、それでは履歴が保持されません。これに対する解決策はありますか?
8 に答える
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が役に立ちます。
彼はコメントで次のように述べています。 ." .
既存の mercurial リポジトリを 'GitHub' リポジトリにインポートする場合は、こちら[ログインが必要]から入手できるGitHub インポーターを使用するだけです。高速エクスポートなどをいじる必要はもうありません(ただし、非常に優れたツールです)。
すべてのコミット、ブランチ、およびタグをそのまま取得します。もう 1 つのすばらしい点は、作成者の電子メール IDも変更できることです。以下のスクリーンショットをご覧ください。
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
これはコメントの方が良いでしょう。申し訳ありませんが、コメント権限がありません。
@ mar10 コメントは、これを行うために必要な欠けていた部分でした。
'/path/to/old/mercurial_repo' は (URL ではなく) ファイル システム上のパスでなければならないことに注意してください。そのため、前に元のリポジトリを複製する必要があります。— マル10
このコメントは、私にとってこれを解決した回答に関するものでした。 /2148757
これにより、コミット履歴をそのままにして、hg プロジェクトを git に移動しました。