GitHubのレポジトリをCodeCommitにコピーする

Qiita初投稿です。

AWS Amplifyの検証をしようとした際に、以前はサンプルからプロジェクトを作成することができたのですが、いつの間にかサンプルが見えなくなっていることに気が付きました。
探したところGitHubにはアーカイブされていたので、念のため、CodeCommitにコピーしました。
その際の手順メモとなります。

なお、そのサンプルは以下のものです。
https://github.com/aws-samples/aws-amplify-appsync-graphql-real-time-canvas

# 目次
- [CodeCommitのレポジトリを作成](#codecommitのレポジトリを作成)
- [GitHubからクローン(ベアコピー)を作成](#githubからクローンベアコピーを作成)
- [CodeCommitにpush](#codecommitにpush)
- [ベアコピーしたレポジトリを削除](#ベアコピーしたレポジトリを削除)
- [動作確認](#動作確認)
- [(おまけ)codecommitのデフォルトブランチを変更](#おまけcodecommitのデフォルトブランチを変更)

# CodeCommitのレポジトリを作成
まずは、CodeCommitのレポジトリを作成します。
手順は、以下の公式マニュアルに記載があります。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-create-repository.html

今回は、Cloud9からAWS CLIで作成しました。
```bash:CodeCommitのレポジトリを作成
aws codecommit create-repository \
--repository-name aws-amplify-appsync-graphql-real-time-canvas \
--repository-description "aws-amplify-appsync-graphql-real-time-canvas" \
--tags Category=aws-samples
```

実行結果は以下のようになります。「cloneUrlHttp」の値を控えておきます。
※クローンURLは、AWS CLIやAWSコンソールからでも確認できます。
```bash:実行結果
$ aws codecommit create-repository \
> --repository-name aws-amplify-appsync-graphql-real-time-canvas \
> --repository-description "aws-amplify-appsync-graphql-real-time-canvas" \
> --tags Category=aws-samples
{
    "repositoryMetadata": {
        "repositoryName": "aws-amplify-appsync-graphql-real-time-canvas", 
        "cloneUrlSsh": "ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas", 
        "lastModifiedDate": 1674977236.362, 
        "repositoryDescription": "aws-amplify-appsync-graphql-real-time-canvas", 
        "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas", 
        以下省略
    }
}
```

# GitHubからクローン(ベアコピー)を作成

次に、GitHubからローカル(ここではCloud9)に、gitの「--mirror」オプションを利用してクローンします。
詳細は、以下の公式マニュアルに記載があります。
https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-migrate-repository-existing.html

コマンドは、以下のようになります。
```bash:クローン(ベアコピー)
git clone --mirror \
https://github.com/aws-samples/aws-amplify-appsync-graphql-real-time-canvas \
aws-amplify-appsync-graphql-real-time-canvas
```

実行結果は、以下のようになります。
```bash:実行結果
$ git clone --mirror \
> https://github.com/aws-samples/aws-amplify-appsync-graphql-real-time-canvas \
> aws-amplify-appsync-graphql-real-time-canvas
Cloning into bare repository 'aws-amplify-appsync-graphql-real-time-canvas'...
remote: Enumerating objects: 533, done.
remote: Counting objects: 100% (46/46), done.
remote: Compressing objects: 100% (32/32), done.
remote: Total 533 (delta 23), reused 35 (delta 14), pack-reused 487
Receiving objects: 100% (533/533), 32.10 MiB | 21.71 MiB/s, done.
Resolving deltas: 100% (313/313), done.
```

# CodeCommitにpush

次に、事前に作成したCodeCommitのレポジトリに、ベアコピーしたレポジトリをpushします。
push先は、CodeCommitのレポジトリ作成時に控えたクローンURLです。
コマンドは以下のようになります。
```bash:push
git push \
https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas \
--all
```

実行結果は、以下のようになります。
```bash:実行結果
$ cd aws-amplify-appsync-graphql-real-time-canvas/
(BARE:master) $ git push \
> https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas \
> --all
Enumerating objects: 293, done.
Counting objects: 100% (293/293), done.
Compressing objects: 100% (139/139), done.
Writing objects: 100% (293/293), 28.18 MiB | 33.25 MiB/s, done.
Total 293 (delta 153), reused 289 (delta 150), pack-reused 0
remote: Validating objects: 100%
To https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas
 * [new branch]      bradruof/FixVulnerability -> bradruof/FixVulnerability
 * [new branch]      fix/security-patch-immer -> fix/security-patch-immer
 * [new branch]      master -> master
 * [new branch]      nimacks-patch-1 -> nimacks-patch-1
 * [new branch]      nimacks-patch-2 -> nimacks-patch-2
 * [new branch]      nimacks-patch-3 -> nimacks-patch-3
 * [new branch]      security-patch/node-forge -> security-patch/node-forge
 * [new branch]      swaminator-patch-1 -> swaminator-patch-1
```

# ベアコピーしたレポジトリを削除

ベアコピーしたレポジトリは、以下のように利用することができません。
```bash:ベアコピーしたレポジトリのエラー
(BARE:master) $ git checkout bradruof/FixVulnerability
fatal: this operation must be run in a work tree
```

削除しておきます。
```bash:ベアコピーしたレポジトリの削除
(BARE:master) $ cd ..
$ rm -fr aws-amplify-appsync-graphql-real-time-canvas
```

# 動作確認

後は、いつも通りレポジトリを利用すればよいです。
以下は一例です。

CodeCommitにpushしたレポジトリのブランチを確認します。
```bash:ブランチを確認
$ aws codecommit list-branches \
> --repository-name aws-amplify-appsync-graphql-real-time-canvas
{
    "branches": [
        "fix/security-patch-immer", 
        "master", 
        "nimacks-patch-1", 
        "security-patch/node-forge", 
        "swaminator-patch-1", 
        "nimacks-patch-2", 
        "nimacks-patch-3", 
        "bradruof/FixVulnerability"
    ]
}
```

CodeCommitのレポジトリのクローンURLがわからない場合は、以下のように確認できます。
```bash:クローンURLの確認
$ aws codecommit get-repository --repository-name aws-amplify-appsync-graphql-real-time-canvas
{
    "repositoryMetadata": {
        "creationDate": 1674977236.362, 
        "defaultBranch": "bradruof/FixVulnerability", 
        "repositoryName": "aws-amplify-appsync-graphql-real-time-canvas", 
        "cloneUrlSsh": "ssh://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas", 
        "lastModifiedDate": 1674977941.396, 
        "repositoryDescription": "aws-amplify-appsync-graphql-real-time-canvas", 
        "cloneUrlHttp": "https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas", 
        以下省略
    }
}
```

CodeCommitのレポジトリをローカルにクローンします。
```bash:ローカルにクローン
$ git clone \
> https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/aws-amplify-appsync-graphql-real-time-canvas \
> -b bradruof/FixVulnerability
Cloning into 'aws-amplify-appsync-graphql-real-time-canvas'...
remote: Counting objects: 293, done.
Receiving objects: 100% (293/293), 28.18 MiB | 10.91 MiB/s, done.
Resolving deltas: 100% (153/153), done.
```

以下のように、正常にクローンされがことが確認出ます。
```bash:動作確認
$ cd aws-amplify-appsync-graphql-real-time-canvas/
(bradruof/FixVulnerability) $ ls
amplify  CODE_OF_CONDUCT.md  CONTRIBUTING.md  graphqlgif1.gif  LICENSE  package.json  package-lock.json  public  README.md  src
```

CodeCommitのコマンドリファレンスは、CodeCommitの公式マニュアルに記載があります。

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/cmd-ref.html

基本的なGitコマンドについても、CodeCommitの公式マニュアルに記載があります。

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-basic-git.html

:::note info
CodeCommitの公式マニュアルは、分かりやすくてよいですね。
:::

# (おまけ)CodeCommitのデフォルトブランチを変更

こちらおまけですが、CodeCommitのデフォルトブランチの変更方法です。
普通にAWSコンソールからでも出来るようです。（今まで知らなかった）

https://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/how-to-change-branch.html