bitbucketからgithubにリポジトリを移行した。

githubを有料アカウントにしてprivateリポジトリの制限がなくなったため、bitbucketにあるリポジトリgithubに移しました。
その時の手順まとめ。

githubには外部サービスからのインポート機能があるため、単純に移行するだけならばこれを利用すれば良い。
ただ、今回はbitbucketの各リポジトリのauthorを変更した上でコミットログも修正、その後githubに上げ直すということをしたかったので、この機能を使わずに手動で作業した。

手順はざっくりこんな感じ

  1. bitbucketからリポジトリをローカルにクローンする
  2. リポジトリのauthorとコミットログを修正
  3. githubリポジトリを作る
  4. ローカルのリポジトリgithubリポジトリへのリモートを追加
  5. githubリポジトリに向けてプッシュ
  6. bitbucketのリポジトリを削除

1, 5についてはよくあるgit操作なので詳細は割愛。
3, 6はそれぞれサービス上のアカウント設定からできます。
2, 4がちょっと操作が必要だったので、備忘録として残しておく。

リポジトリのauthorとコミットログを修正

bitbucketとgithubでauthor情報が違っていたので、githubのものに設定した上で過去のコミットログのauthorも全て書き換えたかった。
こちらの記事を参考に修正した。

git config --local user.email <new_author_email@mail.com>
git config --local user.name <new_author_name>
git filter-branch -f --env-filter "GIT_AUTHOR_NAME='<new_author_name>'; GIT_AUTHOR_EMAIL='<new_author_email@mail.com>'; GIT_COMMITTER_NAME='<new_author_name>'; GIT_COMMITTER_EMAIL='<new_author_email@mail.com>';" HEAD

これをローカルにクローンしてきたリポジトリ内で実行する。

ローカルのリポジトリgithubリポジトリへのリモートを追加

githubリポジトリを作ると、既存のリポジトリ用に追加するためのコマンドが表示される。
ところが、これはリモート名が「origin」になっており、bitbucketからクローンしてきたリポジトリにはすでにoriginはbitbucketのリポジトリに向いた状態で設定されている。
これを書き換えても良かったが、めんどくさかったのでoriginではなく「github」というリモート名で登録するようにした。

git remote add github git@github.com:<github_user_name>/<repository_name>.git

この状態でgithubにプッシュしようと思ったら、originではなく「github」を向き先に設定する。

git push github master

感想

というわけで、githubで無制限のprivateリポジトリが作れるようになって、bitbucketからの移行も完了した。
月800円程度支払うがそれに見合うだけのメリットだと思うし、リポジトリを一箇所で管理できるようになったのでとても嬉しい。

これからもガンガン写経していきたい。