Github がプライベートリポジトリを無料開放したので Bitbucket から Github に移行しようと考える人も多いでしょう。 私はもともと目的によって使い分けていたものの、一部を Bitbucketから Github に移行しました。 やり方はそれほど難しくないものの、一部間違えるとうまく行かない点があるのでまとめてみました。
まずはローカルのリポジトリを移行できるように準備します。
$ git pull
$ git fetch --unshallow
$ git remote rename origin old
最初にリポジトリを pull して最新状態にします。 次に unshallow します。 最初からすべてのコミット履歴がローカルにあるなら不要ですが、途中から shallow clone したリポジトリだとこの作業がないと移行に失敗します。 最後に remote をリネームします。
Web インターフェイス上で Github に新しいリポジトリを作成します。 このとき、必ず空のリポジトリでないとあとで失敗します。 作成画面で出てくる選択肢で Readme を作ったり、 .gitignore や ライセンスを選択しても失敗します。 ここまで正しい手順で空のリポジトリを作成できていれば、画面上に移行手順が表示されるので、それに沿って作業します。
Github の画面上のガイドに沿って作業します。
$ git remote add [email protected]:[username]/[repo-name].git
$ git push -u origin
[username][repo-name] は画面に表示されたものをそのまま使用します。 コピーして端末に貼り付けるとミスタイプしないので便利です。
以上でリポジトリの移行は終わりですが、正しく移行できたことを確認したら古いリポジトリの削除をします。 Bitbucket 上のリポジトリは削除しても、移行済みの目印をつけて残しておいても構いません。 ローカルでは古いリポジトリの remote を削除します。
$ git remote rm old
Github の画面上に出てくるやり方と同じものは多く見かけましたが、最初に pull しておかないといけないとか、 unshallow しないと失敗するとかの情報は意外とないようです。
勉強になりました。
タイプミスを見つけたのでおしらせします。
git fetch --umshallow
のところを
git fetch --unshallow
と変えて実行しました。