Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

MacでMercurialリポジトリをGitリポジトリに変換する

More than 1 year has passed since last update.

Mecurial_Git.png

はじめに

この記事は、Git Advent Calendar 2018 の3日目の記事です。

MercurialのリポジトリをGitのリポジトリに変換することになり、頑張って変換しました。

BitBucketのhgリポジトリを、githubのgitリポジトリに移行する
こちらの記事を参考にさせていただきましたが、私の作業環境がMacだからなのか、いくつかつまづいたポイントがありましたので、忘れない内に記事に書きます。

この方法では少なくとも、コミットログ(日時・作成者)を維持して変換することができます。

以降の説明では、作業ディレクトリは ~/ とします。

# ユーザーディレクトリを作業ディレクトリとする(任意)
cd ~/

Mercurialをインストールする

インストールしていなければインストールします。

brew install mercurial

fast-exportをダウンロードする

今回の目玉です。このソフトがリポジトリを変換をしてくれます。
Gitで公開されているので、以下のコマンドでダウンロードします。

git clone git://repo.or.cz/fast-export.git

python2を有効にする

fast-exportでは python2 というコマンドを利用しているようです。

MacにはデフォルトでPython2.7がインストールされているので、Python3系のインストール等をしていなければ、そのままで大丈夫です。特にここでの作業は必要ありません。

ただし、pyenv等の仕組みを使って、2.7系と3系のPythonを併用している場合、python2コマンドを有効にする必要があります。

以下のコマンドを叩けば、確認できます。

$ pyenv global
2.7.13
3.6.1

こんな風に 2.7.x が候補の中にあれば大丈夫です。
もし、なければ、以下のコマンドで追加します。

pyenv global 2.7.13 3.6.1

バージョン番号はご自身の環境に合わせて適宜読み替えてください。

pipをインストールする

pipはPythonのパッケージ管理ツールです。pyenv等を利用している人はおそらくインストール済みだと思います。

MacデフォルトのPython2.7を利用している場合は、pipをインストールしていない可能性があるので、インストールしてください。
いくつか方法がありますが、デフォルトのPython2.7を活かす場合は、こちらが参考になります。
macOSのデフォルトPythonでpipを使う

pipパッケージをインストールする

pipでmercurialのパッケージをインストールします。

# Python2.7系を明示的に指定してインストール
pip2 install mercurial

# Python3系を併用していないなら、これでもいいかも
pip install mercurial

Mercurialのローカルリポジトリを作成する

変換したいローカルリポジトリを用意してください。
もし、ローカルになければ、クローンで作成してください。

# Mercurialのローカルリポジトリを作成する
hg clone <MercurialリポジトリのURL> hg_repo

以後の説明では、~/hg_repoをMercurialのローカルリポジトリとします。

コミットのユーザー名を変更する

Mercurialのコミットログのユーザー名が所定の形式になっていないと、Gitにうまく変更できないようです。
以下のコマンドで確認します。

# Mercurialのリポジトリに移動
cd ~/hg_repo

# コミットログのユーザー名を一覧で表示
hg log | grep user:

表示されたユーザー名が hoge <hogehoge@example.com> のように ユーザー名 <メールアドレス>の形式になっていれば問題ありません。なっていなければ修正する必要があります。

まず、Mercurialの設定ファイル ~/.hgrcを編集します。なければ作ります。

# Mercurialの設定ファイルを作成する
touch ~/.hgrc

設定ファイルに以下を追記します。

[extensions]
hgext.convert=

これでhg convertコマンドが使えるようになります。
次に、~/authors.txtを作ります。

# Mercurialの設定ファイルを作成する
touch ~/authors.txt

このファイルに、ユーザー名の修正前と修正後を追記します。例えば、こんな感じです。

foo=foo <foo@example.com>
bar on Mac=bar <bar@example.com>

= の左が修正前で右が修正後です。
最後に、以下のコマンドを実行します。

hg convert --authormap authors.txt hg_repo hg_repo_2

新たに~/hg_repo_2が作られます。これでユーザー名が変更されます。
以後の説明では、~/hg_repo_2をMercurialのローカルリポジトリとします。

リポジトリを変換する

いよいよGitリポジトリに変換します。

# 空のGitリポジトリを作る
git init git_repo

# Gitリポジトリに移動
cd ~/git_repo

# MercurialのリポジトリをGitのリポジトリに変換する
~/fast-export/hg-fast-export.sh -r ~/hg_repo_2

# Gitリポジトリをチェックアウトする
git checkout HEAD

以上で変換完了です。おつかれさまでした。

さいごに

結構、苦戦してしまいまいしたが、何とかうまくいって良かったです。
作業にあたり、以下のサイトを参考にしました。ありがとうございました。

segur
Unity認定プログラマー。VR学会認定技術者。xRエンジニア。ガジェットが大好きなギーク。 色んなコンピュータ言語に触れるのが好き。
https://segurvita.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away