Goal
AWS CodeCommitに既にあるGitリポジトリを古いAWSアカウントから新しいAWSアカウントへ移行する際の手順を示します。
Authoring Guidelines
- AWS CodeCommitに限らず、GitHubからAWS CodeCommitへの移行、GitHubからGitHubへの移行でも、読み替えによって手順の大筋が把握できるようにAWS Management ConsoleとGitコマンドでの手順で主な流れを記載します。
- 自動化のため、将来的にAWS CodeCommitのAPIをコールするAWS CLIによる手順も追記する予定です。
References
本文の手順は、次の文書を参考に作成しました。
- "Migrate a Git repository to AWS CodeCommit". Amazon Web Services, Inc. Retrieved November 29, 2021.
- "How to Rename the master branch to main in Git". Tower. Retrieved November 29, 2021.
Pre-Requisites
本文の手順は、次の環境で実施、検証しました。
- Windows 10, build 19043.1348
How To
新しいリポジトリを作成する
次の任意の手段で、新しいリポジトリを作成します。
- AWS Management Console
- AWS CLI
- AWS CloudFormation
古いリポジトリの内容を新しいリポジトリへ反映する
[!IMPORTANT]
この手順では、一度もコミットされていない新しいリポジトリへ古いリポジトリの内容を移行します。既に何らかのコミットがなされている新しいリポジトリへ古いリポジトリの内容を増分移行する手順ではありません。
古いリポジトリのベアリポジトリをローカルに作成し、古いリポジトリの内容を新しいリポジトリへ反映します。
git clone --mirror %OLD_REPOSITORY_PATH%
CD %OLD_REPOSITORY_NAME%.git
git push %NEW_REPOSITORY_PATH% --all
git push %NEW_REPOSITORY_PATH% --tags
[!IMPORTANT]
git push --all
だけではタグが反映されないため、別途git push --tags
を実行する必要があります。
成功したら、ローカルに作成した古いリポジトリのベアリポジトリを削除します。
CD ..
RD /S %OLD_REPOSITORY_NAME%.git
新しいリポジトリのデフォルトブランチ名を変更する
BLM後の世界情勢に合わせて、新しいリポジトリのデフォルトブランチ名を "master" から "main" へ変更します。
新しいリポジトリをローカルへクローンし、ローカルリポジトリでブランチ名を変更します。
git clone %NEW_REPOSITORY_PATH%
CD %NEW_REPOSITORY_NAME%
git branch -m master main
ローカルリポジトリでブランチ名変更により作成したmainブランチをリモートリポジトリに反映します。
> git push -u origin main
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To %NEW_REPOSITORY_PATH%
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
次の任意の手段で、新しいリポジトリのディフォルトブランチを "master" から "main" へ変更します。
- AWS Management Console
- AWS CLI
ローカルリポジトリでブランチ名変更により削除したmasterブランチをリモートリポジトリに反映します。
> git push origin --delete master
To %NEW_REPOSITORY_PATH%
- [deleted] master
[!IMPORTANT]
ディフォルトブランチを "master" から "main" へ変更せずにmasterブランチの削除をリモートリポジトリに反映しようとすると、エラーにより失敗します。