MercurialのリポジトリをGitのリポジトリに変換

hg-fast-exportというものを使えばできるらしい。

ただ変換後にちょっとエラーが起こったので対処法も含めてメモっておく。

MercurialリポジトリをGitのリポジトリに変換

https://hoge.com/hoge/というMercurialリポジトリを変換する例

$ git clone git://repo.or.cz/fast-export.git
$ hg clone https://hoge.com/hoge/
$ cd hoge
$ git init
$ ../hg-fast-export.sh -r .

ただ変換すると一部のコミットの日付がおかしいことになっており、pushしようとすると以下のエラーが出た。

error: object 64db85a4528218edf2fc9a08a34ff9b5e8ee69c6:invalid author/committer line - bad date

エラーが出ているコミットを見ると以下のようになっていた。

commit 64db85a4528218edf2fc9a08a34ff9b5e8ee69c6
Author: Shinichi <>
Date: Thu Jan 1 00:00:00 1970 +0000

first commit

以下のようなシェルスクリプトを実行して日付を修正する。

git filter-branch --env-filter \
'if [ $GIT_COMMIT = 64db85a4528218edf2fc9a08a34ff9b5e8ee69c6 ]
then
export GIT_AUTHOR_DATE="Sun May 23 18:09:52 2010 +0900"
export GIT_COMMITTER_DATE="Sun May 23 18:09:52 2010 +0900"
fi'

これで無事にGitリポジトリに変換できてgithubにpushもできましたとさ。