

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Migrer vers AWS CodeCommit
<a name="how-to-migrate-repository"></a>

Vous pouvez migrer un dépôt Git vers un CodeCommit dépôt de différentes manières : en le clonant, en le dupliquant, en migrant toutes les branches ou seulement certaines d'entre elles, etc. Vous pouvez également migrer un contenu local non versionné sur votre ordinateur vers CodeCommit.

Les rubriques suivantes vous montrent quelques-unes des méthodes que vous pouvez choisir pour migrer un référentiel. Vos étapes peuvent varier selon le type, le style ou la complexité de votre référentiel, et selon les décisions que vous prenez sur ce que vous voulez migrer et comment. Pour les référentiels très volumineux, vous pouvez envisager une [migration incrémentielle](how-to-push-large-repositories.md).

**Note**  
Vous pouvez effectuer une migration CodeCommit depuis d'autres systèmes de contrôle de version, tels que Perforce, Subversion ou TFS, mais vous devez d'abord migrer vers Git.   
Pour plus d'options, consultez votre documentation Git.  
Vous pouvez également consulter les informations sur la [migration vers Git](http://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git) dans le livre *Pro Git* de Scott Chacon et Ben Straub.

**Topics**
+ [Migrer un dépôt Git vers AWS CodeCommit](how-to-migrate-repository-existing.md)
+ [Migrer le contenu vers CodeCommit](how-to-migrate-repository-local.md)
+ [Migrer un référentiel par incréments](how-to-push-large-repositories.md)

# Migrer un dépôt Git vers AWS CodeCommit
<a name="how-to-migrate-repository-existing"></a>

Vous pouvez migrer un dépôt Git existant vers un CodeCommit dépôt. Les procédures décrites dans cette rubrique vous montrent comment migrer un projet hébergé sur un autre référentiel Git vers CodeCommit. Dans le cadre de ce processus, vous allez :
+ Effectuez la configuration initiale requise pour CodeCommit.
+ Créez un CodeCommit référentiel.
+ Clonez le dépôt et envoyez-le vers CodeCommit.
+ Afficher les fichiers dans le CodeCommit référentiel.
+ Partagez le CodeCommit référentiel avec votre équipe.

![\[Migration d'un dépôt Git vers CodeCommit\]](http://docs.aws.amazon.com/fr_fr/codecommit/latest/userguide/images/codecommit-migrate-existing.png)


**Topics**
+ [Étape 0 : Configuration requise pour accéder à CodeCommit](#how-to-migrate-existing-setup)
+ [Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-existing-create)
+ [Étape 2 : Cloner le référentiel et le transférer vers le CodeCommit référentiel](#how-to-migrate-existing-clone)
+ [Étape 3 : Afficher les fichiers dans CodeCommit](#how-to-migrate-existing-view)
+ [Étape 4 : partager le CodeCommit référentiel](#how-to-migrate-existing-share)

## Étape 0 : Configuration requise pour accéder à CodeCommit
<a name="how-to-migrate-existing-setup"></a>

Avant de pouvoir migrer un référentiel vers CodeCommit celui-ci, vous devez créer et configurer un utilisateur IAM CodeCommit et configurer l'accès à votre ordinateur local. Vous devez également installer l' AWS CLI pour gérer CodeCommit. Bien que vous puissiez effectuer la plupart des CodeCommit tâches sans lui, il AWS CLI offre de la flexibilité lorsque vous travaillez avec Git sur la ligne de commande ou sur le terminal. 

Si vous êtes déjà configuré pour CodeCommit, vous pouvez passer à[Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-existing-create).

**Pour créer et configurer un utilisateur IAM pour accéder CodeCommit**

1. Créez un compte Amazon Web Services en accédant à [http://aws.amazon.com](https://aws.amazon.com/) et en choisissant **S'inscrire**.

1. Créez un utilisateur IAM ou utilisez-en un existant dans votre compte Amazon Web Services. Assurez-vous que vous disposez d'un identifiant de clé d'accès et d'une clé d'accès secrète associés à cet utilisateur IAM. Pour plus d'informations, consultez [Création d'un utilisateur IAM dans votre compte Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html).
**Note**  
CodeCommit nécessite AWS Key Management Service. Si vous utilisez un utilisateur IAM existant, assurez-vous qu'aucune politique attachée à cet utilisateur ne refuse expressément les AWS KMS actions requises par CodeCommit. Pour de plus amples informations, veuillez consulter [AWS KMS et chiffrement](encryption.md).

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la console IAM, dans le volet de navigation, choisissez **Utilisateurs**, puis choisissez l'utilisateur IAM que vous souhaitez configurer pour CodeCommit l'accès.

1. Sous l'onglet **Autorisations**, choisissez **Ajouter des autorisations**. 

1. Pour **Accorder des autorisations**, choisissez **Attacher directement les stratégies existantes**.

1. Dans la liste des politiques, sélectionnez **AWSCodeCommitPowerUser**ou une autre politique gérée pour CodeCommit l'accès. Pour de plus amples informations, veuillez consulter [AWS politiques gérées pour CodeCommit](security-iam-awsmanpol.md).

   Après avoir sélectionné la politique que vous souhaitez joindre, choisissez **Next : Review** pour consulter la liste des politiques à associer à l'utilisateur IAM. Si la liste est correcte, choisissez **Add permissions**.

    Pour plus d'informations sur les politiques CodeCommit gérées et le partage de l'accès aux référentiels avec d'autres groupes et utilisateurs, consultez [Partage d'un référentiel](how-to-share-repository.md) et[Authentification et contrôle d'accès pour AWS CodeCommit](auth-and-access-control.md).

**Pour installer et configurer AWS CLI**

1. Sur votre ordinateur local, téléchargez et installez le AWS CLI. C'est une condition préalable pour interagir avec CodeCommit depuis la ligne de commande. Nous vous recommandons d'installer AWS CLI la version 2. Il s'agit de la version majeure la plus récente de AWS CLI et prend en charge toutes les dernières fonctionnalités. Il s'agit de la seule version AWS CLI qui prend en charge l'utilisation d'un compte root, d'un accès fédéré ou d'informations d'identification temporaires avec**git-remote-codecommit**.

   Pour plus d'informations, [voir Configuration avec l'interface de ligne de AWS commande](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html).
**Note**  
CodeCommit fonctionne uniquement avec AWS CLI les versions 1.7.38 et ultérieures. Il est recommandé d'installer ou de mettre AWS CLI à niveau la dernière version disponible. Pour déterminer la version AWS CLI que vous avez installée, exécutez la **aws --version** commande.  
Pour mettre à niveau une ancienne version du AWS CLI vers la dernière version, voir [Installation du AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).

1. Exécutez cette commande pour vérifier que les CodeCommit commandes correspondantes AWS CLI sont installées.

   ```
   aws codecommit help
   ```

   Cette commande renvoie une liste de CodeCommit commandes.

1. Configurez le AWS CLI avec un profil à l'aide de la **configure** commande, comme suit :.

   ```
   aws configure
   ```

   Lorsque vous y êtes invité, spécifiez la clé AWS d'accès et la clé d'accès AWS secrète de l'utilisateur IAM à utiliser avec CodeCommit. Assurez-vous également de spécifier l' Région AWS endroit où se trouve le référentiel, par exemple`us-east-2`. Lorsque vous êtes invité à saisir le format de sortie par défaut, entrez `json`. Par exemple, si vous configurez un profil pour un utilisateur 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
   ```

   Pour plus d'informations sur la création et la configuration de profils à utiliser avec le AWS CLI, consultez les rubriques suivantes :
   + [Profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [Utilisation d'un rôle IAM dans AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Définition de la commande](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [Connexion aux AWS CodeCommit référentiels avec des informations d'identification rotatives](temporary-access.md)

   Pour vous connecter à un référentiel ou à une ressource d'un autre Région AWS, vous devez le reconfigurer AWS CLI avec le nom de région par défaut. Les noms de région par défaut pris en charge CodeCommit incluent :
   + 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

   Pour plus d'informations sur CodeCommit et Région AWS, voir[Régions et points de terminaison de connexion Git](regions.md). Pour plus d'informations sur l'IAM, les clés d'accès et les clés secrètes, voir [Comment obtenir des informations d'identification](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials) ? et [Gestion des clés d'accès pour les utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html). Pour plus d'informations sur les profils AWS CLI et, consultez la section [Profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

Ensuite, vous devez installer Git. 
+ **Pour Linux, macOS ou Unix :**

  Pour utiliser des fichiers, des validations et d'autres informations dans CodeCommit des référentiels, vous devez installer Git sur votre machine locale. CodeCommit prend en charge les versions 1.7.9 et ultérieures de Git. La version 2.28 de Git prend en charge la configuration du nom de branche pour les validations initiales. Nous vous recommandons d'utiliser une version récente de Git.

  Pour installer Git, nous recommandons des sites Web tels que [Git Downloads](http://git-scm.com/downloads).
**Note**  
Git est une plateforme évolutive et régulièrement mise à jour. Parfois, une modification de fonctionnalité peut affecter la façon dont elle fonctionne avec CodeCommit. Si vous rencontrez des problèmes avec une version spécifique de Git CodeCommit, consultez les informations contenues dans[Résolution des problèmes](troubleshooting.md).
+ **Pour Windows:** 

  Pour utiliser des fichiers, des validations et d'autres informations dans CodeCommit des référentiels, vous devez installer Git sur votre machine locale. CodeCommit prend en charge les versions 1.7.9 et ultérieures de Git. La version 2.28 de Git prend en charge la configuration du nom de branche pour les validations initiales. Nous vous recommandons d'utiliser une version récente de Git.

  Pour installer Git, nous recommandons des sites Web tels que [Git pour Windows](https://gitforwindows.org/). Si vous utilisez ce lien pour installer Git, vous pouvez accepter tous les paramètres d'installation par défaut, à l'exception des suivants : 
  + Lorsque vous y êtes invité lors de l'étape **Ajuster votre environnement PATH**, choisissez l'option permettant d'utiliser Git depuis la ligne de commande.
  + (Facultatif) Si vous avez l'intention d'utiliser HTTPS avec l'assistant d'identification inclus dans le, AWS CLI au lieu de configurer les informations d'identification Git pour CodeCommit, sur la page **Configuration des options supplémentaires**, assurez-vous que l'option Activer le **gestionnaire d'informations d'identification Git** est désactivée. Le Git Credential Manager n'est compatible que CodeCommit si les utilisateurs IAM configurent les informations d'identification Git. Pour plus d’informations, consultez [Pour les utilisateurs HTTPS utilisant les informations d'identification Git](setting-up-gc.md) et [Git pour Windows : J'ai installé Git pour Windows, mais l'accès à mon référentiel m'est refusé (403)](troubleshooting-ch.md#troubleshooting-windowshttps).
**Note**  
Git est une plateforme évolutive et régulièrement mise à jour. Parfois, une modification de fonctionnalité peut affecter la façon dont elle fonctionne avec CodeCommit. Si vous rencontrez des problèmes avec une version spécifique de Git CodeCommit, consultez les informations contenues dans[Résolution des problèmes](troubleshooting.md).

CodeCommit prend en charge l'authentification HTTPS et SSH. Pour terminer la configuration, vous devez configurer les informations d'identification Git pour CodeCommit (HTTPS, recommandé pour la plupart des utilisateurs), une paire de clés SSH à utiliser lors de l'accès CodeCommit (SSH) **git-remote-codecommit** (recommandé pour les utilisateurs utilisant un accès fédéré) ou l'assistant d'identification inclus dans le (HTTPS). AWS CLI 
+ Pour définir les informations d'identification Git sur tous les systèmes d'exploitation pris en charge, consultez [Étape 3 : créer des informations d'identification Git pour les connexions HTTPS à CodeCommit](setting-up-gc.md#setting-up-gc-iam).
+ Pour le protocole SSH sous Linux, macOS ou Unix, consultez. [SSH et Linux, macOS ou Unix : configurez les clés publiques et privées pour Git et CodeCommit](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes)
+  Pour SSH sous Windows, consultez [Étape 3 : configurer les clés publiques et privées pour Git et CodeCommit](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows).
+ Pour **git-remote-codecommit**, veuillez consulter [Étapes de configuration pour les connexions HTTPS AWS CodeCommit avec git-remote-codecommit](setting-up-git-remote-codecommit.md).
+ Pour l'assistant d'identification sous Linux, macOS ou Unix, voir [Configurer l'assistant d'identification (Linux, macOS](setting-up-https-unixes.md#setting-up-https-unixes-ch-config) ou Unix).
+ Pour l'assistant d'informations d'identification sous Windows, consultez [Configuration de l'assistant d'informations d'identification (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config).

## Étape 1 : Création d'un CodeCommit référentiel
<a name="how-to-migrate-existing-create"></a>

Dans cette section, vous allez utiliser la CodeCommit console pour créer le CodeCommit référentiel que vous utiliserez pour le reste de ce didacticiel. Pour utiliser le AWS CLI pour créer le référentiel, reportez-vous à[Création d'un référentiel (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli).

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans le sélecteur de région, choisissez l' Région AWS endroit où vous souhaitez créer le référentiel. Pour de plus amples informations, veuillez consulter [Régions et points de terminaison de connexion Git](regions.md).

1. Dans la page **Référentiels**, choisissez **Créer un référentiel**. 

1. Sur la page **Créer un référentiel**, dans **Nom de référentiel**, saisissez un nom pour le référentiel.
**Note**  
Les noms de référentiel sont sensibles à la casse. Le nom doit être unique dans le nom Région AWS de votre compte Amazon Web Services.

1. (Facultatif) Dans la zone **Description**, saisissez une description pour le référentiel. Cela peut aider d'autres utilisateurs et vous-même à identifier la fonction du référentiel. 
**Note**  
Le champ de description affiche Markdown dans la console et accepte tous les caractères HTML et les caractères Unicode valides. Si vous êtes un développeur d'applications qui utilise le `GetRepository` ou `BatchGetRepositories` APIs et que vous envisagez d'afficher le champ de description du référentiel dans un navigateur Web, consultez la [référence des CodeCommit API](https://docs.aws.amazon.com/codecommit/latest/APIReference/).

1. (Facultatif) Choisissez **Ajouter une balise** pour ajouter une ou plusieurs balises de référentiel (étiquette d'attribut personnalisée qui vous aide à organiser et à gérer vos AWS ressources) à votre référentiel. Pour de plus amples informations, veuillez consulter [Marquage des référentiels dans AWS CodeCommit](how-to-tag-repository.md).

1. (Facultatif) Développez **la configuration supplémentaire** pour indiquer si vous souhaitez utiliser la clé par défaut Clé gérée par AWS ou la clé gérée par le client pour chiffrer et déchiffrer les données de ce référentiel. Si vous choisissez d'utiliser votre propre clé gérée par le client, vous devez vous assurer qu'elle est disponible Région AWS là où vous créez le référentiel et que la clé est active. Pour de plus amples informations, veuillez consulter [AWS Key Management Service et chiffrement pour les AWS CodeCommit référentiels](encryption.md).

1. (Facultatif) Sélectionnez **Activer Amazon CodeGuru Reviewer pour Java et Python** si ce référentiel contient du code Java ou Python et que vous souhaitez que CodeGuru Reviewer l'analyse. CodeGuru Reviewer utilise plusieurs modèles d'apprentissage automatique pour détecter les défauts du code et suggérer des améliorations et des corrections dans les pull requests. Pour plus d'informations, consultez le [https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html).

1. Choisissez **Créer**. 

![\[Création d'un dépôt pour la migration d'un dépôt Git vers CodeCommit\]](http://docs.aws.amazon.com/fr_fr/codecommit/latest/userguide/images/codecommit-create-repo-migrate-existing.png)


Une fois qu'il a été créé, le référentiel s'affiche dans la liste **Référentiels**. Dans la colonne URL, sélectionnez l'icône de copie, puis choisissez le protocole (SSH ou HTTPS) à utiliser pour vous connecter à CodeCommit. Copiez l’URL.

Par exemple, si vous avez nommé votre dépôt *MyClonedRepository* et que vous utilisez les informations d'identification Git avec HTTPS dans la région USA Est (Ohio), l'URL ressemble à ce qui suit :

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

Vous aurez besoin de cette URL plus tard dans [Étape 2 : Cloner le référentiel et le transférer vers le CodeCommit référentiel](#how-to-migrate-existing-clone).

## Étape 2 : Cloner le référentiel et le transférer vers le CodeCommit référentiel
<a name="how-to-migrate-existing-clone"></a>

Dans cette section, vous allez cloner un référentiel Git sur votre ordinateur local, en créant ce qu'on appelle un référentiel local. Vous pouvez ensuite transférer le contenu du dépôt local vers le CodeCommit référentiel que vous avez créé précédemment.

1. À partir du terminal ou de l'invite de commande de votre ordinateur local, exécutez la **git clone** commande avec l'`--mirror`option de cloner une copie vierge du référentiel distant dans un nouveau dossier nommé*aws-codecommit-demo*. Cette copie est uniquement destinée à la migration. Il ne s'agit pas du dépôt local dans lequel interagir avec le référentiel migré. CodeCommit Vous pourrez le créer ultérieurement, une fois la migration CodeCommit terminée.

   L'exemple suivant clone une application de démonstration hébergée sur GitHub (*https://github.com/awslabs/aws-demo-php-simple-app.git*) vers un dépôt local dans un répertoire nommé. *aws-codecommit-demo* 

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

1. Placez-vous dans le répertoire où vous avez créé le clone.

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

1. Exécutez la **git push** commande en spécifiant l'URL et le nom du CodeCommit référentiel de destination ainsi que l'**--all**option. (Il s'agit de l'URL que vous avez copiée dans [Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-existing-create).)

   Par exemple, si vous avez nommé votre dépôt *MyClonedRepository* et que vous êtes configuré pour utiliser le protocole HTTPS, vous devez exécuter la commande suivante :

   ```
   git push https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --all
   ```
**Note**  
L'option **--all** transfère uniquement l'ensemble des branches du référentiel. Elle ne transfère aucune autre référence, comme les balises. Si vous souhaitez transférer les balises, attendez que le transfert initial soit terminé, puis relancez un transfert en utilisant cette fois l'option **--tags** :  

   ```
   git push ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --tags
   ```
Pour plus d'informations, consultez [Git push](https://git-scm.com/docs/git-push) sur le site web de Git. Pour en savoir plus sur le transfert de référentiels volumineux, en particulier si vous transférez toutes les références à la fois (par exemple, avec l'option **--mirror**), consultez la section [Migrer un référentiel par incréments](how-to-push-large-repositories.md).

Vous pouvez supprimer le *aws-codecommit-demo* dossier et son contenu après avoir migré le référentiel vers CodeCommit. Pour créer un dépôt local contenant toutes les références correctes pour travailler avec le référentiel CodeCommit, exécutez la `git clone` commande sans l'`--mirror`option :

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

## Étape 3 : Afficher les fichiers dans CodeCommit
<a name="how-to-migrate-existing-view"></a>

Après avoir transféré le contenu de votre répertoire, vous pouvez utiliser la CodeCommit console pour afficher rapidement tous les fichiers de ce référentiel.

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans **Référentiels**, choisissez le nom du référentiel (par exemple,*MyClonedRepository*). 

1. Affichez les fichiers du référentiel pour les branches, le clone URLs, les paramètres, etc.  
![\[Vue d'un dépôt cloné dans CodeCommit\]](http://docs.aws.amazon.com/fr_fr/codecommit/latest/userguide/images/codecommit-cloned-repo-url.png)

## Étape 4 : partager le CodeCommit référentiel
<a name="how-to-migrate-existing-share"></a>

Lorsque vous créez un référentiel dans CodeCommit, deux points de terminaison sont générés : un pour les connexions HTTPS et un pour les connexions SSH. Les deux fournissent des connexions sécurisées sur un réseau. Vos utilisateurs peuvent utiliser l'un ou l'autre de ces protocoles. Les deux points de terminaison restent actifs, quel que soit le protocole que vous recommandez à vos utilisateurs. Avant de partager votre référentiel avec d'autres utilisateurs, vous devez créer des politiques IAM permettant aux autres utilisateurs d'accéder à votre référentiel. Fournissez ces instructions d'accès à vos utilisateurs. 

**Création d'une stratégie gérée par le client pour votre référentiel**

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la zone de navigation de **Dashboard**, choisissez **Stratégies**, puis **Créer une stratégie**. 

1. Sur la page **Créer une politique**, choisissez **Importer une stratégie gérée**.

1. Sur la page **Importer des politiques gérées**, dans **Politiques de filtrage**, entrez**AWSCodeCommitPowerUser**. Cliquez sur le bouton à côté du nom de la politique, puis choisissez **Importer**.

1. Sur la page **Créer une politique**, choisissez **JSON**. Remplacez la partie « \$1 » de la `Resource` ligne pour CodeCommit les actions par le Amazon Resource Name (ARN) du CodeCommit référentiel, comme indiqué ici :

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**Astuce**  
Pour trouver l'ARN du CodeCommit référentiel, accédez à la CodeCommit console, choisissez le nom du référentiel dans la liste, puis sélectionnez **Paramètres**. Pour de plus amples informations, veuillez consulter [Afficher les détails du référentiel](how-to-view-repository-details.md).

   Si vous souhaitez que cette stratégie s'applique à plusieurs référentiels, ajoutez chaque référentiel en tant que ressource en spécifiant son ARN. Incluez une virgule entre chaque instruction de ressource, comme illustré ici :

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

   Lorsque vous avez terminé de modifier, choisissez la **politique de révision**.

1. Sur la page **Révision de la politique**, dans **Nom**, entrez un nouveau nom pour la politique (par exemple,*AWSCodeCommitPowerUser-MyDemoRepo*). Fournissez éventuellement une description de cette politique.

1. Choisissez **Create Policy** (Créer une politique).

Pour gérer l'accès à votre référentiel, créez un groupe IAM pour ses utilisateurs, ajoutez des utilisateurs IAM à ce groupe, puis attachez la politique gérée par le client que vous avez créée à l'étape précédente. Joignez toute autre politique requise pour l'accès, telle que IAMUser SSHKeys ouIAMSelfManageServiceSpecificCredentials. 

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la zone de navigation de **Dashboard**, sélectionnez **Groupes**, puis **Créer un groupe**. 

1. Sur la page **Définir un nom de groupe**, dans la zone **Nom du groupe**, saisissez un nom pour le groupe (par exemple, *MyDemoRepoGroup*), puis sélectionnez **Étape suivante**. Vous pouvez inclure le nom du référentiel comme partie du nom du groupe.
**Note**  
Ce nom doit être unique sur un compte Amazon Web Services.

1. Cochez la case à côté de la politique gérée par le client que vous avez créée dans la section précédente (par exemple, **AWSCodeCommitPowerUser-MyDemoRepo**). 

1. Sur la page **Vérifier**, choisissez **Créer un groupe**. IAM crée ce groupe avec les politiques spécifiées déjà attachées. Le groupe apparaît dans la liste des groupes associés à votre compte Amazon Web Services.

1. Choisissez votre groupe dans la liste. 

1. Sur la page récapitulative du groupe, sélectionnez l'onglet **Utilisateurs**, puis **Ajouter des utilisateurs au groupe**. Dans la liste qui répertorie tous les utilisateurs associés à votre compte Amazon Web Services, cochez les cases à côté des utilisateurs auxquels vous souhaitez autoriser l'accès au CodeCommit référentiel, puis choisissez **Ajouter des utilisateurs**.
**Astuce**  
Vous pouvez utiliser la zone de recherche pour trouver rapidement des utilisateurs par leur nom.

1. Lorsque vous avez ajouté vos utilisateurs, fermez la console IAM.

Après avoir créé un utilisateur IAM auquel il pourra accéder à CodeCommit l'aide du groupe de règles et des politiques que vous avez configurés, envoyez à cet utilisateur les informations requises pour se connecter au référentiel.

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans le sélecteur de région, choisissez l' Région AWS endroit où le référentiel a été créé. Les référentiels sont spécifiques à un Région AWS. Pour de plus amples informations, veuillez consulter [Régions et points de terminaison de connexion Git](regions.md).

1. Sur la page **Repositories (Référentiels)**, choisissez le référentiel à partager. 

1. Dans **Clone URL (URL de clone)**, choisissez le protocole que vos utilisateurs doivent employer. Cette fonction copie l'URL de clone pour le protocole de connexion. 

1. Envoyez à vos utilisateurs l'URL du clone ainsi que toute autre instruction, telle que l'installation AWS CLI, la configuration d'un profil ou l'installation de Git. Assurez-vous d'inclure les informations de configuration pour le protocole de connexion (par exemple, HTTPS). 

# Migrer du contenu local ou non versionné vers AWS CodeCommit
<a name="how-to-migrate-repository-local"></a>

Les procédures décrites dans cette rubrique vous montrent comment migrer un projet existant ou du contenu local de votre ordinateur vers un CodeCommit référentiel. Dans le cadre de ce processus, vous allez :
+ Effectuez la configuration initiale requise pour CodeCommit.
+ Créez un CodeCommit référentiel.
+ Placez un dossier local sous le contrôle de version Git et transférez le contenu de ce dossier vers le CodeCommit référentiel.
+ Afficher les fichiers dans le CodeCommit référentiel.
+ Partagez le CodeCommit référentiel avec votre équipe.

![\[Migration d'un projet local vers CodeCommit\]](http://docs.aws.amazon.com/fr_fr/codecommit/latest/userguide/images/codecommit-migrate-local.png)


**Topics**
+ [Étape 0 : Configuration requise pour accéder à CodeCommit](#how-to-migrate-local-setup)
+ [Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-local-create)
+ [Étape 2 : migrer le contenu local vers le CodeCommit référentiel](#how-to-migrate-local-version)
+ [Étape 3 : Afficher les fichiers dans CodeCommit](#how-to-migrate-local-view)
+ [Étape 4 : partager le CodeCommit référentiel](#how-to-migrate-local-share)

## Étape 0 : Configuration requise pour accéder à CodeCommit
<a name="how-to-migrate-local-setup"></a>

Avant de pouvoir migrer du contenu local vers CodeCommit, vous devez créer et configurer un utilisateur IAM CodeCommit et configurer l'accès à votre ordinateur local. Vous devez également installer l' AWS CLI pour gérer CodeCommit. Bien que vous puissiez effectuer la plupart des CodeCommit tâches sans lui, il AWS CLI offre de la flexibilité lorsque vous travaillez avec Git. 

Si vous êtes déjà configuré pour CodeCommit, vous pouvez passer à[Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-local-create).

**Pour créer et configurer un utilisateur IAM pour accéder CodeCommit**

1. Créez un compte Amazon Web Services en accédant à [http://aws.amazon.com](https://aws.amazon.com/) et en choisissant **S'inscrire**.

1. Créez un utilisateur IAM ou utilisez-en un existant dans votre compte Amazon Web Services. Assurez-vous que vous disposez d'un identifiant de clé d'accès et d'une clé d'accès secrète associés à cet utilisateur IAM. Pour plus d'informations, consultez [Création d'un utilisateur IAM dans votre compte Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html).
**Note**  
CodeCommit nécessite AWS Key Management Service. Si vous utilisez un utilisateur IAM existant, assurez-vous qu'aucune politique attachée à cet utilisateur ne refuse expressément les AWS KMS actions requises par CodeCommit. Pour de plus amples informations, veuillez consulter [AWS KMS et chiffrement](encryption.md).

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la console IAM, dans le volet de navigation, choisissez **Utilisateurs**, puis choisissez l'utilisateur IAM que vous souhaitez configurer pour CodeCommit l'accès.

1. Sous l'onglet **Autorisations**, choisissez **Ajouter des autorisations**. 

1. Pour **Accorder des autorisations**, choisissez **Attacher directement les stratégies existantes**.

1. Dans la liste des politiques, sélectionnez **AWSCodeCommitPowerUser**ou une autre politique gérée pour CodeCommit l'accès. Pour de plus amples informations, veuillez consulter [AWS politiques gérées pour CodeCommit](security-iam-awsmanpol.md).

   Après avoir sélectionné la politique que vous souhaitez joindre, choisissez **Next : Review** pour consulter la liste des politiques à associer à l'utilisateur IAM. Si la liste est correcte, choisissez **Add permissions**.

    Pour plus d'informations sur les politiques CodeCommit gérées et le partage de l'accès aux référentiels avec d'autres groupes et utilisateurs, consultez [Partage d'un référentiel](how-to-share-repository.md) et[Authentification et contrôle d'accès pour AWS CodeCommit](auth-and-access-control.md).

**Pour installer et configurer le AWS CLI**

1. Sur votre ordinateur local, téléchargez et installez le AWS CLI. C'est une condition préalable pour interagir avec CodeCommit depuis la ligne de commande. Nous vous recommandons d'installer AWS CLI la version 2. Il s'agit de la version majeure la plus récente de AWS CLI et prend en charge toutes les dernières fonctionnalités. Il s'agit de la seule version AWS CLI qui prend en charge l'utilisation d'un compte root, d'un accès fédéré ou d'informations d'identification temporaires avec**git-remote-codecommit**.

   Pour plus d'informations, consultez la section [Configuration à l'aide de l'interface de ligne de AWS commande](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html).
**Note**  
CodeCommit fonctionne uniquement avec AWS CLI les versions 1.7.38 et ultérieures. Il est recommandé d'installer ou de mettre AWS CLI à niveau la dernière version disponible. Pour déterminer la version AWS CLI que vous avez installée, exécutez la **aws --version** commande.  
Pour effectuer la mise à niveau d'une ancienne version du AWS CLI vers la dernière version, consultez la section [Installation du AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html).

1. Exécutez cette commande pour vérifier que les CodeCommit commandes correspondantes AWS CLI sont installées.

   ```
   aws codecommit help
   ```

   Cette commande renvoie une liste de CodeCommit commandes.

1. Configurez le AWS CLI avec un profil à l'aide de la **configure** commande, comme suit :.

   ```
   aws configure
   ```

   Lorsque vous y êtes invité, spécifiez la clé AWS d'accès et la clé d'accès AWS secrète de l'utilisateur IAM à utiliser avec CodeCommit. Assurez-vous également de spécifier l' Région AWS endroit où se trouve le référentiel, par exemple`us-east-2`. Lorsque vous êtes invité à saisir le format de sortie par défaut, entrez `json`. Par exemple, si vous configurez un profil pour un utilisateur 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
   ```

   Pour plus d'informations sur la création et la configuration de profils à utiliser avec le AWS CLI, consultez les rubriques suivantes :
   + [Profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [Utilisation d'un rôle IAM dans AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Définition de la commande](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [Connexion aux AWS CodeCommit référentiels avec des informations d'identification rotatives](temporary-access.md)

   Pour vous connecter à un référentiel ou à une ressource d'un autre Région AWS, vous devez le reconfigurer AWS CLI avec le nom de région par défaut. Les noms de région par défaut pris en charge CodeCommit incluent :
   + 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

   Pour plus d'informations sur CodeCommit et Région AWS, voir[Régions et points de terminaison de connexion Git](regions.md). Pour plus d'informations sur l'IAM, les clés d'accès et les clés secrètes, voir [Comment obtenir des informations d'identification](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials) ? et [Gestion des clés d'accès pour les utilisateurs IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html). Pour plus d'informations sur les profils AWS CLI et, consultez la section [Profils nommés](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

Ensuite, vous devez installer Git. 
+ **Pour Linux, macOS ou Unix :**

  Pour utiliser des fichiers, des validations et d'autres informations dans CodeCommit des référentiels, vous devez installer Git sur votre machine locale. CodeCommit prend en charge les versions 1.7.9 et ultérieures de Git. La version 2.28 de Git permet de configurer le nom de branche pour les validations initiales. Nous vous recommandons d'utiliser une version récente de Git.

  Pour installer Git, nous recommandons des sites Web tels que [Git Downloads](http://git-scm.com/downloads).
**Note**  
Git est une plateforme évolutive et régulièrement mise à jour. Parfois, une modification de fonctionnalité peut affecter son fonctionnement CodeCommit. Si vous rencontrez des problèmes avec une version spécifique de Git CodeCommit, consultez les informations contenues dans[Résolution des problèmes](troubleshooting.md).
+ **Pour Windows:** 

  Pour utiliser des fichiers, des validations et d'autres informations dans CodeCommit des référentiels, vous devez installer Git sur votre machine locale. CodeCommit prend en charge les versions 1.7.9 et ultérieures de Git. La version 2.28 de Git permet de configurer le nom de branche pour les validations initiales. Nous vous recommandons d'utiliser une version récente de Git.

  Pour installer Git, nous recommandons des sites Web tels que [Git pour Windows](https://gitforwindows.org/). Si vous utilisez ce lien pour installer Git, vous pouvez accepter tous les paramètres d'installation par défaut, à l'exception des suivants : 
  + Lorsque vous y êtes invité lors de l'étape **Ajuster votre environnement PATH**, choisissez l'option permettant d'utiliser Git depuis la ligne de commande.
  + (Facultatif) Si vous avez l'intention d'utiliser HTTPS avec l'assistant d'identification inclus dans le, AWS CLI au lieu de configurer les informations d'identification Git pour CodeCommit, sur la page **Configuration des options supplémentaires**, assurez-vous que l'option Activer le **gestionnaire d'informations d'identification Git** est désactivée. Le Git Credential Manager n'est compatible que CodeCommit si les utilisateurs IAM configurent les informations d'identification Git. Pour plus d’informations, consultez [Pour les utilisateurs HTTPS utilisant les informations d'identification Git](setting-up-gc.md) et [Git pour Windows : J'ai installé Git pour Windows, mais l'accès à mon référentiel m'est refusé (403)](troubleshooting-ch.md#troubleshooting-windowshttps).
**Note**  
Git est une plateforme évolutive et régulièrement mise à jour. Parfois, une modification de fonctionnalité peut affecter son fonctionnement CodeCommit. Si vous rencontrez des problèmes avec une version spécifique de Git CodeCommit, consultez les informations contenues dans[Résolution des problèmes](troubleshooting.md).

CodeCommit prend en charge l'authentification HTTPS et SSH. Pour terminer la configuration, vous devez configurer les informations d'identification Git pour CodeCommit (HTTPS, recommandé pour la plupart des utilisateurs), une paire de clés SSH (SSH) à utiliser lors de l'accès CodeCommit **git-remote-codecommit** (recommandée pour les utilisateurs utilisant un accès fédéré) ou l'assistant d'identification inclus dans le. AWS CLI
+ Pour définir les informations d'identification Git sur tous les systèmes d'exploitation pris en charge, consultez [Étape 3 : créer des informations d'identification Git pour les connexions HTTPS à CodeCommit](setting-up-gc.md#setting-up-gc-iam).
+ Pour SSH sous Linux, macOS ou Unix, consultez. [SSH et Linux, macOS ou Unix : configurez les clés publiques et privées pour Git et CodeCommit](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes)
+  Pour SSH sous Windows, consultez [Étape 3 : configurer les clés publiques et privées pour Git et CodeCommit](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows).
+ Pour **git-remote-codecommit**, veuillez consulter [Étapes de configuration pour les connexions HTTPS AWS CodeCommit avec git-remote-codecommit](setting-up-git-remote-codecommit.md).
+ Pour l'assistant d'identification sous Linux, macOS ou Unix, voir [Configurer l'assistant d'identification (Linux, macOS](setting-up-https-unixes.md#setting-up-https-unixes-ch-config) ou Unix).
+ Pour l'assistant d'informations d'identification sous Windows, consultez [Configuration de l'assistant d'informations d'identification (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config).

## Étape 1 : Création d'un CodeCommit référentiel
<a name="how-to-migrate-local-create"></a>

Dans cette section, vous allez utiliser la CodeCommit console pour créer le CodeCommit référentiel que vous utiliserez pour le reste de ce didacticiel. Pour utiliser le AWS CLI pour créer le référentiel, reportez-vous à[Création d'un référentiel (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli).

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans le sélecteur de région, choisissez l' Région AWS endroit où vous souhaitez créer le référentiel. Pour de plus amples informations, veuillez consulter [Régions et points de terminaison de connexion Git](regions.md).

1. Dans la page **Référentiels**, choisissez **Créer un référentiel**. 

1. Sur la page **Créer un référentiel**, dans **Nom de référentiel**, saisissez un nom pour le référentiel.
**Note**  
Les noms de référentiel sont sensibles à la casse. Le nom doit être unique dans le nom Région AWS de votre compte Amazon Web Services.

1. (Facultatif) Dans la zone **Description**, saisissez une description pour le référentiel. Cela peut aider d'autres utilisateurs et vous-même à identifier la fonction du référentiel. 
**Note**  
Le champ de description affiche Markdown dans la console et accepte tous les caractères HTML et les caractères Unicode valides. Si vous êtes un développeur d'applications qui utilise le `GetRepository` ou `BatchGetRepositories` APIs et que vous envisagez d'afficher le champ de description du référentiel dans un navigateur Web, consultez la [référence des CodeCommit API](https://docs.aws.amazon.com/codecommit/latest/APIReference/).

1. (Facultatif) Choisissez **Ajouter une balise** pour ajouter une ou plusieurs balises de référentiel (étiquette d'attribut personnalisée qui vous aide à organiser et à gérer vos AWS ressources) à votre référentiel. Pour de plus amples informations, veuillez consulter [Marquage des référentiels dans AWS CodeCommit](how-to-tag-repository.md).

1. (Facultatif) Développez **la configuration supplémentaire** pour indiquer si vous souhaitez utiliser la clé par défaut Clé gérée par AWS ou la clé gérée par le client pour chiffrer et déchiffrer les données de ce référentiel. Si vous choisissez d'utiliser votre propre clé gérée par le client, vous devez vous assurer qu'elle est disponible Région AWS là où vous créez le référentiel et que la clé est active. Pour de plus amples informations, veuillez consulter [AWS Key Management Service et chiffrement pour les AWS CodeCommit référentiels](encryption.md).

1. (Facultatif) Sélectionnez **Activer Amazon CodeGuru Reviewer pour Java et Python** si ce référentiel contient du code Java ou Python et que vous souhaitez que CodeGuru Reviewer l'analyse. CodeGuru Reviewer utilise plusieurs modèles d'apprentissage automatique pour détecter les défauts du code et suggérer des améliorations et des corrections dans les pull requests. Pour plus d'informations, consultez le [https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html).

1. Choisissez **Créer**. 

Une fois qu'il a été créé, le référentiel s'affiche dans la liste **Référentiels**. Dans la colonne URL, sélectionnez l'icône de copie, puis choisissez le protocole (SSH ou HTTPS) à utiliser pour vous connecter à CodeCommit. Copiez l’URL.

Par exemple, si vous avez nommé votre dépôt *MyFirstRepo* et que vous utilisez le protocole HTTPS, l'URL ressemblera à ce qui suit :

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

Vous aurez besoin de cette URL plus tard dans [Étape 2 : migrer le contenu local vers le CodeCommit référentiel](#how-to-migrate-local-version).

## Étape 2 : migrer le contenu local vers le CodeCommit référentiel
<a name="how-to-migrate-local-version"></a>

Maintenant que vous avez un CodeCommit dépôt, vous pouvez choisir un répertoire sur votre ordinateur local à convertir en dépôt Git local. La commande **git init** peut être utilisée pour convertir un contenu non versionné existant en référentiel Git ou, si vous n'avez pas encore de fichiers ou de contenu, initialiser un nouveau référentiel vide.

1. Depuis le terminal ou la ligne de commande sur votre ordinateur local, placez-vous dans le répertoire que vous souhaitez utiliser comme source pour votre référentiel.

1. Exécutez la commande suivante pour configurer Git afin qu'il utilise une branche par défaut nommée **main** :

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

   Vous pouvez également exécuter cette commande pour définir le nom de votre branche par défaut **main** pour tous les référentiels nouvellement créés :

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

1. Exécutez la commande **git init** pour initialiser le contrôle de version Git dans le répertoire. Cela crée un sous-répertoire .git à la racine du répertoire qui active le suivi du contrôle de version. Le dossier .git contient également toutes les métadonnées requises pour le référentiel. 

   ```
   git init
   ```

1. Vérifiez l'état du répertoire initialisé en exécutant la commande suivante :

   ```
   git status
   ```

   Ajoutez les fichiers que vous souhaitez ajouter au contrôle de version. Dans ce didacticiel, vous allez exécuter la commande `git add` avec le spécificateur `.` pour ajouter tous les fichiers dans ce répertoire. Pour les autres options, consultez la documentation Git. 

   ```
   git add .
   ```

1. Créez une validation pour les fichiers ajoutés avec un message de validation. 

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

1. Exécutez la **git push** commande en spécifiant l'URL et le nom du CodeCommit référentiel de destination ainsi que l'`--all`option. (Il s'agit de l'URL que vous avez copiée dans [Étape 1 : Création d'un CodeCommit référentiel](#how-to-migrate-local-create).)

   Par exemple, si vous avez nommé votre dépôt *MyFirstRepo* et que vous êtes configuré pour utiliser le protocole HTTPS, vous devez exécuter la commande suivante :

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

## Étape 3 : Afficher les fichiers dans CodeCommit
<a name="how-to-migrate-local-view"></a>

Après avoir transféré le contenu de votre répertoire, vous pouvez utiliser la CodeCommit console pour afficher rapidement tous les fichiers du référentiel.

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans **Référentiels**, choisissez le nom du référentiel (par exemple,*MyFirstRepository*) dans la liste. 

1. Affichez les fichiers du référentiel pour les branches, le clone URLs, les paramètres, etc.

## Étape 4 : partager le CodeCommit référentiel
<a name="how-to-migrate-local-share"></a>

Lorsque vous créez un référentiel dans CodeCommit, deux points de terminaison sont générés : un pour les connexions HTTPS et un pour les connexions SSH. Les deux fournissent des connexions sécurisées sur un réseau. Vos utilisateurs peuvent utiliser l'un ou l'autre de ces protocoles. Les deux points de terminaison restent actifs, quel que soit le protocole que vous recommandez à vos utilisateurs. Avant de partager votre référentiel avec d'autres utilisateurs, vous devez créer des politiques IAM permettant aux autres utilisateurs d'accéder à votre référentiel. Fournissez ces instructions d'accès à vos utilisateurs. 

**Création d'une stratégie gérée par le client pour votre référentiel**

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la zone de navigation de **Dashboard**, choisissez **Stratégies**, puis **Créer une stratégie**. 

1. Sur la page **Créer une politique**, choisissez **Importer une stratégie gérée**.

1. Sur la page **Importer des politiques gérées**, dans **Politiques de filtrage**, entrez**AWSCodeCommitPowerUser**. Cliquez sur le bouton à côté du nom de la politique, puis choisissez **Importer**.

1. Sur la page **Créer une politique**, choisissez **JSON**. Remplacez la partie « \$1 » de la `Resource` ligne pour CodeCommit les actions par le Amazon Resource Name (ARN) du CodeCommit référentiel, comme indiqué ici :

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**Astuce**  
Pour trouver l'ARN du CodeCommit référentiel, accédez à la CodeCommit console, choisissez le nom du référentiel dans la liste, puis sélectionnez **Paramètres**. Pour de plus amples informations, veuillez consulter [Afficher les détails du référentiel](how-to-view-repository-details.md).

   Si vous souhaitez que cette stratégie s'applique à plusieurs référentiels, ajoutez chaque référentiel en tant que ressource en spécifiant son ARN. Incluez une virgule entre chaque instruction de ressource, comme illustré ici :

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

   Lorsque vous avez terminé de modifier, choisissez la **politique de révision**.

1. Sur la page **Révision de la politique**, dans **Nom**, entrez un nouveau nom pour la politique (par exemple,*AWSCodeCommitPowerUser-MyDemoRepo*). Fournissez éventuellement une description de cette politique.

1. Choisissez **Create Policy** (Créer une politique).

Pour gérer l'accès à votre référentiel, créez un groupe IAM pour ses utilisateurs, ajoutez des utilisateurs IAM à ce groupe, puis associez la politique gérée par le client que vous avez créée à l'étape précédente. Attachez toute autre stratégie requise pour l'accès, comme `IAMSelfManageServiceSpecificCredentials` ou `IAMUserSSHKeys`. 

1. Connectez-vous à la console IAM AWS Management Console et ouvrez-la à [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)l'adresse.

1. Dans la zone de navigation de **Dashboard**, sélectionnez **Groupes**, puis **Créer un groupe**. 

1. Sur la page **Définir un nom de groupe**, dans la zone **Nom du groupe**, saisissez un nom pour le groupe (par exemple, *MyDemoRepoGroup*), puis sélectionnez **Étape suivante**. Vous pouvez inclure le nom du référentiel comme partie du nom du groupe.
**Note**  
Ce nom doit être unique sur un compte Amazon Web Services.

1. Cochez la case à côté de la politique gérée par le client que vous avez créée dans la section précédente (par exemple, **AWSCodeCommitPowerUser-MyDemoRepo**). 

1. Sur la page **Vérifier**, choisissez **Créer un groupe**. IAM crée ce groupe avec les politiques spécifiées déjà attachées. Le groupe apparaît dans la liste des groupes associés à votre compte Amazon Web Services.

1. Choisissez votre groupe dans la liste. 

1. Sur la page récapitulative du groupe, sélectionnez l'onglet **Utilisateurs**, puis **Ajouter des utilisateurs au groupe**. Dans la liste qui répertorie tous les utilisateurs associés à votre compte Amazon Web Services, cochez les cases à côté des utilisateurs auxquels vous souhaitez autoriser l'accès au CodeCommit référentiel, puis choisissez **Ajouter des utilisateurs**.
**Astuce**  
Vous pouvez utiliser la zone de recherche pour trouver rapidement des utilisateurs par leur nom.

1. Lorsque vous avez ajouté vos utilisateurs, fermez la console IAM.

Après avoir créé un utilisateur IAM à utiliser pour accéder à CodeCommit l'aide du groupe de règles et des politiques que vous avez configurés, envoyez à cet utilisateur les informations requises pour se connecter au référentiel.

1. Ouvrez la CodeCommit console sur [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Dans le sélecteur de région, choisissez l' Région AWS endroit où le référentiel a été créé. Les référentiels sont spécifiques à un Région AWS. Pour de plus amples informations, veuillez consulter [Régions et points de terminaison de connexion Git](regions.md).

1. Sur la page **Repositories (Référentiels)**, choisissez le référentiel à partager. 

1. Dans **Clone URL (URL de clone)**, choisissez le protocole que vos utilisateurs doivent employer. Cette fonction copie l'URL de clone pour le protocole de connexion. 

1. Envoyez à vos utilisateurs l'URL du clone ainsi que toute autre instruction, telle que l'installation AWS CLI, la configuration d'un profil ou l'installation de Git. Assurez-vous d'inclure les informations de configuration pour le protocole de connexion (par exemple, HTTPS). 

# Migrer un référentiel de manière incrémentielle
<a name="how-to-push-large-repositories"></a>

Lorsque vous migrez vers AWS CodeCommit, envisagez de transférer votre référentiel par incréments ou par tranches afin de réduire les risques qu'un problème réseau intermittent ou une dégradation des performances du réseau entraînent l'échec de l'ensemble du push. En utilisant des transmissions incrémentielles avec un script semblable à celui qui est inclus ici, vous pouvez redémarrer la migration et ne transmettre que les validations qui n'ont pas abouti lors de la tentative précédente.

Les procédures décrites dans cette rubrique vous montrent comment créer et exécuter un script qui migre votre référentiel par incréments, et ne retransmet que les incréments qui n'ont pas abouti jusqu'à ce que la migration soit terminée.

Ces instructions supposent que vous avez déjà effectué les étapes indiquées dans [Configuration ](setting-up.md) et [Création d'un référentiel ](how-to-create-repository.md). 

**Topics**
+ [Étape 0 : Déterminer s'il faut effectuer une migration incrémentielle](#how-to-push-large-repositories-determine)
+ [Étape 1 : installer les prérequis et ajouter le CodeCommit référentiel en tant que télécommande](#how-to-push-large-repositories-prereq)
+ [Étape 2 : Création du script à utiliser pour la migration incrémentielle](#how-to-push-large-repositories-createscript)
+ [Étape 3 : Exécuter le script et migrer progressivement vers CodeCommit](#how-to-push-large-repositories-runscript)
+ [Annexe : Exemple de script `incremental-repo-migration.py`](#how-to-push-large-repositories-sample)

## Étape 0 : Déterminer s'il faut effectuer une migration incrémentielle
<a name="how-to-push-large-repositories-determine"></a>

Vous devez prendre en compte plusieurs facteurs pour déterminer la taille globale de votre référentiel et savoir si une migration incrémentielle est nécessaire. Le facteur le plus évident est la taille des artefacts du référentiel. Des facteurs tels que l'historique accumulé du référentiel peuvent également contribuer à sa taille. Un référentiel avec des années d'historique et de branches peut être très volumineux, même si les ressources individuelles ne le sont pas. Il existe un certain nombre de stratégies que vous pouvez mettre en place pour simplifier la migration de ces référentiels et la rendre plus efficace. Par exemple, vous pouvez utiliser une stratégie de clone superficiel lors du clonage d'un référentiel avec un grand historique de développement, ou vous pouvez désactiver la compression delta pour les fichiers binaires volumineux. Vous pouvez rechercher des options en consultant votre documentation Git, ou choisir de configurer des transmissions incrémentielles pour la migration de votre référentiel à l'aide de l'exemple de script inclus dans cette rubrique : `incremental-repo-migration.py`. 

Vous souhaiterez peut-être configurer des transmissions incrémentielles si une ou plusieurs des conditions suivantes sont réunies :
+ Le référentiel que vous souhaitez migrer a plus de cinq ans d'historique.
+ Votre connexion internet est soumise à des pannes intermittentes, des paquets abandonnés, une réponse lente ou d'autres interruptions de service.
+ La taille globale du référentiel est supérieure à 2 Go et vous avez l'intention de migrer la totalité du référentiel.
+ Le référentiel contient des artefacts volumineux ou des fichiers binaires qui ne se compressent pas correctement, par exemple de gros fichiers image avec plus de cinq versions suivies.
+ Vous avez déjà tenté une migration vers CodeCommit et reçu un message « Erreur de service interne ». 

Même si aucune des conditions ci-dessus n'est vraie, vous pouvez quand-même choisir d'effectuer une transmission incrémentielle.

## Étape 1 : installer les prérequis et ajouter le CodeCommit référentiel en tant que télécommande
<a name="how-to-push-large-repositories-prereq"></a>

Vous pouvez créer votre propre script personnalisé qui a ses propres prérequis. Si vous utilisez l'exemple de cette rubrique, vous devez :
+ Installer les prérequis.
+ Cloner le référentiel sur votre ordinateur local.
+ Ajoutez le CodeCommit référentiel en tant que télécommande pour le référentiel que vous souhaitez migrer.

**Configurer pour exécuter incremental-repo-migration .py**

1.  Sur votre ordinateur local, installer Python 2.6 ou une version ultérieure. Pour plus d'informations et obtenir les dernières versions, consultez le [site Web Python](https://www.python.org/downloads/).

1. Sur le même ordinateur, installez GitPython, qui est une bibliothèque Python utilisée pour interagir avec les référentiels Git. Pour plus d'informations, consultez la [documentation GitPython](http://gitpython.readthedocs.org/en/stable/).

1.  Utilisez la commande **git clone --mirror** pour cloner le référentiel que vous souhaitez migrer vers votre ordinateur local. À partir du terminal (Linux, macOS ou Unix) ou de l'invite de commande (Windows), utilisez la **git clone --mirror** commande pour créer un dépôt local pour le référentiel, y compris le répertoire dans lequel vous souhaitez créer le dépôt local. Par exemple, pour cloner un dépôt Git nommé *MyMigrationRepo* avec l'URL *https://example.com/my-repo/* d'un répertoire nommé *my-repo* :

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

   Vous devez voir une sortie similaire à ce qui suit, ce qui indique que le référentiel a été cloné en un référentiel local nu nommé 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. Remplacez les répertoires par le dépôt local du référentiel que vous venez de cloner (par exemple,*my-repo*). A partir de ce répertoire, utilisez la commande **git remote add *DefaultRemoteName* *RemoteRepositoryURL*** pour ajouter le référentiel CodeCommit en tant que référentiel distant pour le référentiel local.
**Note**  
Lorsque vous transmettez des référentiels volumineux, il est préférable d'utiliser SSH plutôt que HTTPS. Lorsque vous transmettez une modification de grande taille, un grand nombre de modifications ou un référentiel volumineux, les connexions HTTPS de longue durée prennent souvent fin prématurément en raison de problèmes réseau ou de paramètres du pare-feu. Pour plus d'informations sur la configuration CodeCommit de SSH, consultez [Pour les connexions SSH sous Linux, macOS ou Unix](setting-up-ssh-unixes.md) ou[Pour les connexions SSH sous Windows](setting-up-ssh-windows.md).

    Par exemple, utilisez la commande suivante pour ajouter le point de terminaison SSH pour un CodeCommit référentiel MyDestinationRepo nommé référentiel distant pour la télécommande nommée `codecommit` : 

   ```
   git remote add codecommit ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDestinationRepo
   ```
**Astuce**  
Comme il s'agit d'un clone, le nom distant par défaut (`origin`) est déjà utilisé. Vous devez utiliser un autre nom distant. Même si l'exemple utilise `codecommit`, vous pouvez vous servir du nom de votre choix. Utilisez la commande **git remote show** pour consulter la liste des référentiels distants définis pour votre référentiel local.

1. Utilisez la commande **git remote -v** pour afficher les paramètres d'extraction (fetch) et de transmission (push) pour votre référentiel local, et vérifier qu'ils sont correctement définis. Par exemple :

   ```
   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)
   ```
**Astuce**  
Si vous voyez toujours des entrées fetch et push pour un autre référentiel distant (par exemple, des entrées pour origin), supprimez-les à l'aide de la commande **git remote set-url --delete**.

## Étape 2 : Création du script à utiliser pour la migration incrémentielle
<a name="how-to-push-large-repositories-createscript"></a>

Ces étapes supposent que vous utilisez l'exemple de script `incremental-repo-migration.py`. 

1. Ouvrez un éditeur de texte et collez le contenu de l'[exemple de script](#how-to-push-large-repositories-sample) dans un document vide.

1. Enregistrez le document dans un répertoire de documents (pas le répertoire de travail de votre référentiel local) et nommez-le `incremental-repo-migration.py`. Assurez-vous que le répertoire que vous choisissez est configuré dans vos variables d'environnement local ou path pour pouvoir exécuter le script Python à partir d'une ligne de commande ou d'un terminal.

## Étape 3 : Exécuter le script et migrer progressivement vers CodeCommit
<a name="how-to-push-large-repositories-runscript"></a>

 Maintenant que vous avez créé votre `incremental-repo-migration.py` script, vous pouvez l'utiliser pour migrer progressivement un dépôt local vers un CodeCommit référentiel. Par défaut, le script transmet des validations par lots de 1 000 validations, et tente d'utiliser les paramètres Git pour le répertoire à partir duquel il est exécuté comme paramètres pour le référentiel local et le référentiel distant. Vous pouvez utiliser les options incluses dans `incremental-repo-migration.py` pour configurer d'autres paramètres, si nécessaire.

1. Depuis le terminal ou l'invite de commande, placez-vous dans le répertoire vers le référentiel local que vous souhaitez migrer.

1. Depuis ce répertoire, exécutez la commande suivante :

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

1. Le script s'exécute et affiche sa progression sur le terminal ou dans l'invite de commande. L'affichage de la progression est lent pour certains référentiels volumineux. Le script s'arrête si une seule transmission échoue trois fois. Vous pouvez alors relancer le script qui commence à partir du lot ayant échoué. Vous pouvez relancer le script jusqu'à ce que toutes les transmissions réussissent et que la migration soit terminée.

**Astuce**  
Vous pouvez exécuter `incremental-repo-migration.py` à partir de n'importe quel répertoire dans la mesure où vous utilisez les options `-l` et `-r` pour spécifier les paramètres locaux et distants à utiliser. Par exemple, pour utiliser le script depuis n'importe quel répertoire pour migrer un dépôt local situé dans /tmp/ *my-repo* vers une télécommande surnommée : *codecommit*  

```
python incremental-repo-migration.py -l "/tmp/my-repo" -r "codecommit" 
```
 Vous pouvez également utiliser l'option `-b` pour modifier la taille de lot par défaut utilisée lors d'une transmission incrémentielle. Par exemple, si vous transmettez régulièrement un référentiel avec de très gros fichiers binaires qui changent souvent et que vous travaillez dans un endroit où la bande passante réseau est limitée, vous pouvez utiliser l'option `-b` pour modifier la taille de lot à 500 au lieu de 1 000. Par exemple :  

```
python incremental-repo-migration.py -b 500
```
Cela transmet le référentiel local de façon incrémentielle par lots de 500 validations. Si vous décidez de modifier à nouveau la taille de lot lors de la migration du référentiel (par exemple, si vous décidez de diminuer la taille de lot après une tentative infructueuse), pensez à utiliser l'option `-c` pour supprimer les balises de traitement par lots avant de réinitialiser la taille de lot avec `-b` :  

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

**Important**  
N'utilisez pas l'option `-c` pour relancer le script après un échec. L'option `-c` supprime les balises utilisées pour regrouper les validations par lots. Utilisez l'option `-c` uniquement si vous voulez modifier la taille de lot et recommencer, ou si vous décidez que vous n'avez plus besoin d'utiliser le script.

## Annexe : Exemple de script `incremental-repo-migration.py`
<a name="how-to-push-large-repositories-sample"></a>

Pour plus de commodité, nous avons développé un exemple de script Python, `incremental-repo-migration.py`, pour transmettre un référentiel de façon incrémentielle. Ce script est un exemple de code open source fourni en l'état.

```
# 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
)
```