◆ fast-export を使う
◆ Windows だと辛い
  ◆ shell script と Python 必要
  ◆ WSL あると大丈夫
◆ Python には mercurial パッケージ必要

Bitbucket が mercurial をやめるのでリポジトリを移行しようと思います
最初は単純に 1 コミットに全部まとめてしまえばいいかと思ってたのですが 調べてみるとコミットログを残しての移行が簡単そうだったのでやってみました

手順は公式ドキュメントにあります
Git - Git へ移行する

fast-export というツールを使います
ドキュメント中では repo.or.cz というサイトからクローンしていますが github にもあります

https://repo.or.cz/fast-export.git
https://github.com/frej/fast-export

移行する

repo-hg フォルダの hg リポジトリを git リポジトリにするにはこういう感じです

git clone http://repo.or.cz/r/fast-export.git fast-export
python3 -m pip install mercurial
git init repo-git
cd repo-git
../fast-export/hg-fast-export.sh -r ../repo-hg

repo-git フォルダの中は .git フォルダしかありませんがコミットされているので log を見るとちゃんと移行できてることがわかります
使い終わっていらないなら fast-export は消します

ユーザ情報の変換

ドキュメントが長いのはユーザ情報の変換をしてるからです
mercurial のほうがユーザ情報の指定方法がゆるいのでそのままだとエラーになることがあるみたいです
変換が必要ならドキュメントのようにマッピングファイルを作って fast-export の -A オプションで指定します

私の場合はそのまま実行しましたがとくに問題なかったです

困った部分

変換は不要でしたがその他困った部分がいくつかありました

まず Windows でやるのは向いていません
fast-export は shellscript しかないです
git のために git bash があるからこれでいいかと思ったのですが Python が必要です
git bash には入ってないので入れないとだめです
Windows 側にあるのを使おうとしたら git bash から呼び出すとちゃんと動かなかったです

Windows 10 で WSL があるなら WSL でやるといいです
私は WSL 入れてる PC にデータ移してそこでやりました
それでも Windows で clone したからか shellscript が CRLF になっていて構文エラーが出たり手間が増えました
普段づかいが fish なので それのせいで構文エラーが出たのかと思って bash にしたのに動かなくて bash がなんかおかしい?とか変な方向に進んでムダに時間がかかりました
CRLF 変換とかムダどころかトラブルのもとの厄介な機能は廃止してほしいです

もうひとつ git 設定関連で core.ignoreCase に関するエラーもありました
これも Windows だからでしょうか

Error: The option core.ignoreCase is set to true in the git
repository. This will produce empty changesets for renames that just
change the case of the file name.
Use --force to skip this check or change the option with
git config core.ignoreCase false

大文字小文字の違いを無視するので 大文字小文字だけを変更したリネームのコミットが変更なしになるという警告です
警告といっても実行させてくれないエラーです
--force を使って無視して強制的にするか git config で core.ignoreCase を false にするかが必要です
大文字小文字だけの名前変更なんてしてないので --force を使いました

また Python には mercurial パッケージが必要です
入ってなかったのでこんなエラーでした

Could not find a python interpreter with the mercurial module >= 4.6 available.  Please use the 'PYTHON' environment variable to specify the interpreter to use.

pip でインストールします

python3 -m pip install mercurial

これでうまく動きました