Githubリモートリポジトリをブランチやコミット履歴を含めてまるごとCodeCommitにお引っ越しする手順。
引っ越しにはリポジトリのブランチ・タグ、コミット履歴など全てのリファレンスを含んだバックアップであるbareリポジトリを利用する。
bareリポジトリとは
リポジトリの構成管理
- ブランチ・タグ、コミット履歴など全てのリファレンスを含む、サーバーサイドの構成管理リポジトリであり完全バックアップである。管理対象のファイル実態は持たない。
-
git clone --bare
オプションでbare
リポジトリをクローンできる。 -
git clone --mirror
オプションでもbare
リポジトリをクローンできる。--bareとの違いは文字通りリモートリポジトリと同期するように設計されていて、.git/configはmirror=trueである。よってデフォルトでは全リファレンスをpushするし、git remote update
では全リファレンスを追跡する
--mirror
Set up a mirror of the source repository. This implies --bare. Compared to --bare, --mirror not only maps local branches of the source to local branches of the target, it maps all refs (including remote-tracking branches, notes etc.) and sets up a refspec configuration such that all these refs are overwritten by a git remote update in the target repository.ソースリポジトリのミラーを設定します。これは --bare を含意します。--bare と比較して、--mirror はソースのローカルブランチをターゲットのローカルブランチにマッピングするだけでなく、すべてのリファレンス(リモート追跡ブランチ、ノートなども含む)をマッピングし、これらのリファレンスがターゲットリポジトリの git remote update によって上書きされるように refspec 設定を行います。
Git - git-clone Documentation
non-bareリポジトリとは
リポジトリのワークスペース
- チェックアウト済のブランチ・タグのコミット履歴とファイル実態で構成されるクライアントサイドのワークスペースである。
- いつもの
git clone
はnon-bare
リポジトリ。
引っ越し手順
CodeCommitでリポジトリを作成して、IAMユーザにCodeCommitのプッシュできるポリシーとSSH公開鍵を登録しておく
# GitHubからbareリポジトリをクローンする
git clone --mirror git@github.com:path/to/reponame.git
# push先をCodeCommitのリポジトリに変更
cd ./reponame.git && git remote set-url --push origin ssh://git-codecommit.ap-northeast-1.amazonaws.com/path/to/reponame
# 全てのリファレンスを移行先にプッシュする(--mirror)
# (clone --mirror により、configのmirror=true状態のため、オプションなしでも全リファレンスはプッシュされる)
git push --mirror