

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# AWS CodeCommit に移行する
<a name="how-to-migrate-repository"></a>

Git リポジトリを CodeCommit リポジトリに移行するには、クローニング、ミラーリング、ブランチの全部または一部の移行などさまざまな方法があります。また、コンピュータ上のローカルでバージョン管理されていないコンテンツを CodeCommit に移行することもできます。

次のトピックでは、リポジトリを移行する方法をいくつか示します。使用するステップは、リポジトリの種類、スタイル、複雑さ、および移行する内容や方法によって異なる場合があります。非常に大きなリポジトリの場合、[ を段階的に移行する場合があります](how-to-push-large-repositories.md)。

**注記**  
Perforce、Subversion、TFS などの他のバージョン管理システムから CodeCommit に移行することもできますが、まず Git に移行する必要があります。  
他のオプションについては、Git のドキュメントを参照してください。  
あるいは、Scott Chacon と Ben Straub の *Pro Git* の本で、[Git](http://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git) への移行についての情報を参照できます。

**Topics**
+ [Git リポジトリを に移行する AWS CodeCommit](how-to-migrate-repository-existing.md)
+ [コンテンツを CodeCommit に移行する](how-to-migrate-repository-local.md)
+ [リポジトリの段階的移行](how-to-push-large-repositories.md)

# Git リポジトリを に移行する AWS CodeCommit
<a name="how-to-migrate-repository-existing"></a>

既存の Git リポジトリを CodeCommit リポジトリに移行できます。このトピックの手順では、別の Git リポジトリにホストされているプロジェクトを CodeCommit に移行する方法について説明します。このプロセスの一環として、次の作業を行います。
+ CodeCommit に必要な初期セットアップを完了します。
+ CodeCommit リポジトリを作成します。
+ リポジトリをクローンし、CodeCommit にプッシュします。
+ CodeCommit リポジトリ内のファイルを表示します。
+ CodeCommit リポジトリをチームと共有します。

![\[Git リポジトリの CodeCommit への移行\]](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-migrate-existing.png)


**Topics**
+ [ステップ 0: CodeCommit へアクセスに必要なセットアップを行う](#how-to-migrate-existing-setup)
+ [ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-existing-create)
+ [ステップ 2: リポジトリのクローンを作成して CodeCommit リポジトリにプッシュする](#how-to-migrate-existing-clone)
+ [ステップ 3: CodeCommit でファイルを表示する](#how-to-migrate-existing-view)
+ [ステップ 4: CodeCommit リポジトリを共有する](#how-to-migrate-existing-share)

## ステップ 0: CodeCommit へアクセスに必要なセットアップを行う
<a name="how-to-migrate-existing-setup"></a>

リポジトリを CodeCommit にマイグレーションする前に、CodeCommit 用の IAM ユーザーを作成して設定し、アクセス用にローカルコンピュータを設定する必要があります。また、 AWS CLI をインストールして CodeCommit を管理する必要があります。ほとんどの CodeCommit タスクは CLI なしで実行できますが、 AWS CLI はコマンドラインや端末で Git を操作するときに柔軟性を提供します。

CodeCommit 用に既に設定されている場合は、[ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-existing-create) にスキップできます。

**IAM ユーザーを作成および設定して CodeCommit にアクセスするには**

1. アマゾン ウェブ サービスアカウントを作成するには、[http://aws.amazon.com](https://aws.amazon.com/) にアクセスし、[**Sign Up**] (サインアップ) を選択します。

1. IAM ユーザーを作成するか、アマゾン ウェブ サービスアカウントに関連付けられた既存のユーザーを使用します。アクセスキー ID およびシークレットアクセスキーがその IAM ユーザーに関連付けられていることを確認します。詳細については、[アマゾン ウェブ サービスアカウントの IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html)を参照してください。
**注記**  
CodeCommit には が必要です AWS Key Management Service。既存の IAM ユーザーを使用している場合は、CodeCommit に必要な AWS KMS アクションを明示的に拒否するポリシーがユーザーにアタッチされていないことを確認してください。詳細については、「[AWS KMS および 暗号化](encryption.md)」を参照してください。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. IAM コンソールのナビゲーションペインで、[**Users**] (ユーザー) を選択し、続いて、CodeCommit へアクセスするために設定する IAM ユーザーを選択します。

1. [**Permissions (アクセス許可)**] タブで、[**Add Permissions (アクセス許可の追加)**] を選択します。

1. [**Grant permissions (アクセス許可の付与)**] で、[**Attach existing policies directly (既存のポリシーを直接アタッチする)**] を選択します。

1. ポリシーの一覧から、[**AWSCodeCommitPowerUser**] または CodeCommit アクセスの別の管理ポリシーを選択します。詳細については、「[AWS CodeCommit の マネージドポリシー](security-iam-awsmanpol.md)」を参照してください。

   アタッチするポリシーを選択したら、[**Next: Review**] (次へ: 確認) を選択して、IAM ユーザーにアタッチするポリシーのリストを表示します。リストが正しい場合は、[**Add permissions (アクセス許可の追加)**] を選択します。

    CodeCommit 管理ポリシーや、その他のグループおよびユーザーを含むリポジトリへのアクセス共有の詳細については、[リポジトリの共有](how-to-share-repository.md) および [の認証とアクセスコントロール AWS CodeCommit](auth-and-access-control.md) を参照してください。

**をインストールして設定するには AWS CLI**

1. ローカルマシンで、 をダウンロードしてインストールします AWS CLI。これは、コマンドラインから CodeCommit とやり取りするための前提条件です。 AWS CLI バージョン 2 のインストールが推奨されます。これは の最新バージョン AWS CLI であり、すべての最新機能をサポートしています。これは、 でルートアカウント、フェデレーティッドアクセス、または一時的な認証情報の使用 AWS CLI をサポートする の唯一のバージョンです**git-remote-codecommit**。

   詳細については、[AWS 「 コマンドラインインターフェイスのセットアップ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)」を参照してください。
**注記**  
CodeCommit は AWS CLI バージョン 1.7.38 以降でのみ動作します。ベストプラクティスとして、 をインストールまたは最新バージョン AWS CLI にアップグレードします。インストール AWS CLI した のバージョンを確認するには、 **aws --version** コマンドを実行します。  
の古いバージョン AWS CLI を最新バージョンにアップグレードするには、[「 のインストール AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」を参照してください。

1. このコマンドを実行して、 の CodeCommit コマンド AWS CLI がインストールされていることを確認します。

   ```
   aws codecommit help
   ```

   このコマンドは、CodeCommit コマンドのリストを返します。

1. 次のように、 **configure** コマンドを使用して プロファイル AWS CLI で を設定します。

   ```
   aws configure
   ```

   プロンプトが表示されたら、CodeCommit で使用する IAM ユーザーの AWS アクセスキーと AWS シークレットアクセスキーを指定します。また、 など、リポジトリが存在する AWS リージョン を必ず指定してください`us-east-2`。デフォルトの出力形式の入力を求められたら、`json` を指定します。例えば、IAM ユーザーのプロファイルを設定する場合は、次のようにします。

   ```
   AWS Access Key ID [None]: Type your IAM user AWS access key ID here, and then press Enter
   AWS Secret Access Key [None]: Type your IAM user AWS secret access key here, and then press Enter
   Default region name [None]: Type a supported region for CodeCommit here, and then press Enter
   Default output format [None]: Type json here, and then press Enter
   ```

   で使用するプロファイルの作成と設定の詳細については AWS CLI、以下を参照してください。
   + [名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [での IAM ロールの使用 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Set コマンド](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [認証情報をローテーションして AWS CodeCommit リポジトリに接続する](temporary-access.md)

   別の のリポジトリまたはリソースに接続するには AWS リージョン、デフォルトのリージョン名 AWS CLI で を再設定する必要があります。CodeCommit でサポートされるデフォルトのリージョン名は以下のとおりです。
   + us-east-2
   + us-east-1
   + eu-west-1
   + us-west-2
   + ap-northeast-1
   + ap-southeast-1
   + ap-southeast-2
   + ap-southeast-3
   + me-central-1
   + eu-central-1
   + ap-northeast-2
   + sa-east-1
   + us-west-1
   + eu-west-2
   + ap-south-1
   + ap-south-1
   + ca-central-1
   + us-gov-west-1
   + us-gov-east-1
   + eu-north-1
   + ap-east-1
   + me-south-1
   + cn-north-1
   + cn-northwest-1
   + eu-south-1
   + ap-northeast-3
   + af-south-1
   + il-central-1

   CodeCommit と の詳細については AWS リージョン、「」を参照してください[リージョンと Git 接続エンドポイント](regions.md)。IAM、アクセスキー、シークレットキーに関する詳細については、[認証情報を取得する方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials)および [IAM ユーザーのアクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)を参照してください。 AWS CLI および プロファイルの詳細については、[「名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。

次に、Git をインストールする必要があります。
+ **Linux、macOS、Unix の場合**:

  CodeCommit リポジトリのファイル、コミット、およびその他の情報を使用するには、ローカルマシンに Git をインストールする必要があります。CodeCommit は Git バージョン 1.7.9 以降をサポートしています。Git バージョン 2.28 は、初期コミットのブランチ名の設定をサポートしています。最新バージョンの Git を使用することをお勧めします。

  Git をインストールするには、[Git のダウンロード](http://git-scm.com/downloads)などのウェブサイトをお勧めします。
**注記**  
Git は、定期的に更新されている、発展中のプラットフォームです。機能の変更により、CodeCommit での動作が影響を受ける場合があります。特定のバージョンの Git と CodeCommit で問題が発生した場合は、 の情報を確認してください[トラブルシューティング](troubleshooting.md)
+ **Windows の場合:** 

  CodeCommit リポジトリのファイル、コミット、およびその他の情報を使用するには、ローカルマシンに Git をインストールする必要があります。CodeCommit は Git バージョン 1.7.9 以降をサポートしています。Git バージョン 2.28 は、初期コミットのブランチ名の設定をサポートしています。最新バージョンの Git を使用することをお勧めします。

  Git をインストールするには、[Git for Windows](https://gitforwindows.org/) などのウェブサイトをお勧めします。このリンクを使用して Git をインストールする場合、以下を除くすべてのインストールのデフォルト設定を使用できます。
  + [**Adjusting your PATH environment (PATH 環境の調整)**] ステップでプロンプトが表示されたら、[Use Git from the Windows Command Prompt (Windows コマンドプロンプトから Git を使用する)] オプションを選択します。
  + (オプション) CodeCommit の Git 認証情報を設定する AWS CLI 代わりに、 に含まれる認証情報ヘルパーで HTTPS を使用する場合は、**「追加のオプションの設定**」ページで、**Git 認証情報マネージャーを有効にする**オプションがオフになっていることを確認してください。Git 認証情報マネージャーは、IAM ユーザーが Git 認証情報を設定する場合のみ、CodeCommit と互換性があります。詳細については、「[Git 認証情報を使用した HTTPS ユーザーのセットアップ](setting-up-gc.md)」および「[Git for Windows: Git for Windows をインストールしましたが、リポジトリへのアクセスが拒否されます (403)](troubleshooting-ch.md#troubleshooting-windowshttps)」を参照してください。
**注記**  
Git は、定期的に更新されている、発展中のプラットフォームです。機能の変更により、CodeCommit での動作が影響を受ける場合があります。特定のバージョンの Git と CodeCommit で問題が発生した場合は、 の情報を確認してください[トラブルシューティング](troubleshooting.md)

CodeCommit は、HTTPS 認証と SSH 認証の両方をサポートしています。セットアップを完了するには、CodeCommit (HTTPS、ほとんどのユーザーに推奨）、CodeCommit (SSH) へのアクセスに使用する SSH キーペア、 (フェデレーティッドアクセスを使用するユーザーに推奨）、または (HTTPS) に含まれる認証情報ヘルパーの Git 認証情報を設定する必要があります。 **git-remote-codecommit** AWS CLI 
+ サポートされているオペレーティングシステムすべての Git の認証情報については、「[ステップ 3: CodeCommit への HTTPS 接続用の Git 認証情報を作成する](setting-up-gc.md#setting-up-gc-iam)」を参照してください。
+ Linux、macOS、または UNIX の SSH については、[SSH および Linux、macOS、または Unix: Git と CodeCommit 用にパブリックキーとプライベートキーをセットアップする](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes) を参照してください。
+  Windows での SSH については、「[ステップ 3: Git および CodeCommit 用のパブリックキーとプライベートキーをセットアップする](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows)」を参照してください。
+ **git-remote-codecommit** の場合は、「[git-remote-codecommit AWS CodeCommit を使用した への HTTPS 接続のセットアップ手順](setting-up-git-remote-codecommit.md)」を参照してください。
+ Linux、macOS、または Unix の認証情報ヘルパーについては、[認証情報ヘルパーを設定する (Linux、macOS、または Unix)](setting-up-https-unixes.md#setting-up-https-unixes-ch-config) を参照してください。
+ Windows での認証情報ヘルパーについては、「[認証情報ヘルパーをセットアップする (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config)」を参照してください。

## ステップ 1: CodeCommit リポジトリを作成する
<a name="how-to-migrate-existing-create"></a>

このセクションでは、CodeCommit コンソールを使用して、このチュートリアルの残りの部分で使用する CodeCommit リポジトリを作成します。を使用してリポジトリ AWS CLI を作成するには、「」を参照してください[リポジトリを作成する (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli)。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. リージョンセレクタで、リポジトリ AWS リージョン を作成する を選択します。詳細については、「[リージョンと Git 接続エンドポイント](regions.md)」を参照してください。

1. [**Repositories (リポジトリ)**] ページで、[**Create repository (リポジトリの作成)**] を選択します。

1. [**Create repository (リポジトリの作成)**] ページの [**Repository name (リポジトリ名)**] に、リポジトリの名前を入力します。
**注記**  
リポジトリ名では大文字と小文字が区別されます。Amazon Web Services アカウントの名前は、 AWS リージョン 内で一意である必要があります。

1. (オプション) [**Description (説明)**] にリポジトリの説明を入力します。この説明は、お客様と他のユーザーがリポジトリの用途を識別するのに役立ちます。
**注記**  
コンソールの説明フィールドに [Markdown] と表示され、すべての HTML 文字とすべての有効な Unicode 文字を使用できます。アプリケーションデベロッパーとして `GetRepository` または `BatchGetRepositories` API を使用していて、ウェブブラウザにレポジトリの説明フィールドを表示させる場合は、[CodeCommit API リファレンス](https://docs.aws.amazon.com/codecommit/latest/APIReference/)を参照してください。

1. (オプション) **タグの追加** を選択して、1 つ以上のリポジトリタグ ( AWS リソースの整理と管理に役立つカスタム属性ラベル) をリポジトリに追加します。詳細については、「[でのリポジトリのタグ付け AWS CodeCommit](how-to-tag-repository.md)」を参照してください。

1. (オプション) **追加設定**を展開して、このリポジトリ内のデータの暗号化と復号にデフォルト AWS マネージドキー または独自のカスタマーマネージドキーを使用するかどうかを指定します。独自のカスタマーマネージドキーを使用する場合は、リポジトリを作成する AWS リージョン で使用可能であること、およびキーがアクティブであることを確認する必要があります。詳細については、「[AWS Key Management Service AWS CodeCommit および リポジトリの暗号化](encryption.md)」を参照してください。

1. (オプション) このリポジトリに Java または Python コードが含まれており、CodeGuru Reviewer で分析する場合は、[**Enable Amazon CodeGuru Reviewer for Java and Python**] (Java および Python 用に Amazon CodeGuru Reviewer を有効化) を選択します。CodeGuru Reviewer は、複数の機械学習モデルを使用して、コードの欠陥を検出し、プルリクエストの改善と修正を提案します。詳細については、[https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html)を参照してください。

1. [**Create**] を選択します。

![\[CodeCommit リポジトリを移行するための Git リポジトリを作成\]](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-create-repo-migrate-existing.png)


作成されたリポジトリは、[**リポジトリ**] リストに表示されます。URL 列で、コピーアイコンを選択し、CodeCommit に接続するために使用するプロトコル (SSH または HTTPS) を選択します。URL をコピーします。

例えば、リポジトリの名前を *MyClonedRepository* とし、米国東部 (オハイオ) リージョンで HTTPS で Git 認証情報を使用している場合、URL は次のようになります。

```
https://git-codecommit.us-east-2.amazonaws.com/MyClonedRepository
```

この URL は後で [ステップ 2: リポジトリのクローンを作成して CodeCommit リポジトリにプッシュする](#how-to-migrate-existing-clone) で必要になります。

## ステップ 2: リポジトリのクローンを作成して CodeCommit リポジトリにプッシュする
<a name="how-to-migrate-existing-clone"></a>

このセクションでは、既存の Git リポジトリのクローン (ローカルリポジトリと呼ばれる) をローカルコンピュータに作成します。次に、ローカルリポジトリの内容を、先ほど作成した CodeCommit リポジトリにプッシュします。

1. ローカルコンピュータのターミナルまたはコマンドプロンプトから、**git clone** オプションを指定して `--mirror` コマンドを実行し、リモートリポジトリのベアコピーを *aws-codecommit-demo* という名前の新しいフォルダにクローンを作成します。これは移行にのみ使用するベアリポジトリです。CodeCommit の移行されたリポジトリとやり取りするためのローカルリポジトリではありません。ローカルリポジトリは、CodeCommit への移行が完了してから作成することができます。

   次の例では、GitHub (*https://github.com/awslabs/aws-demo-php-simple-app.git*) でホストされたデモアプリケーションを、*aws-codecommit-demo* というディレクトリのローカルリポジトリにクローンを作成します。

   ```
   git clone --mirror https://github.com/awslabs/aws-demo-php-simple-app.git aws-codecommit-demo
   ```

1. クローンを作成したディレクトリに変更します。

   ```
   cd aws-codecommit-demo
   ```

1. 送信先 CodeCommit リポジトリの URL と名前、および **git push** オプションを指定して、**--all** コマンドを実行します。(ここで指定するのは「[ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-existing-create)」でコピーした URL です)。

   たとえば、リポジトリに *MyClonedRepository* という名前を付けて HTTPS を使用するように設定されている場合は、次のコマンドを実行します。

   ```
   git push https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --all
   ```
**注記**  
**--all** オプションは、リポジトリのすべてのブランチをプッシュします。タグのような他の参照をプッシュしません。タグをプッシュする場合は、最初のプッシュが完了するまで待機してから、**--tags** オプションを使用して、もう一度プッシュします。  

   ```
   git push ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --tags
   ```
詳細については、Git ウェブサイトで [Git push](https://git-scm.com/docs/git-push) のページを参照してください。大きなリポジトリをプッシュする方法については、特にすべての参照を一度にプッシュする場合 (例えば、**--mirror** オプションを指定する場合) は、[リポジトリの段階的移行](how-to-push-large-repositories.md) を参照してください。

*aws-codecommit-demo* フォルダとそのコンテンツは、CodeCommit にリポジトリを移行した後で削除することができます。すべての正しいリファレンスを使用してローカルリポジトリを作成し、CodeCommit のリポジトリを操作するには、`git clone` オプションを指定せず `--mirror` コマンドを実行します。

```
git clone https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository
```

## ステップ 3: CodeCommit でファイルを表示する
<a name="how-to-migrate-existing-view"></a>

ディレクトリの内容をプッシュした後、CodeCommit コンソールを使用して、そのリポジトリ内のすべてのファイルをすばやく表示できます。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. [**リポジトリ**] で、リポジトリの名前 (例: *MyClonedRepository*) を選択します。

1. ブランチ、クローン URL、設定などのリポジトリ内のファイルを表示します。  
![\[CodeCommit のクローンされたリポジトリの表示\]](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-cloned-repo-url.png)

## ステップ 4: CodeCommit リポジトリを共有する
<a name="how-to-migrate-existing-share"></a>

CodeCommit でリポジトリを作成すると、HTTPS 接続用と SSH 接続用の 2 つのエンドポイントが生成されます。どちらもネットワーク経由で安全な接続を提供します。ユーザーは、いずれかのプロトコルを使用できます。両方のエンドポイントは、どのプロトコルをユーザーに推奨するにしてもアクティブのままです。リポジトリを他のユーザーと共有する前に、リポジトリへのアクセスを他のユーザーに許可する IAM ポリシーを作成する必要があります。これらのアクセス指示をユーザーに提供します。

**リポジトリのカスタマー管理ポリシーを作成します。**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. [**ダッシュボード**] ナビゲーションエリアで、[**ポリシー**] を選択し、次に [**ポリシーの作成**] を選択します。

1. [**ポリシーの作成**] ページで、[**Import managed policy (マネージドポリシーのインポート)**] を選択します。

1. [**Import managed policies (マネージドポリシーのインポート)**] ページの [**フィルタポリシー**] に「**AWSCodeCommitPowerUser**」と入力します。ポリシー名の横にあるボタンを選択し、[**インポート**] を選択します。

1. [**Create policy**] (ポリシーの作成) ページで [**JSON**] を選択します。次に示すように、CodeCommit アクションの `Resource` 行の「\$1」部分を、CodeCommit リポジトリの Amazon リソースネーム (ARN) に置き換えます。

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**ヒント**  
CodeCommit リポジトリの ARN を確認するには、CodeCommit コンソールに移動し、リストからリポジトリ名を選択して [**Settings**] (設定) を選択します。詳細については、「[ リポジトリの詳細の表示](how-to-view-repository-details.md)」を参照してください。

   このポリシーに複数のリポジトリを適用するには、リソースに ARN を指定して各リポジトリを追加します。次に示すように、各 Resource ステートメントはカンマで区切ります。

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
    "arn:aws:codecommit:us-east-2:111111111111:MyOtherDemoRepo"
    ]
   ```

   編集を完了したら、[**ポリシーの確認**] を選択します。

1. [**Review Policy**] (ポリシーの確認) ページの [**Name**] (名前) に、ポリシーの新しい名前 (例えば、*AWSCodeCommitPowerUser-MyDemoRepo*) を入力します。必要に応じて、このポリシーの説明を入力します。

1. [**ポリシーの作成**] を選択します。

リポジトリへのアクセスを管理するには、リポジトリユーザーの IAM グループを作成し、そのグループに IAM ユーザーを追加します。その後、前のステップで作成したカスタマー管理ポリシーをアタッチします。アクセスに必要なその他のポリシー (IAMUserSSHKeys または IAMSelfManageServiceSpecificCredentials など) をアタッチします。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. [**ダッシュボード**] ナビゲーションエリアで、[**グループ**] を選択し、次に [**Create New Group (新しいグループの作成)**] を選択します。

1. [**Set Group Name**] (グループ名の設定) ページの [**Group Name**] (グループ名) に、グループの名前 (例: *MyDemoRepoGroup*) を入力し、[**Next Step**] (次のステップ) を選択します。ここで、グループ名の一部として、リポジトリ名を含めることを検討してください。
**注記**  
この名前は、Amazon Web Services アカウント全体で一意である必要があります。

1. 前のセクションで作成したカスタマー管理ポリシー (例: **AWSCodeCommitPowerUser-MyDemoRepo**) の横にあるボックスをオンにします。

1. [**Review**] ページで、[**Create Group**] を選択します。IAM は、指定されたポリシーが既にアタッチされた状態でこのグループを作成します。このグループは、アマゾン ウェブ サービスアカウントに関連付けられたグループのリストに表示されます。

1. リストからグループを選択します。

1. グループの概要ページで、[**ユーザー**] タブを選択し、次に [**Add Users to Group (グループにユーザーを追加)**] を選択します。アマゾン ウェブ サービスアカウントに関連付けられているすべてのユーザーを示すリスト上で、CodeCommit リポジトリへのアクセスを許可するユーザーの横にあるボックスをオンにして、[**Add Users**] (ユーザーを追加) を選択します。
**ヒント**  
検索ボックスに名前を入力して、ユーザーをすばやく見つけることができます。

1. ユーザーの追加が完了したら、IAM コンソールを閉じます。

設定したポリシーグループとポリシーを使用して、CodeCommit にアクセスするための IAM ユーザーを作成したら、リポジトリへの接続に必要な情報をそのユーザーに送信します。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. リージョンセレクタで、リポジトリ AWS リージョン が作成された を選択します。リポジトリは に固有です AWS リージョン。詳細については、「[リージョンと Git 接続エンドポイント](regions.md)」を参照してください。

1. [**リポジトリ**] ページで、共有するリポジトリを選択します。

1. [**Clone URL**] で、ユーザーが使用するプロトコルを選択します。接続プロトコルのクローン URL がコピーされます。

1. のインストール、プロファイルの設定、Git のインストールなど AWS CLI、他の手順とともにクローン URL をユーザーに送信します。接続プロトコルの設定情報を含めるようにしてください (HTTPS など)。

# ローカルまたはバージョン管理されていないコンテンツを に移行する AWS CodeCommit
<a name="how-to-migrate-repository-local"></a>

このトピックの手順では、コンピュータ上の既存のプロジェクトまたはローカルのコンテンツを CodeCommit リポジトリに移行する方法について説明します。このプロセスの一環として、次の作業を行います。
+ CodeCommit に必要な初期セットアップを完了します。
+ CodeCommit リポジトリを作成します。
+ Git のバージョン管理対象になるローカルフォルダを配置し、そのフォルダの内容を CodeCommit リポジトリにプッシュします。
+ CodeCommit リポジトリ内のファイルを表示します。
+ CodeCommit リポジトリをチームと共有します。

![\[ローカルプロジェクトの CodeCommit への移行\]](http://docs.aws.amazon.com/ja_jp/codecommit/latest/userguide/images/codecommit-migrate-local.png)


**Topics**
+ [ステップ 0: CodeCommit へアクセスに必要なセットアップを行う](#how-to-migrate-local-setup)
+ [ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-local-create)
+ [ステップ 2: ローカルコンテンツを CodeCommit リポジトリに移行する](#how-to-migrate-local-version)
+ [ステップ 3: CodeCommit でファイルを表示する](#how-to-migrate-local-view)
+ [ステップ 4: CodeCommit リポジトリを共有する](#how-to-migrate-local-share)

## ステップ 0: CodeCommit へアクセスに必要なセットアップを行う
<a name="how-to-migrate-local-setup"></a>

ローカルコンテンツを CodeCommit に移行する前に、CodeCommit 用に IAM ユーザーを作成して設定し、アクセス用にローカルコンピュータを設定する必要があります。また、 AWS CLI をインストールして CodeCommit を管理する必要があります。ほとんどの CodeCommit タスクは CLI なしで実行できますが、 AWS CLI を使用することで Git での柔軟な作業が可能になります。

CodeCommit 用に既に設定されている場合は、[ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-local-create) にスキップできます。

**IAM ユーザーを作成および設定して CodeCommit にアクセスするには**

1. アマゾン ウェブ サービスアカウントを作成するには、[http://aws.amazon.com](https://aws.amazon.com/) にアクセスし、[**Sign Up**] (サインアップ) を選択します。

1. IAM ユーザーを作成するか、アマゾン ウェブ サービスアカウントに関連付けられた既存のユーザーを使用します。アクセスキー ID およびシークレットアクセスキーがその IAM ユーザーに関連付けられていることを確認します。詳細については、[アマゾン ウェブ サービスアカウントの IAM ユーザーの作成](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html)を参照してください。
**注記**  
CodeCommit には が必要です AWS Key Management Service。既存の IAM ユーザーを使用している場合は、CodeCommit に必要な AWS KMS アクションを明示的に拒否するポリシーがユーザーにアタッチされていないことを確認してください。詳細については、「[AWS KMS および 暗号化](encryption.md)」を参照してください。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. IAM コンソールのナビゲーションペインで、[**Users**] (ユーザー) を選択し、続いて、CodeCommit へアクセスするために設定する IAM ユーザーを選択します。

1. [**Permissions (アクセス許可)**] タブで、[**Add Permissions (アクセス許可の追加)**] を選択します。

1. [**Grant permissions (アクセス許可の付与)**] で、[**Attach existing policies directly (既存のポリシーを直接アタッチする)**] を選択します。

1. ポリシーの一覧から、[**AWSCodeCommitPowerUser**] または CodeCommit アクセスの別の管理ポリシーを選択します。詳細については、「[AWS CodeCommit の マネージドポリシー](security-iam-awsmanpol.md)」を参照してください。

   アタッチするポリシーを選択したら、[**Next: Review**] (次へ: 確認) を選択して、IAM ユーザーにアタッチするポリシーのリストを表示します。リストが正しい場合は、[**Add permissions (アクセス許可の追加)**] を選択します。

    CodeCommit 管理ポリシーや、その他のグループおよびユーザーを含むリポジトリへのアクセス共有の詳細については、[リポジトリの共有](how-to-share-repository.md) および [の認証とアクセスコントロール AWS CodeCommit](auth-and-access-control.md) を参照してください。

**をインストールして設定するには AWS CLI**

1. ローカルマシンで、 をダウンロードしてインストールします AWS CLI。これは、コマンドラインから CodeCommit とやり取りするための前提条件です。 AWS CLI バージョン 2 のインストールが推奨されます。これは の最新バージョン AWS CLI であり、すべての最新機能をサポートしています。これは、 でルートアカウント、フェデレーティッドアクセス、または一時的な認証情報の使用 AWS CLI をサポートする の唯一のバージョンです**git-remote-codecommit**。

   詳細については、[AWS 「 コマンドラインインターフェイスのセットアップ](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html)」を参照してください。
**注記**  
CodeCommit は AWS CLI バージョン 1.7.38 以降でのみ動作します。ベストプラクティスとして、 をインストールまたは最新バージョン AWS CLI にアップグレードします。インストール AWS CLI した のバージョンを確認するには、 **aws --version** コマンドを実行します。  
の古いバージョン AWS CLI を最新バージョンにアップグレードするには、[「 のインストール AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html)」を参照してください。

1. このコマンドを実行して、 の CodeCommit コマンド AWS CLI がインストールされていることを確認します。

   ```
   aws codecommit help
   ```

   このコマンドは、CodeCommit コマンドのリストを返します。

1. 次のように、 **configure** コマンドを使用して プロファイル AWS CLI で を設定します。

   ```
   aws configure
   ```

   プロンプトが表示されたら、CodeCommit で使用する IAM ユーザーの AWS アクセスキーと AWS シークレットアクセスキーを指定します。また、 など、リポジトリが存在する AWS リージョン を必ず指定してください`us-east-2`。デフォルトの出力形式の入力を求められたら、`json` を指定します。例えば、IAM ユーザーのプロファイルを設定する場合は、次のようにします。

   ```
   AWS Access Key ID [None]: Type your IAM user AWS access key ID here, and then press Enter
   AWS Secret Access Key [None]: Type your IAM user AWS secret access key here, and then press Enter
   Default region name [None]: Type a supported region for CodeCommit here, and then press Enter
   Default output format [None]: Type json here, and then press Enter
   ```

   で使用するプロファイルの作成と設定の詳細については AWS CLI、以下を参照してください。
   + [名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [での IAM ロールの使用 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Set コマンド](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [認証情報をローテーションして AWS CodeCommit リポジトリに接続する](temporary-access.md)

   別の のリポジトリまたはリソースに接続するには AWS リージョン、デフォルトのリージョン名 AWS CLI で を再設定する必要があります。CodeCommit でサポートされるデフォルトのリージョン名は以下のとおりです。
   + us-east-2
   + us-east-1
   + eu-west-1
   + us-west-2
   + ap-northeast-1
   + ap-southeast-1
   + ap-southeast-2
   + ap-southeast-3
   + me-central-1
   + eu-central-1
   + ap-northeast-2
   + sa-east-1
   + us-west-1
   + eu-west-2
   + ap-south-1
   + ap-south-1
   + ca-central-1
   + us-gov-west-1
   + us-gov-east-1
   + eu-north-1
   + ap-east-1
   + me-south-1
   + cn-north-1
   + cn-northwest-1
   + eu-south-1
   + ap-northeast-3
   + af-south-1
   + il-central-1

   CodeCommit と の詳細については AWS リージョン、「」を参照してください[リージョンと Git 接続エンドポイント](regions.md)。IAM、アクセスキー、シークレットキーに関する詳細については、[認証情報を取得する方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials)および [IAM ユーザーのアクセスキーの管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html)を参照してください。 AWS CLI および プロファイルの詳細については、[「名前付きプロファイル](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)」を参照してください。

次に、Git をインストールする必要があります。
+ **Linux、macOS、Unix の場合**:

  CodeCommit リポジトリのファイル、コミット、およびその他の情報を使用するには、ローカルマシンに Git をインストールする必要があります。CodeCommit は Git バージョン 1.7.9 以降をサポートしています。Git バージョン 2.28 は、初期コミットのブランチ名の設定をサポートしています。最新バージョンの Git を使用することをお勧めします。

  Git をインストールするには、[Git のダウンロード](http://git-scm.com/downloads)などのウェブサイトをお勧めします。
**注記**  
Git は、定期的に更新されている、発展中のプラットフォームです。機能の変更により、CodeCommit での動作が影響を受ける場合があります。特定のバージョンの Git と CodeCommit で問題が発生した場合は、 の情報を確認してください[トラブルシューティング](troubleshooting.md)
+ **Windows の場合:** 

  CodeCommit リポジトリのファイル、コミット、およびその他の情報を使用するには、ローカルマシンに Git をインストールする必要があります。CodeCommit は Git バージョン 1.7.9 以降をサポートしています。Git バージョン 2.28 は、初期コミットのブランチ名の設定をサポートしています。最新バージョンの Git を使用することをお勧めします。

  Git をインストールするには、[Git for Windows](https://gitforwindows.org/) などのウェブサイトをお勧めします。このリンクを使用して Git をインストールする場合、以下を除くすべてのインストールのデフォルト設定を使用できます。
  + [**Adjusting your PATH environment (PATH 環境の調整)**] ステップでプロンプトが表示されたら、[Use Git from the Windows Command Prompt (Windows コマンドプロンプトから Git を使用する)] オプションを選択します。
  + (オプション) CodeCommit の Git 認証情報を設定する AWS CLI 代わりに、 に含まれる認証情報ヘルパーで HTTPS を使用する場合は、**「追加のオプションの設定**」ページで、**Git 認証情報マネージャーを有効にする**オプションがオフになっていることを確認してください。Git 認証情報マネージャーは、IAM ユーザーが Git 認証情報を設定する場合のみ、CodeCommit と互換性があります。詳細については、「[Git 認証情報を使用した HTTPS ユーザーのセットアップ](setting-up-gc.md)」および「[Git for Windows: Git for Windows をインストールしましたが、リポジトリへのアクセスが拒否されます (403)](troubleshooting-ch.md#troubleshooting-windowshttps)」を参照してください。
**注記**  
Git は、定期的に更新されている、発展中のプラットフォームです。機能の変更により、CodeCommit での動作が影響を受ける場合があります。特定のバージョンの Git と CodeCommit で問題が発生した場合は、 の情報を確認してください[トラブルシューティング](troubleshooting.md)

CodeCommit は、HTTPS 認証と SSH 認証の両方をサポートしています。設定を完了するには、CodeCommit に使用する Git 認証情報 (HTTPS、ほとんどのユーザーに推奨)、CodeCommit へのアクセスに使用する SSH キーペア (SSH)、**git-remote-codecommit** (フェデレーティッドアクセスを使用するユーザーに推奨)、または AWS CLIに含まれる認証情報ヘルパーを設定する必要があります。
+ サポートされているオペレーティングシステムすべての Git の認証情報については、「[ステップ 3: CodeCommit への HTTPS 接続用の Git 認証情報を作成する](setting-up-gc.md#setting-up-gc-iam)」を参照してください。
+ Linux、macOS、または UNIX の SSH については、[SSH および Linux、macOS、または Unix: Git と CodeCommit 用にパブリックキーとプライベートキーをセットアップする](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes) を参照してください。
+  Windows での SSH については、「[ステップ 3: Git および CodeCommit 用のパブリックキーとプライベートキーをセットアップする](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows)」を参照してください。
+ **git-remote-codecommit** の場合は、「[git-remote-codecommit AWS CodeCommit を使用した への HTTPS 接続のセットアップ手順](setting-up-git-remote-codecommit.md)」を参照してください。
+ Linux、macOS、または Unix の認証情報ヘルパーについては、[認証情報ヘルパーを設定する (Linux、macOS、または Unix)](setting-up-https-unixes.md#setting-up-https-unixes-ch-config) を参照してください。
+ Windows での認証情報ヘルパーについては、「[認証情報ヘルパーをセットアップする (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config)」を参照してください。

## ステップ 1: CodeCommit リポジトリを作成する
<a name="how-to-migrate-local-create"></a>

このセクションでは、CodeCommit コンソールを使用して、このチュートリアルの残りの部分で使用する CodeCommit リポジトリを作成します。を使用してリポジトリ AWS CLI を作成するには、「」を参照してください[リポジトリを作成する (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli)。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. リージョンセレクタで、リポジトリ AWS リージョン を作成する を選択します。詳細については、「[リージョンと Git 接続エンドポイント](regions.md)」を参照してください。

1. [**Repositories (リポジトリ)**] ページで、[**Create repository (リポジトリの作成)**] を選択します。

1. [**Create repository (リポジトリの作成)**] ページの [**Repository name (リポジトリ名)**] に、リポジトリの名前を入力します。
**注記**  
リポジトリ名では大文字と小文字が区別されます。Amazon Web Services アカウントの名前は、 AWS リージョン 内で一意である必要があります。

1. (オプション) [**Description (説明)**] にリポジトリの説明を入力します。この説明は、お客様と他のユーザーがリポジトリの用途を識別するのに役立ちます。
**注記**  
コンソールの説明フィールドに [Markdown] と表示され、すべての HTML 文字とすべての有効な Unicode 文字を使用できます。アプリケーションデベロッパーとして `GetRepository` または `BatchGetRepositories` API を使用していて、ウェブブラウザにレポジトリの説明フィールドを表示させる場合は、[CodeCommit API リファレンス](https://docs.aws.amazon.com/codecommit/latest/APIReference/)を参照してください。

1. (オプション) **タグの追加** を選択して、1 つ以上のリポジトリタグ ( AWS リソースの整理と管理に役立つカスタム属性ラベル) をリポジトリに追加します。詳細については、「[でのリポジトリのタグ付け AWS CodeCommit](how-to-tag-repository.md)」を参照してください。

1. (オプション) **追加設定**を展開して、このリポジトリ内のデータの暗号化と復号にデフォルト AWS マネージドキー または独自のカスタマーマネージドキーを使用するかどうかを指定します。独自のカスタマーマネージドキーを使用する場合は、リポジトリを作成する AWS リージョン で使用可能であること、およびキーがアクティブであることを確認する必要があります。詳細については、「[AWS Key Management Service AWS CodeCommit および リポジトリの暗号化](encryption.md)」を参照してください。

1. (オプション) このリポジトリに Java または Python コードが含まれており、CodeGuru Reviewer で分析する場合は、[**Enable Amazon CodeGuru Reviewer for Java and Python**] (Java および Python 用に Amazon CodeGuru Reviewer を有効化) を選択します。CodeGuru Reviewer は、複数の機械学習モデルを使用して、コードの欠陥を検出し、プルリクエストの改善と修正を提案します。詳細については、[https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html)を参照してください。

1. **[作成]** を選択します。

作成されたリポジトリは、[**リポジトリ**] リストに表示されます。URL 列で、コピーアイコンを選択し、CodeCommit に接続するために使用するプロトコル (HTTPS または SSH) を選択します。URL をコピーします。

たとえば、リポジトリの名前を *MyFirstRepo* とし、HTTPS を使用している場合、URL は以下のようになります。

```
https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyFirstRepo
```

この URL は後で [ステップ 2: ローカルコンテンツを CodeCommit リポジトリに移行する](#how-to-migrate-local-version) で必要になります。

## ステップ 2: ローカルコンテンツを CodeCommit リポジトリに移行する
<a name="how-to-migrate-local-version"></a>

CodeCommit リポジトリを作成したので、ローカルコンピュータで Git リポジトリに変換するディレクトリを選択できます。**git init** コマンドは、既存のバージョン管理対象外のコンテンツを Git リポジトリに変換したり、ファイルやコンテンツがまだない場合は、新しい空のリポジトリを初期化したりするために使用できます。

1. ローカルコンピュータでターミナルまたはコマンドラインから、リポジトリのソースとして使用するディレクトリに移動します。

1. 次のコマンドを実行して、**main** という名前のデフォルトのブランチを使用するように Git を設定します。

   ```
   git config --local init.defaultBranch main
   ```

   このコマンドを実行して、新しく作成されたすべてのリポジトリについて、デフォルトのブランチ名を **main** に設定することもできます。

   ```
   git config --global init.defaultBranch main
   ```

1. **git init** コマンドを実行して、そのディレクトリで Git バージョン管理を初期化します。これにより、そのディレクトリのルートに .git サブディレクトリが作成され、バージョン管理の追跡が有効になります。.git フォルダには、リポジトリに必要なすべてのメタデータも含まれます。

   ```
   git init
   ```

1. 次のコマンドを実行して、初期化されたディレクトリのステータスを確認します。

   ```
   git status
   ```

   バージョン管理の対象にするファイルを追加します。このチュートリアルでは、`git add` 指定子を付けて `.` コマンドを実行し、すべてのファイルをこのディレクトリに追加します。他のオプションについては、Git のドキュメントを参照してください。

   ```
   git add .
   ```

1. 追加されたファイルのコミットとコミットメッセージを作成します。

   ```
   git commit -m "Initial commit"
   ```

1. 送信先 CodeCommit リポジトリの URL と名前、および **git push** オプションを指定して、`--all` コマンドを実行します。(ここで指定するのは、「[ステップ 1: CodeCommit リポジトリを作成する](#how-to-migrate-local-create)」でコピーした URL です)。

   たとえば、リポジトリに *MyFirstRepo* という名前を付け、HTTPS を使用するように設定している場合は、以下のコマンドを実行します。

   ```
   git push https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyFirstRepo --all
   ```

## ステップ 3: CodeCommit でファイルを表示する
<a name="how-to-migrate-local-view"></a>

ディレクトリの内容をプッシュした後、CodeCommit コンソールを使用して、そのリポジトリ内のすべてのファイルをすばやく表示できます。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. [**リポジトリ**] で、リストからリポジトリの名前 (例: *MyFirstRepository*) を選択します。

1. ブランチ、クローン URL、設定などのリポジトリ内のファイルを表示します。

## ステップ 4: CodeCommit リポジトリを共有する
<a name="how-to-migrate-local-share"></a>

CodeCommit でリポジトリを作成すると、HTTPS 接続用と SSH 接続用の 2 つのエンドポイントが生成されます。どちらもネットワーク経由で安全な接続を提供します。ユーザーは、いずれかのプロトコルを使用できます。両方のエンドポイントは、どのプロトコルをユーザーに推奨するにしてもアクティブのままです。リポジトリを他のユーザーと共有する前に、リポジトリへのアクセスを他のユーザーに許可する IAM ポリシーを作成する必要があります。これらのアクセス指示をユーザーに提供します。

**リポジトリのカスタマー管理ポリシーを作成します。**

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. [**ダッシュボード**] ナビゲーションエリアで、[**ポリシー**] を選択し、次に [**ポリシーの作成**] を選択します。

1. [**ポリシーの作成**] ページで、[**Import managed policy (マネージドポリシーのインポート)**] を選択します。

1. [**Import managed policies (マネージドポリシーのインポート)**] ページの [**フィルタポリシー**] に「**AWSCodeCommitPowerUser**」と入力します。ポリシー名の横にあるボタンを選択し、[**インポート**] を選択します。

1. [**Create policy**] (ポリシーの作成) ページで [**JSON**] を選択します。次に示すように、CodeCommit アクションの `Resource` 行の「\$1」部分を、CodeCommit リポジトリの Amazon リソースネーム (ARN) に置き換えます。

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**ヒント**  
CodeCommit リポジトリの ARN を確認するには、CodeCommit コンソールに移動し、リストからリポジトリ名を選択して [**Settings**] (設定) を選択します。詳細については、「[ リポジトリの詳細の表示](how-to-view-repository-details.md)」を参照してください。

   このポリシーに複数のリポジトリを適用するには、リソースに ARN を指定して各リポジトリを追加します。次に示すように、各 Resource ステートメントはカンマで区切ります。

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo",
    "arn:aws:codecommit:us-east-2:111111111111:MyOtherDemoRepo"
    ]
   ```

   編集を完了したら、[**ポリシーの確認**] を選択します。

1. [**Review Policy**] (ポリシーの確認) ページの [**Name**] (名前) に、ポリシーの新しい名前 (例えば、*AWSCodeCommitPowerUser-MyDemoRepo*) を入力します。必要に応じて、このポリシーの説明を入力します。

1. [**ポリシーの作成**] を選択します。

リポジトリへのアクセスを管理するには、リポジトリユーザーの IAM グループを作成し、そのグループに IAM ユーザーを追加します。その後、前のステップで作成したカスタマー管理ポリシーをアタッチします。アクセスに必要なポリシー (`IAMSelfManageServiceSpecificCredentials` または `IAMUserSSHKeys`) をアタッチします。

1. にサインイン AWS マネジメントコンソール し、[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) で IAM コンソールを開きます。

1. [**ダッシュボード**] ナビゲーションエリアで、[**グループ**] を選択し、次に [**Create New Group (新しいグループの作成)**] を選択します。

1. [**Set Group Name**] (グループ名の設定) ページの [**Group Name**] (グループ名) に、グループの名前 (例: *MyDemoRepoGroup*) を入力し、[**Next Step**] (次のステップ) を選択します。ここで、グループ名の一部として、リポジトリ名を含めることを検討してください。
**注記**  
この名前は、Amazon Web Services アカウント全体で一意である必要があります。

1. 前のセクションで作成したカスタマー管理ポリシー (例: **AWSCodeCommitPowerUser-MyDemoRepo**) の横にあるボックスをオンにします。

1. [**Review**] ページで、[**Create Group**] を選択します。IAM は、指定されたポリシーが既にアタッチされた状態でこのグループを作成します。このグループは、アマゾン ウェブ サービスアカウントに関連付けられたグループのリストに表示されます。

1. リストからグループを選択します。

1. グループの概要ページで、[**ユーザー**] タブを選択し、次に [**Add Users to Group (グループにユーザーを追加)**] を選択します。アマゾン ウェブ サービスアカウントに関連付けられているすべてのユーザーを示すリスト上で、CodeCommit リポジトリへのアクセスを許可するユーザーの横にあるボックスをオンにして、[**Add Users**] (ユーザーを追加) を選択します。
**ヒント**  
検索ボックスに名前を入力して、ユーザーをすばやく見つけることができます。

1. ユーザーの追加が完了したら、IAM コンソールを閉じます。

設定したポリシーグループとポリシーを使用して、CodeCommit へのアクセスに使用する IAM ユーザーを作成したら、リポジトリへの接続に必要な情報をそのユーザーに送信します。

1. [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home) で CodeCommit コンソールを開きます。

1. リージョンセレクタで、リポジトリ AWS リージョン が作成された を選択します。リポジトリは に固有です AWS リージョン。詳細については、「[リージョンと Git 接続エンドポイント](regions.md)」を参照してください。

1. [**リポジトリ**] ページで、共有するリポジトリを選択します。

1. [**Clone URL**] で、ユーザーが使用するプロトコルを選択します。接続プロトコルのクローン URL がコピーされます。

1. のインストール、プロファイルの設定、Git のインストールなど AWS CLI、他の手順とともにクローン URL をユーザーに送信します。接続プロトコルの設定情報を含めるようにしてください (HTTPS など)。

# リポジトリを段階的に移行する
<a name="how-to-push-large-repositories"></a>

に移行するときは AWS CodeCommit、断続的なネットワークの問題やネットワークパフォーマンスの低下によってプッシュ全体が失敗する可能性を減らすために、リポジトリを増分またはチャンクでプッシュすることを検討してください。次のようなスクリプトを使用して、段階的にプッシュすることで、移行を再開して、以前失敗したコミットのみプッシュすることができます。

このトピックの手順では、リポジトリの段階的な移行を行うスクリプトを作成して実行し、移行が完了するまで行われなかった段階的プッシュのみ再度行う方法について説明します。

これらの手順は、「[セットアップ ](setting-up.md)」および「[リポジトリの作成](how-to-create-repository.md)」のステップを既に完了していることを前提としています。

**Topics**
+ [ステップ 0: 段階的に移行するかどうかを決める](#how-to-push-large-repositories-determine)
+ [ステップ 1: 前提条件をインストールし、CodeCommit リポジトリをリモートとして追加する](#how-to-push-large-repositories-prereq)
+ [ステップ 2: 段階的移行に使用するスクリプトを作成する](#how-to-push-large-repositories-createscript)
+ [ステップ 3: スクリプトを実行し、CodeCommit に段階的に移行する](#how-to-push-large-repositories-runscript)
+ [付録: サンプルスクリプト `incremental-repo-migration.py`](#how-to-push-large-repositories-sample)

## ステップ 0: 段階的に移行するかどうかを決める
<a name="how-to-push-large-repositories-determine"></a>

リポジトリの全体サイズと段階的に移行するかどうかを決めるには、複数の要因を検討します。最も重要な要素は、リポジトリのアーティファクトの全体サイズです。リポジトリの累積履歴などの要素もサイズに関連します。各アセットのサイズは大きくなくても、長年の履歴を含むリポジトリやブランチのサイズは非常に大きくなります。これらのリポジトリの移行を単純にし、効率的にするための戦略は多数あります。たとえば、開発期間の長いリポジトリのクローン作成時に浅いクローン戦略を使用したり、大きなバイナリファイルの差分圧縮を無効にしたりできます。Git ドキュメントを確認してオプションを調査するか、段階的なプッシュをセットアップおよび設定して、このトピックのサンプルスクリプト `incremental-repo-migration.py` を使用してリポジトリを移行します。

以下の条件のいずれかに当てはまる場合は、段階的プッシュを設定します。
+ 移行するリポジトリの履歴に 5 年以上含まれる
+ インターネット接続は、断続的な停止や、削除されたパケットの中断、低速なレスポンスを招くだけでなく、その他のサービスへの停止にもつながります。
+ リポジトリの全体サイズが 2 GB を超えているため、リポジトリ全体を移行することを予定します。
+ リポジトリには、あまり圧縮されていない大きなアーティファクトやバイナリなどが含まれます。たとえば、追跡されたバージョンが 6 以上ある大きな画像ファイルがあります。
+ 過去に CodeCommit への移行を試みて、「内部サービスエラー」メッセージを受け取っています。

上記の条件のいずれも当てはまらない場合でも、段階的なプッシュを行うことができます。

## ステップ 1: 前提条件をインストールし、CodeCommit リポジトリをリモートとして追加する
<a name="how-to-push-large-repositories-prereq"></a>

独自のカスタムスクリプトを作成できます。これにより独自の前提条件を指定することができます。このトピックのサンプルを使用する場合は、次のことを行う必要があります。
+ 前提条件を満たすこと。
+ リポジトリのクローンをローカルコンピュータに作成します。
+ 移行するリポジトリのリモートとして、CodeCommit リポジトリを追加します。

**incremental-repo-migration.py をセットアップして実行する**

1.  ローカルコンピュータに Python 2.6 以降をインストールします。詳細と最新バージョンについては、「[Python ウェブサイト](https://www.python.org/downloads/)」を参照してください。

1. 同じコンピュータに GitPython をインストールします。これは、Git リポジトリと通信するために使用する Python ライブラリです。詳細については、「[GitPython ドキュメント](http://gitpython.readthedocs.org/en/stable/)」を参照してください。

1.  **git clone --mirror** コマンドでは、ローカルコンピュータに移行するリポジトリのクローンを作成します。ターミナル (Linux、macOS、または Unix) またはコマンドプロンプト (Windows) より、**git clone --mirror** コマンドを使用して、該当リポジトリのローカルリポジトリ (例: ローカルリポジトリを作成するディレクトリ) を作成します。たとえば、URL (*https://example.com/my-repo/*) を持つ Git リポジトリ (*MyMigrationRepo*) のクローンをディレクトリ (*my-repo*) に作成するには、以下のように行います。

   ```
   git clone --mirror https://example.com/my-repo/MyMigrationRepo.git my-repo
   ```

   次のような出力が表示されます。これは、リポジトリのクローンが、ローカルリポジトリ (my-repo) に作成されたことを表します。

   ```
   Cloning into bare repository 'my-repo'...
   remote: Counting objects: 20, done.
   remote: Compressing objects: 100% (17/17), done.
   remote: Total 20 (delta 5), reused 15 (delta 3)
   Unpacking objects: 100% (20/20), done.
   Checking connectivity... done.
   ```

1. クローンを作成したばかりのリポジトリのローカルリポジトリ (例: *my-repo*) にディレクトリを変更します。そのディレクトリから **git remote add *DefaultRemoteName* *RemoteRepositoryURL*** コマンドを使用し、ローカルリポジトリのリモートリポジトリとして CodeCommit リポジトリを追加します。
**注記**  
大きなリポジトリをプッシュする場合は、HTTPS ではなく SSH を使用することを検討してください。大きな変更、多数の変更、大きなリポジトリのいずれかをプッシュすると、ネットワーク問題またはファイアウォール設定が原因で、長時間の HTTPS 接続は切断されることがあります。SSH 用に CodeCommit を設定する詳しい方法については、[Linux、macOS、または Unix での SSH 接続の場合](setting-up-ssh-unixes.md) または [Windows で SSH 接続をセットアップする手順](setting-up-ssh-windows.md) を参照してください。

    例えば、MyDestinationRepo という名前の CodeCommit リポジトリの SSH エンドポイントを `codecommit` という名前のリモートのリモートリポジトリとして追加するには、次のコマンドを使用します。

   ```
   git remote add codecommit ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDestinationRepo
   ```
**ヒント**  
これはクローンのため、デフォルトのリモート名 (`origin`) は既に使用されています。別のリモート名を使用する必要があります。この例では `codecommit` を使用していますが、任意の名前を使用できます。**git remote show** コマンドでは、ローカルリポジトリに設定されているリモートを一覧表示します。

1. **git remote -v** コマンドでは、ローカルリポジトリのフェッチおよびプッシュの設定を表示し、これらの設定が正しいことを確認します。例: 

   ```
   codecommit  ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDestinationRepo (fetch)
   codecommit  ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDestinationRepo (push)
   ```
**ヒント**  
別のリモートリポジトリのフェッチおよびプッシュのエントリ (例: 送信元のエントリ) が依然として表示される場合は、**git remote set-url --delete** コマンドを使用してそれらのエントリを削除します。

## ステップ 2: 段階的移行に使用するスクリプトを作成する
<a name="how-to-push-large-repositories-createscript"></a>

これらのステップでは、サンプルスクリプト (`incremental-repo-migration.py`) が既に使用されていることを前提としています。

1. テキストエディタを開き、「[サンプルスクリプト](#how-to-push-large-repositories-sample)」の内容を空のドキュメントに貼り付けます。

1. そのドキュメントをドキュメントディレクトリ (ローカルリポジトリの作業ディレクトリではありません) に保存し、ファイル名を `incremental-repo-migration.py` に変更します。選択するディレクトリが、ローカル環境またはパス変数で設定されているディレクトリであることを確認します。これで、コマンドラインまたはターミナルより、Python スクリプトを実行できるようになりました。

## ステップ 3: スクリプトを実行し、CodeCommit に段階的に移行する
<a name="how-to-push-large-repositories-runscript"></a>

 以上で作成された `incremental-repo-migration.py` スクリプトを使用して、ローカルリポジトリを CodeCommit リポジトリに段階的に移行できます。デフォルトでは、スクリプトは 1,000 コミットのバッチを使用したコミットをプッシュし、ローカルリポジトリおよびリモートリポジトリの設定として実行されるディレクトリの Git 設定を使用します。必要に応じて、`incremental-repo-migration.py` のオプションを使用し、他の設定を行うことができます。

1. ターミナルまたはコマンドプロンプトより、移行するローカルリポジトリにディレクトリを変更します。

1. そのディレクトリから、次のコマンドを実行します。

   ```
   python incremental-repo-migration.py
   ```

1. スクリプトが実行され、ターミナルまたはコマンドプロンプトに進行状況が表示されます。リポジトリの大きさによっては、進行状況が遅れて表示される場合があります。単一プッシュが 3 度失敗すると、スクリプトは停止します。その後スクリプトを返します。失敗したバッチから開始できます。すべてのプッシュが継続し、移行が完了するまで、スクリプトを返すことができます。

**ヒント**  
`-l` および `-r` オプションで、使用するローカル設定およびリモート設定が指定されている限り、任意のディレクトリより `incremental-repo-migration.py` を実行できます。たとえば、任意のディレクトリよりスクリプトを使用して、/tmp/*my-repo* のローカルリポジトリをリモート (*codecommit*) に移行するには、次のように行います。  

```
python incremental-repo-migration.py -l "/tmp/my-repo" -r "codecommit" 
```
 また、`-b` オプションを使用して、段階的にプッシュする際に使用するデフォルトのバッチサイズを変更することもできます。たとえば、変更頻度の高い大きなバイナリファイルを含むリポジトリを定期的にプッシュし、ネットワーク帯域幅が制限された場所から操作する場合は、`-b` オプションを使用して、バッチサイズを 1,000 ではなく 500 に変更します。例:   

```
python incremental-repo-migration.py -b 500
```
これにより、ローカルリポジトリは、500 コミットのバッチを使用して、段階的にプッシュされます。リポジトリ移行時にバッチサイズを再度変更する場合 (例: 試行失敗時にバッチサイズを小さくする場合) は、`-b` を使用してバッチサイズをリセットする前に、`-c` オプションを使用してバッチタグを削除してください。  

```
python incremental-repo-migration.py -c
python incremental-repo-migration.py -b 250
```

**重要**  
失敗後にスクリプトを返す場合は、絶対に `-c` オプションを使用しないでください。`-c` オプションでは、コミットのバッチに使用するタグが削除されます。バッチサイズを変更して再開する場合、または今後スクリプトを使用しない場合は、`-c` オプションを使用します。

## 付録: サンプルスクリプト `incremental-repo-migration.py`
<a name="how-to-push-large-repositories-sample"></a>

参考用に、Python のサンプルスクリプト `incremental-repo-migration.py` を用意しています。このスクリプトでは、リポジトリを段階的にプッシュします。このスクリプトは、オープンソースコードのサンプルで、現状のまま提供されています。

```
# Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. Licensed under the Amazon Software License (the "License").
# You may not use this file except in compliance with the License. A copy of the License is located at
#    http://aws.amazon.com/asl/
# This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or implied. See the License for
# the specific language governing permissions and limitations under the License.

#!/usr/bin/env python

import os
import sys
from optparse import OptionParser
from git import Repo, TagReference, RemoteProgress, GitCommandError


class PushProgressPrinter(RemoteProgress):
    def update(self, op_code, cur_count, max_count=None, message=""):
        op_id = op_code & self.OP_MASK
        stage_id = op_code & self.STAGE_MASK
        if op_id == self.WRITING and stage_id == self.BEGIN:
            print("\tObjects: %d" % max_count)


class RepositoryMigration:
    MAX_COMMITS_TOLERANCE_PERCENT = 0.05
    PUSH_RETRY_LIMIT = 3
    MIGRATION_TAG_PREFIX = "codecommit_migration_"

    def migrate_repository_in_parts(
        self, repo_dir, remote_name, commit_batch_size, clean
    ):
        self.next_tag_number = 0
        self.migration_tags = []
        self.walked_commits = set()
        self.local_repo = Repo(repo_dir)
        self.remote_name = remote_name
        self.max_commits_per_push = commit_batch_size
        self.max_commits_tolerance = (
            self.max_commits_per_push * self.MAX_COMMITS_TOLERANCE_PERCENT
        )

        try:
            self.remote_repo = self.local_repo.remote(remote_name)
            self.get_remote_migration_tags()
        except (ValueError, GitCommandError):
            print(
                "Could not contact the remote repository. The most common reasons for this error are that the name of the remote repository is incorrect, or that you do not have permissions to interact with that remote repository."
            )
            sys.exit(1)

        if clean:
            self.clean_up(clean_up_remote=True)
            return

        self.clean_up()

        print("Analyzing repository")
        head_commit = self.local_repo.head.commit
        sys.setrecursionlimit(max(sys.getrecursionlimit(), head_commit.count()))

        # tag commits on default branch
        leftover_commits = self.migrate_commit(head_commit)
        self.tag_commits([commit for (commit, commit_count) in leftover_commits])

        # tag commits on each branch
        for branch in self.local_repo.heads:
            leftover_commits = self.migrate_commit(branch.commit)
            self.tag_commits([commit for (commit, commit_count) in leftover_commits])

        # push the tags
        self.push_migration_tags()

        # push all branch references
        for branch in self.local_repo.heads:
            print("Pushing branch %s" % branch.name)
            self.do_push_with_retries(ref=branch.name)

        # push all tags
        print("Pushing tags")
        self.do_push_with_retries(push_tags=True)

        self.get_remote_migration_tags()
        self.clean_up(clean_up_remote=True)

        print("Migration to CodeCommit was successful")

    def migrate_commit(self, commit):
        if commit in self.walked_commits:
            return []

        pending_ancestor_pushes = []
        commit_count = 1

        if len(commit.parents) > 1:
            # This is a merge commit
            # Ensure that all parents are pushed first
            for parent_commit in commit.parents:
                pending_ancestor_pushes.extend(self.migrate_commit(parent_commit))
        elif len(commit.parents) == 1:
            # Split linear history into individual pushes
            next_ancestor, commits_to_next_ancestor = self.find_next_ancestor_for_push(
                commit.parents[0]
            )
            commit_count += commits_to_next_ancestor
            pending_ancestor_pushes.extend(self.migrate_commit(next_ancestor))

        self.walked_commits.add(commit)

        return self.stage_push(commit, commit_count, pending_ancestor_pushes)

    def find_next_ancestor_for_push(self, commit):
        commit_count = 0

        # Traverse linear history until we reach our commit limit, a merge commit, or an initial commit
        while (
            len(commit.parents) == 1
            and commit_count < self.max_commits_per_push
            and commit not in self.walked_commits
        ):
            commit_count += 1
            self.walked_commits.add(commit)
            commit = commit.parents[0]

        return commit, commit_count

    def stage_push(self, commit, commit_count, pending_ancestor_pushes):
        # Determine whether we can roll up pending ancestor pushes into this push
        combined_commit_count = commit_count + sum(
            ancestor_commit_count
            for (ancestor, ancestor_commit_count) in pending_ancestor_pushes
        )

        if combined_commit_count < self.max_commits_per_push:
            # don't push anything, roll up all pending ancestor pushes into this pending push
            return [(commit, combined_commit_count)]

        if combined_commit_count <= (
            self.max_commits_per_push + self.max_commits_tolerance
        ):
            # roll up everything into this commit and push
            self.tag_commits([commit])
            return []

        if commit_count >= self.max_commits_per_push:
            # need to push each pending ancestor and this commit
            self.tag_commits(
                [
                    ancestor
                    for (ancestor, ancestor_commit_count) in pending_ancestor_pushes
                ]
            )
            self.tag_commits([commit])
            return []

        # push each pending ancestor, but roll up this commit
        self.tag_commits(
            [ancestor for (ancestor, ancestor_commit_count) in pending_ancestor_pushes]
        )
        return [(commit, commit_count)]

    def tag_commits(self, commits):
        for commit in commits:
            self.next_tag_number += 1
            tag_name = self.MIGRATION_TAG_PREFIX + str(self.next_tag_number)

            if tag_name not in self.remote_migration_tags:
                tag = self.local_repo.create_tag(tag_name, ref=commit)
                self.migration_tags.append(tag)
            elif self.remote_migration_tags[tag_name] != str(commit):
                print(
                    "Migration tags on the remote do not match the local tags. Most likely your batch size has changed since the last time you ran this script. Please run this script with the --clean option, and try again."
                )
                sys.exit(1)

    def push_migration_tags(self):
        print("Will attempt to push %d tags" % len(self.migration_tags))
        self.migration_tags.sort(
            key=lambda tag: int(tag.name.replace(self.MIGRATION_TAG_PREFIX, ""))
        )
        for tag in self.migration_tags:
            print(
                "Pushing tag %s (out of %d tags), commit %s"
                % (tag.name, self.next_tag_number, str(tag.commit))
            )
            self.do_push_with_retries(ref=tag.name)

    def do_push_with_retries(self, ref=None, push_tags=False):
        for i in range(0, self.PUSH_RETRY_LIMIT):
            if i == 0:
                progress_printer = PushProgressPrinter()
            else:
                progress_printer = None

            try:
                if push_tags:
                    infos = self.remote_repo.push(tags=True, progress=progress_printer)
                elif ref is not None:
                    infos = self.remote_repo.push(
                        refspec=ref, progress=progress_printer
                    )
                else:
                    infos = self.remote_repo.push(progress=progress_printer)

                success = True
                if len(infos) == 0:
                    success = False
                else:
                    for info in infos:
                        if (
                            info.flags & info.UP_TO_DATE
                            or info.flags & info.NEW_TAG
                            or info.flags & info.NEW_HEAD
                        ):
                            continue
                        success = False
                        print(info.summary)

                if success:
                    return
            except GitCommandError as err:
                print(err)

        if push_tags:
            print("Pushing all tags failed after %d attempts" % (self.PUSH_RETRY_LIMIT))
        elif ref is not None:
            print("Pushing %s failed after %d attempts" % (ref, self.PUSH_RETRY_LIMIT))
            print(
                "For more information about the cause of this error, run the following command from the local repo: 'git push %s %s'"
                % (self.remote_name, ref)
            )
        else:
            print(
                "Pushing all branches failed after %d attempts"
                % (self.PUSH_RETRY_LIMIT)
            )
        sys.exit(1)

    def get_remote_migration_tags(self):
        remote_tags_output = self.local_repo.git.ls_remote(
            self.remote_name, tags=True
        ).split("\n")
        self.remote_migration_tags = dict(
            (tag.split()[1].replace("refs/tags/", ""), tag.split()[0])
            for tag in remote_tags_output
            if self.MIGRATION_TAG_PREFIX in tag
        )

    def clean_up(self, clean_up_remote=False):
        tags = [
            tag
            for tag in self.local_repo.tags
            if tag.name.startswith(self.MIGRATION_TAG_PREFIX)
        ]

        # delete the local tags
        TagReference.delete(self.local_repo, *tags)

        # delete the remote tags
        if clean_up_remote:
            tags_to_delete = [":" + tag_name for tag_name in self.remote_migration_tags]
            self.remote_repo.push(refspec=tags_to_delete)


parser = OptionParser()
parser.add_option(
    "-l",
    "--local",
    action="store",
    dest="localrepo",
    default=os.getcwd(),
    help="The path to the local repo. If this option is not specified, the script will attempt to use current directory by default. If it is not a local git repo, the script will fail.",
)
parser.add_option(
    "-r",
    "--remote",
    action="store",
    dest="remoterepo",
    default="codecommit",
    help="The name of the remote repository to be used as the push or migration destination. The remote must already be set in the local repo ('git remote add ...'). If this option is not specified, the script will use 'codecommit' by default.",
)
parser.add_option(
    "-b",
    "--batch",
    action="store",
    dest="batchsize",
    default="1000",
    help="Specifies the commit batch size for pushes. If not explicitly set, the default is 1,000 commits.",
)
parser.add_option(
    "-c",
    "--clean",
    action="store_true",
    dest="clean",
    default=False,
    help="Remove the temporary tags created by migration from both the local repo and the remote repository. This option will not do any migration work, just cleanup. Cleanup is done automatically at the end of a successful migration, but not after a failure so that when you re-run the script, the tags from the prior run can be used to identify commit batches that were not pushed successfully.",
)

(options, args) = parser.parse_args()

migration = RepositoryMigration()
migration.migrate_repository_in_parts(
    options.localrepo, options.remoterepo, int(options.batchsize), options.clean
)
```