「GitLab」から「AWS CodeCommit」への移行方法

## この記事で実現できること

* 「GitLab」のリポジトリを「AWS CodeCommit」へ移行すること。


## 前提

* AWSアカウントがあること。
* 作業に使うIAMロール（IAMユーザ）に、「**AWSCodeCommitPowerUser**」ポリシーがアタッチされていること。CodeCommitのポリシーの詳細は [CodeCommit の AWS 管理ポリシー](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/security-iam-awsmanpol.html) を参照。
* AWS CLI バージョン **1.7.38** 以降がインストールされ、**configure**の設定が完了していること。理由は [AWS CodeCommit コマンドラインリファレンス](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/cmd-ref.html) を参照。
* Git バージョン **1.7.9** 以降がインストールされていること。理由は [Git リポジトリを AWS CodeCommit に移行する > Git をインストール](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-migrate-repository-existing.html#:~:text=%E6%AC%A1%E3%81%AB%E3%80%81-,Git%20%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB,-%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C) を参照。
:::note
AWS CLI と Git は、最新バージョンのインストールを推奨。
:::

## 手順開始前にやること

* ローカルの編集内容は引き継がれないため、移行先に引き継ぎたい内容はプッシュしておく。
* マージリクエストは引き継がれないため、移行前のリポジトリでマージリクエストを作成していた場合、移行後新たにプルリクエストを作成する。


## 手順

### 1. CodeCommitでリポジトリを作成する

1. [**CodeCommit**](https://ap-northeast-1.console.aws.amazon.com/codesuite/codecommit/repositories?region=ap-northeast-1)にアクセスし、ナビゲーションバーからリポジトリを作成するAWSリージョンを選択する。
![clipboard-202307041420-qaseu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/0737032a-4d49-fbfa-b432-f9752a0b290c.png)

2. 「**リポジトリの作成**」をクリックする。

3. 「**リポジトリ名**」と、必要に応じて「**説明 - オプショナル**」欄にリポジトリの説明を記入し、「**作成**」をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/65d5771c-0fdd-e99d-d727-6aa7be855d25.png)

4. 中身が空のリポジトリが作成された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/3950f2c4-7b87-f32c-003d-881a4ab0f36c.png)

5. 「**URLのクローン**」から「**HTTPSのクローン**」を選択し、クローン用のURLをコピーする。
   後の手順で使うため、コピーしたURLはメモしておく。
![https接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/d53e6e7f-b548-a5c6-37a1-2d60ad72e942.png)


### 2. CodeCommitへのHTTPS接続用のGit認証情報を作成する

:::note
既に「Git認証情報」が作成されている場合は、2.の手順は飛ばしてください。
:::

1. [**IAM**](https://us-east-1.console.aws.amazon.com/iamv2/home?region=ap-northeast-1#/home)にアクセスし、「**ユーザー**」から「**自分のIAMユーザー**」を選択する。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/3a3cc20d-6a16-eb05-1b3d-7db63dbadad6.png)


2. 「**セキュリティ認証情報**」タブを選択し、「**AWS CodeCommit の HTTPS Git 認証情報**」で「**認証情報を生成**」を選択する。
![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/afe61514-211d-0ba2-51c4-544f3efa60f9.png)

3. 新しい認証情報が作成される。
   ポップアップを閉じてしまったら今回作成されたパスワードは保存できなくなってしまうため、「**認証情報をダウンロード**」からダウンロードして、安全な場所に保存しておく。
   このユーザー名とパスワードは後の手順で使うため、保存した場所を覚えておく。
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/073894d5-18df-6152-edeb-a62aa6cd1a7c.png)


### 3. GitLabリポジトリのクローンを作成して、CodeCommitリポジトリにプッシュする

1. [**GitLab**](https://gitlab.com/)にアクセスし、CodeCommitに移行したいプロジェクトを開く。
 
2. 画面右の「**クローン**」から「**HTTPSでクローン**」の「**URL横のアイコン**」を選択し、クローン用のURLをコピーする。
   次の手順で使うため、コピーしたURLはメモしておく。
![gitlabクローン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/2e9f037e-687e-f457-66e2-2328d37bcc86.png)


3. コマンドプロンプトの任意のディレクトリで以下のコマンドを実行し、GitLabリポジトリのクローンをローカルディレクトリに作成する。
   クローンを作成するディレクトリには任意の名前を付ける。

       git clone --mirror ${ 3.2でコピーしたGitLabリポジトリのクローン用URL } ${ GitLabリポジトリのクローンを作成するディレクトリ名 }


4. 以下のコマンドを実行し、クローンを作成したディレクトリに移動する。

       cd ${ クローンを作成したディレクトリ名 }


5. 以下のコマンドを実行し、ローカルにクローンしたGitLabリポジトリを1.3で作成したCodeCommitリポジトリにプッシュする。
   認証を求められた場合は、2.3で作成されたユーザー名とパスワードを入力する。
   ※ `--all`オプションでは、タグがプッシュされないので注意。

       git push ${ 1-5.でコピーしたCodeCommitリポジトリのクローン用URL } --all

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/bcfd5926-8c83-d326-ab7c-04ee55740a52.png)


6. GitLabリポジトリのタグもプッシュしたい場合は、3.5が完了するのを待ってから以下のコマンドを実行する。

       git push ${ 1-5.でコピーしたCodeCommitリポジトリのクローン用URL } --tags


7. プッシュ完了後にCodeCommitリポジトリを見ると、コード・ブランチ・Git タグを移行できていることが確認できる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/368c5c48-df78-1870-d064-107e4453b290.png)
![ブランチの移行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/84e599f5-78d7-7eb0-0f9d-9f69d7a1dee2.png)
![gittag.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3322404/b1759a33-085c-4466-98fc-d959d5b366f8.png)



## 参考サイト
* [Git リポジトリを AWS CodeCommit に移行する](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-migrate-repository-existing.html)
* [Git 認証情報を使用した HTTPS ユーザーのセットアップ](https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/setting-up-gc.html)