1.移行元のリポジトリURLをコピーする
移行元リポジトリにある.git
で終わるURLをコピーします。
コピーしたURLはSOURCE_REPOSITORY_URL
と呼びます。
2.移行先のリポジトリURLをコピーする
移行先のGitHubリポジトリを作成します。
.git
で終わるURLをコピーしておきます。コピーしたURLはDESTINATION_REPOSITORY_URL
と呼びます。
3.複製元リポジトリのベアクローンを作成する
Gitコマンドで複製元のリポジトリをクローンします。
このローカルリポジトリは移行後に削除するので、保存場所を気にする必要はありません。
git clone --bare <SOURCE_REPOSITORY_URL>
--bare
オプションを付けると、ソースコードがなく、更新履歴やブランチ状態などを保持しているリポジトリを作成できるようです(--mirror
でもほぼ同じ?)。
新規ターミナルで実行すると、ルートディレクトリ(~
)に<user-name>/<SOURCE_REPOSITORY_URL>
が作成されます。
XXX@XXX.git.backlog.jp:/project-name/old-repository.git
ならold-repository.git
のように作成されます。
Resolving deltas: 100% (10000/10000), done.
のようになれば完了です。
このようなファイル構成になっています。
old-repository.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
├── packed-refs
└── refs/
4.ミラーリポジトリに移動する
cd <REPOSITORY>
<REPOSITORY>
はgit clone --bare
で作成される.git
フォルダです。
git clone --mirror XXX@XXX.git.backlog.jp:/project-name/old-repository.git
とした場合は、cd old-repository.git
となります。
5.複製元リポジトリを複製先のリポジトリにミラープッシュする
複製先のURL(<DESTINATION_REPOSITORY_URL>
)にローカルリポジトリをプッシュします。
git push --mirror <DESTINATION_REPOSITORY_URL>
remote: Resolving deltas: 100% (0000/10000), done.
のようになれば完了です。
コミット履歴やブランチ・タグ情報も複製できているのが確認できると思います。
注意点としては、複製元リポジトリがmasterブランチを使っていると、複製先でデフォルトブランチがmasterにならない現状が起きました(アルファベット順で最初のブランチ名が初期設定されている?)。
移行後にGitHubで、Settings→Branchesと進んで「Default branch」をmasterに変更して解消できました。
6.一時ローカルリポジトリを削除する
リポジトリは複製できたので、一時的にクローンしたリポジトリを削除します。
cd ..
rm -rf <REPOSITORY>
お疲れ様でした。これで移行は完了です!