

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Migração para o AWS CodeCommit
<a name="how-to-migrate-repository"></a>

É possível migrar um repositório do Git para um repositório do CodeCommit de várias formas: clonando, espelhando, migrando todas ou apenas algumas ramificações, e assim por diante. Também é possível migrar o conteúdo não versionado local do seu computador para o CodeCommit.

Os seguintes tópicos mostram algumas das possíveis maneiras de migrar um repositório. As etapas podem variar dependendo do tipo, do estilo ou da complexidade do repositório e do que você decidiu sobre o que migrar e como realizar a migração. Para repositórios muito grandes, considere [migrar de maneira incremental](how-to-push-large-repositories.md).

**nota**  
É possível migrar para o CodeCommit a partir de outros sistemas de controle de versão, como Perforce, Subversion ou TFS, mas você deverá migrar antes para o Git.   
Para obter mais opções, consulte a documentação do Git.  
Como alternativa, você pode analisar informações sobre [migrar para o Git](http://git-scm.com/book/en/v2/Git-and-Other-Systems-Migrating-to-Git) no livro *Pro Git*, de Scott Chacon e Ben Straub.

**Topics**
+ [Migrar um repositório Git para AWS CodeCommit](how-to-migrate-repository-existing.md)
+ [Migre o conteúdo para CodeCommit](how-to-migrate-repository-local.md)
+ [Migrar um repositório em incrementos](how-to-push-large-repositories.md)

# Migrar um repositório Git para AWS CodeCommit
<a name="how-to-migrate-repository-existing"></a>

Você pode migrar um repositório Git existente para um repositório. CodeCommit Os procedimentos neste tópico mostram como migrar um projeto hospedado em outro repositório Git para o CodeCommit. Como parte do processo, você:
+ Conclua a configuração inicial necessária para CodeCommit.
+ Crie um CodeCommit repositório.
+ Clone o repositório e envie-o para o. CodeCommit
+ Visualize arquivos no CodeCommit repositório.
+ Compartilhe o CodeCommit repositório com sua equipe.

![\[Migrando um repositório Git para CodeCommit\]](http://docs.aws.amazon.com/pt_br/codecommit/latest/userguide/images/codecommit-migrate-existing.png)


**Topics**
+ [Etapa 0: configuração necessária para acesso ao CodeCommit](#how-to-migrate-existing-setup)
+ [Etapa 1: criar um CodeCommit repositório](#how-to-migrate-existing-create)
+ [Etapa 2: clonar o repositório e enviar para o repositório CodeCommit](#how-to-migrate-existing-clone)
+ [Etapa 3: Exibir arquivos em CodeCommit](#how-to-migrate-existing-view)
+ [Etapa 4: compartilhar o CodeCommit repositório](#how-to-migrate-existing-share)

## Etapa 0: configuração necessária para acesso ao CodeCommit
<a name="how-to-migrate-existing-setup"></a>

Antes de migrar um repositório para CodeCommit, você deve criar e configurar um usuário do IAM CodeCommit e configurar seu computador local para acesso. Também é necessário instalar o AWS CLI para gerenciar o CodeCommit. Embora você possa realizar a maioria das CodeCommit tarefas sem ele, ele AWS CLI oferece flexibilidade ao trabalhar com o Git na linha de comando ou no terminal. 

Se você já está configurado para CodeCommit, pode pular para[Etapa 1: criar um CodeCommit repositório](#how-to-migrate-existing-create).

**Para criar e configurar um usuário do IAM para acessar CodeCommit**

1. Crie uma conta da Amazon Web Services acessando [http://aws.amazon.com](https://aws.amazon.com/) e escolhendo **Cadastrar-se**.

1. Crie um usuário do IAM ou use um existente na sua conta da Amazon Web Services. Confirme se você tem um ID de chave de acesso e uma chave de acesso secreta associados ao usuário do IAM. Para obter mais informações, consulte [Criar um usuário do IAM na conta da Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html).
**nota**  
CodeCommit requer AWS Key Management Service. Se você estiver usando um usuário do IAM existente, certifique-se de que não haja políticas anexadas ao usuário que neguem expressamente as AWS KMS ações exigidas pelo CodeCommit. Para obter mais informações, consulte [AWS KMS e criptografia](encryption.md).

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No console do IAM, no painel de navegação, escolha **Usuários** e, em seguida, escolha o usuário do IAM que você deseja configurar para CodeCommit acesso.

1. Na guia **Permissions**, escolha **Add Permissions**. 

1. Em **Grant permissions**, escolha **Attach existing policies directly**.

1. Na lista de políticas, selecione **AWSCodeCommitPowerUser**ou outra política gerenciada para CodeCommit acesso. Para obter mais informações, consulte [AWS políticas gerenciadas para CodeCommit](security-iam-awsmanpol.md).

   Depois de selecionar a política que deseja anexar, escolha **Próximo: Revisar** para revisar a lista de políticas a serem anexadas ao usuário do IAM. Se a lista estiver correta, selecione **Add permissions**.

    Para obter mais informações sobre políticas CodeCommit gerenciadas e compartilhamento de acesso a repositórios com outros grupos e usuários, consulte [Compartilhar um repositório](how-to-share-repository.md) e. [Autenticação e controle de acesso para AWS CodeCommit](auth-and-access-control.md)

**Para instalar e configurar o AWS CLI**

1. Em sua máquina local, baixe e instale AWS CLI o. Esse é um pré-requisito para interagir com a linha CodeCommit de comando. Recomendamos instalar a AWS CLI versão 2. É a versão principal mais recente do AWS CLI e oferece suporte a todos os recursos mais recentes. É a única versão do AWS CLI que suporta o uso de uma conta raiz, acesso federado ou credenciais temporárias com. **git-remote-codecommit**

   Para obter mais informações, consulte [Como configurar a interface de linha de AWS comando](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html).
**nota**  
CodeCommit funciona somente com AWS CLI as versões 1.7.38 e posteriores. Como prática recomendada, instale ou atualize AWS CLI para a versão mais recente disponível. Para determinar qual versão do AWS CLI você instalou, execute o **aws --version** comando.  
Para atualizar uma versão mais antiga do AWS CLI para a versão mais recente, consulte [Instalando AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) o.

1. Execute esse comando para verificar se os CodeCommit comandos do AWS CLI estão instalados.

   ```
   aws codecommit help
   ```

   Esse comando retorna uma lista de CodeCommit comandos.

1. Configure o AWS CLI com um perfil usando o **configure** comando, do seguinte modo:.

   ```
   aws configure
   ```

   Quando solicitado, especifique a chave de AWS acesso e a chave de acesso AWS secreta do usuário do IAM com CodeCommit a qual usar. Além disso, certifique-se de especificar Região da AWS onde o repositório existe, como`us-east-2`. Quando solicitado pelo formato de saída padrão, especifique `json`. Por exemplo, se você estiver configurando um perfil para um usuário do 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
   ```

   Para obter mais informações sobre como criar e configurar perfis para usar com o AWS CLI, consulte o seguinte:
   + [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [Usando uma função do IAM no AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Comando set](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [Conectando-se a AWS CodeCommit repositórios com credenciais rotativas](temporary-access.md)

   Para se conectar a um repositório ou recurso em outro Região da AWS, você deve reconfigurar o AWS CLI com o nome de região padrão. Os nomes de região padrão compatíveis CodeCommit incluem:
   + 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

   Para obter mais informações sobre CodeCommit e Região da AWS, consulte[Regiões e endpoints de conexão do Git](regions.md). Para obter mais informações sobre o IAM, chaves de acesso e chaves secretas, consulte [Como consigo credenciais?](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials) e [Gerenciar chaves de acesso para usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html). Para obter mais informações sobre os perfis AWS CLI e, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

Em seguida, você deve instalar o Git. 
+ **Para Linux, macOS ou Unix**:

  Para trabalhar com arquivos, commits e outras informações em CodeCommit repositórios, você deve instalar o Git na sua máquina local. CodeCommit suporta as versões 1.7.9 e posteriores do Git. A versão 2.28 do Git é compatível com a configuração do nome de ramificações para as confirmações iniciais. Recomendamos o uso de uma versão recente do Git.

  Para instalar o Git, recomendamos sites como o [Git Downloads](http://git-scm.com/downloads).
**nota**  
O Git é uma plataforma em constante evolução atualizada regularmente. Ocasionalmente, uma alteração de recurso pode afetar a forma como funciona com CodeCommit. Se você encontrar problemas com uma versão específica do Git and CodeCommit, revise as informações em. [Solução de problemas](troubleshooting.md)
+ **Para Windows:** 

  Para trabalhar com arquivos, commits e outras informações em CodeCommit repositórios, você deve instalar o Git na sua máquina local. CodeCommit suporta as versões 1.7.9 e posteriores do Git. A versão 2.28 do Git é compatível com a configuração do nome de ramificações para as confirmações iniciais. Recomendamos o uso de uma versão recente do Git.

  Para instalar o Git, recomendamos sites como [Git for Windows](https://gitforwindows.org/). Se você usar esse link para instalar o Git, poderá aceitar todas as configurações padrão da instalação, exceto as seguintes: 
  + Quando solicitado durante a etapa **Ajustar o seu ambiente PATH**, escolha a opção de usar o Git na linha de comando.
  + (Opcional) Se você pretende usar HTTPS com o auxiliar de credenciais incluído no, em AWS CLI vez de configurar as credenciais CodeCommit do Git, na página **Configurando opções extras, verifique se a opção Habilitar o** **Git** Credential Manager está desmarcada. O Gerenciador de Credenciais do Git só é compatível CodeCommit se os usuários do IAM configurarem as credenciais do Git. Para obter mais informações, consulte [Para usuários de HTTPS usando credenciais do Git](setting-up-gc.md) e [Git para Windows: eu instalei o Git para Windows, mas o acesso ao meu repositório é negado (403)](troubleshooting-ch.md#troubleshooting-windowshttps).
**nota**  
O Git é uma plataforma em constante evolução atualizada regularmente. Ocasionalmente, uma alteração de recurso pode afetar a forma como funciona com CodeCommit. Se você encontrar problemas com uma versão específica do Git and CodeCommit, revise as informações em. [Solução de problemas](troubleshooting.md)

CodeCommit suporta autenticação HTTPS e SSH. Para concluir a configuração, você deve configurar as credenciais do Git para CodeCommit (HTTPS, recomendado para a maioria dos usuários), um key pair SSH para usar ao CodeCommit acessar (SSH) **git-remote-codecommit** (recomendado para usuários que usam acesso federado) ou o auxiliar de credenciais incluído no (HTTPS). AWS CLI 
+ Para ver as credenciais do Git em todos os sistemas operacionais compatíveis, consulte [Etapa 3: criar credenciais do Git para conexões HTTPS com CodeCommit](setting-up-gc.md#setting-up-gc-iam).
+ Para SSH no Linux, macOS ou Unix, consulte. [SSH e Linux, macOS ou Unix: configure as chaves públicas e privadas para Git e CodeCommit](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes).
+  Para ver SSH no Windows, consulte [Etapa 3: configurar as chaves públicas e privadas para o Git e CodeCommit](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows).
+ Em **git-remote-codecommit**, consulte [Etapas de configuração para conexões HTTPS AWS CodeCommit com git-remote-codecommit](setting-up-git-remote-codecommit.md).
+ Para o assistente de credenciais no Linux, macOS ou Unix, consulte [Configurar o auxiliar de credenciais (Linux, macOS ou Unix)](setting-up-https-unixes.md#setting-up-https-unixes-ch-config).
+ Para ver o auxiliar de credenciais no Windows, consulte [Configuração de auxiliar de credenciais (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config).

## Etapa 1: criar um CodeCommit repositório
<a name="how-to-migrate-existing-create"></a>

Nesta seção, você usa o CodeCommit console para criar o CodeCommit repositório usado no restante deste tutorial. Para usar o AWS CLI para criar o repositório, consulte[Criar um repositório (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli).

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. No seletor de região, escolha Região da AWS onde você deseja criar o repositório. Para obter mais informações, consulte [Regiões e endpoints de conexão do Git](regions.md).

1. Na página **Repositories (Repositórios)**, selecione **Create repository (Criar repositório)**. 

1. Na página **Create repository (Criar repositório)**, em **Repository name (Nome do repositório)**, insira um nome para o repositório.
**nota**  
Os nomes de repositórios diferenciam maiúsculas de minúsculas. O nome deve ser exclusivo na Região da AWS para sua conta da Amazon Web Services.

1. (Opcional) Em **Description (Descrição)**, insira uma descrição para o repositório. Isso pode ajudar você e outros usuários a identificar a finalidade do repositório. 
**nota**  
O campo de descrição exibe o Markdown no console e aceita todos os caracteres HTML e caracteres Unicode válidos. Se você é um desenvolvedor de aplicativos que está usando o `GetRepository` ou `BatchGetRepositories` APIs e planeja exibir o campo de descrição do repositório em um navegador da Web, consulte a [Referência da CodeCommit API](https://docs.aws.amazon.com/codecommit/latest/APIReference/).

1. (Opcional) Escolha **Adicionar tag** para adicionar uma ou mais tags de repositório (um rótulo de atributo personalizado que ajuda você a organizar e gerenciar seus AWS recursos) ao seu repositório. Para obter mais informações, consulte [Marcando repositórios em AWS CodeCommit](how-to-tag-repository.md).

1. (Opcional) Expanda **Configuração adicional** para especificar se você deseja usar a chave padrão Chave gerenciada pela AWS ou sua própria chave gerenciada pelo cliente para criptografar e descriptografar dados nesse repositório. Se você optar por usar sua própria chave gerenciada pelo cliente, deverá garantir que ela esteja disponível no Região da AWS local em que você está criando o repositório e que a chave esteja ativa. Para obter mais informações, consulte [AWS Key Management Service e criptografia para AWS CodeCommit repositórios](encryption.md).

1. (Opcional) Selecione **Habilitar Amazon CodeGuru Reviewer para Java e Python** se esse repositório contiver código Java ou Python e você CodeGuru quiser que o Reviewer o analise. CodeGuru O revisor usa vários modelos de aprendizado de máquina para encontrar defeitos no código e sugerir melhorias e correções nas pull requests. Para obter mais informações, consulte o [https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html).

1. Escolha **Criar**. 

![\[Criação de um repositório para migrar um repositório Git para CodeCommit\]](http://docs.aws.amazon.com/pt_br/codecommit/latest/userguide/images/codecommit-create-repo-migrate-existing.png)


Após ser criado, o repositório aparecerá na lista **Repositories (Repositórios)**. Na coluna URL, selecione o ícone de cópia e, em seguida, o protocolo (HTTPS ou SSH) a ser usado para se conectar ao CodeCommit. Copie o URL.

Por exemplo, se você nomeou seu repositório *MyClonedRepository* e está usando credenciais do Git com HTTPS na região Leste dos EUA (Ohio), a URL terá a seguinte aparência:

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

Você precisará desse URL posteriormente em [Etapa 2: clonar o repositório e enviar para o repositório CodeCommit](#how-to-migrate-existing-clone).

## Etapa 2: clonar o repositório e enviar para o repositório CodeCommit
<a name="how-to-migrate-existing-clone"></a>

Nesta seção, você clonará um repositório Git existente para o seu computador local, criando o que é chamado de repositório local. Em seguida, você envia o conteúdo do repositório local para o CodeCommit repositório criado anteriormente.

1. No terminal ou no prompt de comando do seu computador local, execute o **git clone** comando com a `--mirror` opção de clonar uma cópia vazia do repositório remoto em uma nova pasta chamada. *aws-codecommit-demo* Este é um repositório vazio destinado apenas à migração. Não é o repositório local para interagir com o repositório migrado em. CodeCommit Você pode criar isso mais tarde, após a conclusão da migração para CodeCommit .

   O exemplo a seguir clona um aplicativo de demonstração hospedado em GitHub (*https://github.com/awslabs/aws-demo-php-simple-app.git*) em um repositório local em um diretório chamado. *aws-codecommit-demo* 

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

1. Altere os diretórios para o diretório onde você criou o clone.

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

1. Execute o **git push** comando, especificando a URL e o nome do CodeCommit repositório de destino e a **--all** opção. (Este é o URL que você copiou em [Etapa 1: criar um CodeCommit repositório](#how-to-migrate-existing-create)).

   Por exemplo, se você nomeou seu repositório *MyClonedRepository* e está configurado para usar HTTPS, execute o seguinte comando:

   ```
   git push https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --all
   ```
**nota**  
A opção **--all** apenas envia por push todas as ramificações para o repositório. Ela não é compatível com o push de outras referências, como tags. Se você deseja enviar tags por push, aguarde até o push inicial ser concluído e, em seguida, envie por push novamente, desta vez usando a opção **--tags**:  

   ```
   git push ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyClonedRepository --tags
   ```
Para obter mais informações, consulte [Git push](https://git-scm.com/docs/git-push) no site do Git. Para obter informações sobre enviar grandes repositórios por push, principalmente ao enviar todas as referências por push de uma vez (por exemplo, com a opção **--mirror**), consulte [Migrar um repositório em incrementos](how-to-push-large-repositories.md).

Você pode excluir a *aws-codecommit-demo* pasta e seu conteúdo depois de migrar o repositório para o. CodeCommit Para criar um repositório local com todas as referências corretas para trabalhar com o repositório CodeCommit, execute o `git clone` comando sem a `--mirror` opção:

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

## Etapa 3: Exibir arquivos em CodeCommit
<a name="how-to-migrate-existing-view"></a>

Depois de enviar o conteúdo do seu diretório, você pode usar o CodeCommit console para visualizar rapidamente todos os arquivos desse repositório.

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Em **Repositórios**, escolha o nome do repositório (por exemplo,*MyClonedRepository*). 

1. Visualize os arquivos no repositório das ramificações, do clone URLs, das configurações e muito mais.  
![\[Visualização de um repositório clonado no CodeCommit\]](http://docs.aws.amazon.com/pt_br/codecommit/latest/userguide/images/codecommit-cloned-repo-url.png)

## Etapa 4: compartilhar o CodeCommit repositório
<a name="how-to-migrate-existing-share"></a>

Quando você cria um repositório no CodeCommit, dois endpoints são gerados: um para conexões HTTPS e outro para conexões SSH. Ambos fornecem conexões seguras em uma rede. Os usuários podem usar um dos dois protocolos. Ambos os endpoints se mantêm ativos, independentemente do protocolo que você recomenda aos usuários. Antes de compartilhar o repositório com outros, é necessário criar políticas do IAM que permitem o acesso de outros usuários ao seu repositório. Forneça essas instruções de acesso aos seus usuários. 

**Criação de uma política gerenciada por cliente para seu repositório**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Na área de navegação do **Painel**, escolha **Policies** e, em seguida, **Create Policy**. 

1. Na página **Criar políticas**, escolha **Importar política gerenciada**.

1. Na página **Importar políticas gerenciadas**, em **Filtrar políticas**, insira o **AWSCodeCommitPowerUser**. Selecione o botão ao lado do nome da política e escolha **Importar**.

1. Na página **Create policy (Criar política)**, escolha **JSON**. Substitua a parte “\$1” da `Resource` linha para CodeCommit ações pelo Amazon Resource Name (ARN) do CodeCommit repositório, conforme mostrado aqui:

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**dica**  
**Para encontrar o ARN do CodeCommit repositório, acesse o CodeCommit console, escolha o nome do repositório na lista e escolha Configurações.** Para obter mais informações, consulte [Visualizar detalhes de repositórios](how-to-view-repository-details.md).

   Se você quiser que essa política seja aplicada a mais de um repositório, adicione cada um como um recurso especificando o ARN dele. Inclua uma vírgula entre cada instrução de recurso, conforme mostrado aqui:

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

   Ao concluir a edição, selecione **Revisar política**.

1. Na página **Revisar Política**, em **Nome**, insira um novo nome para a política (por exemplo,*AWSCodeCommitPowerUser-MyDemoRepo*). Como opção, você pode fornecer uma descrição para essa política.

1. Escolha **Create Policy**.

Para gerenciar o acesso ao repositório, crie um grupo do IAM para os usuários, adicione os usuários do IAM ao grupo e anexe a política gerenciada pelo cliente que você criou na etapa anterior. Anexe quaisquer outras políticas necessárias para acesso, como IAMUser SSHKeys ouIAMSelfManageServiceSpecificCredentials. 

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Na área de navegação **Painel**, escolha **Grupos** e **Criar novo grupo**. 

1. Na página **Set Group Name (Definir nome de grupo)**, em **Group Name (Nome do grupo)**, insira um nome para o grupo (por exemplo, *MyDemoRepoGroup*) e escolha **Next Step (Próxima etapa)**. Considere incluir o nome do repositório como parte do nome do grupo.
**nota**  
Esse nome precisa ser exclusivo em toda a conta da Amazon Web Services.

1. Selecione a caixa ao lado da política gerenciada pelo cliente que você criou na seção anterior (por exemplo, **AWSCodeCommitPowerUser-MyDemoRepo**). 

1. Na página **Análise**, escolha **Criar grupo**. O IAM criará esse grupo com as políticas especificadas já anexadas. O grupo aparecerá na lista de grupos associados à sua conta da Amazon Web Services.

1. Escolha seu grupo na lista. 

1. Na página de resumo do grupo, escolha a guia**Usuários** e **Adicionar usuários ao grupo**. Na lista que mostra todos os usuários associados à sua conta da Amazon Web Services, selecione as caixas ao lado dos usuários aos quais você deseja permitir acesso ao CodeCommit repositório e escolha **Adicionar usuários**.
**dica**  
Você pode usar a caixa Pesquisar para encontrar rapidamente usuários por nome.

1. Depois de adicionar os usuários, feche o console do IAM.

Depois de criar um usuário do IAM para acessar CodeCommit usando o grupo de políticas e as políticas que você configurou, envie a esse usuário as informações necessárias para se conectar ao repositório.

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. No seletor de região, escolha Região da AWS onde o repositório foi criado. Os repositórios são específicos para um Região da AWS. Para obter mais informações, consulte [Regiões e endpoints de conexão do Git](regions.md).

1. Na página **Repositories (Repositórios)**, escolha o repositório que deseja atualizar. 

1. Em **Clone URL (Clonar URL)**, escolha o protocolo que você deseja que os usuários usem. Isso copia a URL clonada para o protocolo de conexão. 

1. Envie aos usuários o URL do clone junto com quaisquer outras instruções, como instalar o AWS CLI, configurar um perfil ou instalar o Git. Não se esqueça de incluir as informações de configuração para o protocolo de conexão (por exemplo, HTTPS). 

# Migre conteúdo local ou não versionado para AWS CodeCommit
<a name="how-to-migrate-repository-local"></a>

Os procedimentos deste tópico mostram como migrar um projeto existente ou conteúdo local em seu computador para um CodeCommit repositório. Como parte do processo, você:
+ Conclua a configuração inicial necessária para CodeCommit.
+ Crie um CodeCommit repositório.
+ Coloque uma pasta local no controle de versão do Git e envie o conteúdo dessa pasta para o CodeCommit repositório.
+ Visualize arquivos no CodeCommit repositório.
+ Compartilhe o CodeCommit repositório com sua equipe.

![\[Migrando um projeto local para CodeCommit\]](http://docs.aws.amazon.com/pt_br/codecommit/latest/userguide/images/codecommit-migrate-local.png)


**Topics**
+ [Etapa 0: configuração necessária para acessar a CodeCommit](#how-to-migrate-local-setup)
+ [Etapa 1: criar um CodeCommit repositório](#how-to-migrate-local-create)
+ [Etapa 2: migrar o conteúdo local para o repositório CodeCommit](#how-to-migrate-local-version)
+ [Etapa 3: Exibir arquivos em CodeCommit](#how-to-migrate-local-view)
+ [Etapa 4: compartilhar o CodeCommit repositório](#how-to-migrate-local-share)

## Etapa 0: configuração necessária para acessar a CodeCommit
<a name="how-to-migrate-local-setup"></a>

Antes de migrar o conteúdo local para CodeCommit, você deve criar e configurar um usuário do IAM CodeCommit e configurar seu computador local para acesso. Também é necessário instalar o AWS CLI para gerenciar o CodeCommit. Embora você possa realizar a maioria das CodeCommit tarefas sem ele, ele AWS CLI oferece flexibilidade ao trabalhar com o Git. 

Se você já está configurado para CodeCommit, pode pular para[Etapa 1: criar um CodeCommit repositório](#how-to-migrate-local-create).

**Para criar e configurar um usuário do IAM para acessar CodeCommit**

1. Crie uma conta da Amazon Web Services acessando [http://aws.amazon.com](https://aws.amazon.com/) e escolhendo **Cadastrar-se**.

1. Crie um usuário do IAM ou use um existente na sua conta da Amazon Web Services. Confirme se você tem um ID de chave de acesso e uma chave de acesso secreta associados ao usuário do IAM. Para obter mais informações, consulte [Criar um usuário do IAM na conta da Amazon Web Services](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_SettingUpUser.html).
**nota**  
CodeCommit requer AWS Key Management Service. Se você estiver usando um usuário do IAM existente, certifique-se de que não haja políticas anexadas ao usuário que neguem expressamente as AWS KMS ações exigidas pelo CodeCommit. Para obter mais informações, consulte [AWS KMS e criptografia](encryption.md).

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. No console do IAM, no painel de navegação, escolha **Usuários** e, em seguida, escolha o usuário do IAM que você deseja configurar para CodeCommit acesso.

1. Na guia **Permissions**, escolha **Add Permissions**. 

1. Em **Grant permissions**, escolha **Attach existing policies directly**.

1. Na lista de políticas, selecione **AWSCodeCommitPowerUser**ou outra política gerenciada para CodeCommit acesso. Para obter mais informações, consulte [AWS políticas gerenciadas para CodeCommit](security-iam-awsmanpol.md).

   Depois de selecionar a política que deseja anexar, escolha **Próximo: Revisar** para revisar a lista de políticas a serem anexadas ao usuário do IAM. Se a lista estiver correta, selecione **Add permissions**.

    Para obter mais informações sobre políticas CodeCommit gerenciadas e compartilhamento de acesso a repositórios com outros grupos e usuários, consulte [Compartilhar um repositório](how-to-share-repository.md) e. [Autenticação e controle de acesso para AWS CodeCommit](auth-and-access-control.md)

**Para instalar e configurar o AWS CLI**

1. Em sua máquina local, baixe e instale AWS CLI o. Esse é um pré-requisito para interagir com a linha CodeCommit de comando. Recomendamos instalar a AWS CLI versão 2. É a versão principal mais recente do AWS CLI e oferece suporte a todos os recursos mais recentes. É a única versão do AWS CLI que suporta o uso de uma conta raiz, acesso federado ou credenciais temporárias com. **git-remote-codecommit**

   Para obter mais informações, consulte [Como configurar a interface de linha de AWS comando](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-set-up.html).
**nota**  
CodeCommit funciona somente com AWS CLI as versões 1.7.38 e posteriores. Como prática recomendada, instale ou atualize AWS CLI para a versão mais recente disponível. Para determinar qual versão do AWS CLI você instalou, execute o **aws --version** comando.  
Para atualizar uma versão mais antiga do AWS CLI para a versão mais recente, consulte [Instalando AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/installing.html) o.

1. Execute esse comando para verificar se os CodeCommit comandos do AWS CLI estão instalados.

   ```
   aws codecommit help
   ```

   Esse comando retorna uma lista de CodeCommit comandos.

1. Configure o AWS CLI com um perfil usando o **configure** comando, do seguinte modo:.

   ```
   aws configure
   ```

   Quando solicitado, especifique a chave de AWS acesso e a chave de acesso AWS secreta do usuário do IAM com CodeCommit a qual usar. Além disso, certifique-se de especificar Região da AWS onde o repositório existe, como`us-east-2`. Quando solicitado pelo formato de saída padrão, especifique `json`. Por exemplo, se você estiver configurando um perfil para um usuário do 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
   ```

   Para obter mais informações sobre como criar e configurar perfis para usar com o AWS CLI, consulte o seguinte:
   + [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)
   + [Usando uma função do IAM no AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)
   + [Comando set](https://docs.aws.amazon.com/cli/latest/reference/set.html)
   + [Conectando-se a AWS CodeCommit repositórios com credenciais rotativas](temporary-access.md)

   Para se conectar a um repositório ou recurso em outro Região da AWS, você deve reconfigurar o AWS CLI com o nome de região padrão. Os nomes de região padrão compatíveis CodeCommit incluem:
   + 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

   Para obter mais informações sobre CodeCommit e Região da AWS, consulte[Regiões e endpoints de conexão do Git](regions.md). Para obter mais informações sobre o IAM, chaves de acesso e chaves secretas, consulte [Como consigo credenciais?](https://docs.aws.amazon.com/IAM/latest/UserGuide/IAM_Introduction.html#IAM_SecurityCredentials) e [Gerenciar chaves de acesso para usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/ManagingCredentials.html). Para obter mais informações sobre os perfis AWS CLI e, consulte [Perfis nomeados](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html).

Em seguida, você deve instalar o Git. 
+ **Para Linux, macOS ou Unix**:

  Para trabalhar com arquivos, commits e outras informações em CodeCommit repositórios, você deve instalar o Git na sua máquina local. CodeCommit suporta as versões 1.7.9 e posteriores do Git. A versão 2.28 do Git é compatível com a configuração do nome de ramificações para as confirmações iniciais. Recomendamos o uso de uma versão recente do Git.

  Para instalar o Git, recomendamos sites como o [Git Downloads](http://git-scm.com/downloads).
**nota**  
O Git é uma plataforma em constante evolução atualizada regularmente. Ocasionalmente, uma alteração de recurso pode afetar a forma como funciona com CodeCommit. Se você encontrar problemas com uma versão específica do Git and CodeCommit, revise as informações em. [Solução de problemas](troubleshooting.md)
+ **Para Windows:** 

  Para trabalhar com arquivos, commits e outras informações em CodeCommit repositórios, você deve instalar o Git na sua máquina local. CodeCommit suporta as versões 1.7.9 e posteriores do Git. A versão 2.28 do Git é compatível com a configuração do nome de ramificações para as confirmações iniciais. Recomendamos o uso de uma versão recente do Git.

  Para instalar o Git, recomendamos sites como [Git for Windows](https://gitforwindows.org/). Se você usar esse link para instalar o Git, poderá aceitar todas as configurações padrão da instalação, exceto as seguintes: 
  + Quando solicitado durante a etapa **Ajustar o seu ambiente PATH**, escolha a opção de usar o Git na linha de comando.
  + (Opcional) Se você pretende usar HTTPS com o auxiliar de credenciais incluído no, em AWS CLI vez de configurar as credenciais CodeCommit do Git, na página **Configurando opções extras, verifique se a opção Habilitar o** **Git** Credential Manager está desmarcada. O Gerenciador de Credenciais do Git só é compatível CodeCommit se os usuários do IAM configurarem as credenciais do Git. Para obter mais informações, consulte [Para usuários de HTTPS usando credenciais do Git](setting-up-gc.md) e [Git para Windows: eu instalei o Git para Windows, mas o acesso ao meu repositório é negado (403)](troubleshooting-ch.md#troubleshooting-windowshttps).
**nota**  
O Git é uma plataforma em constante evolução atualizada regularmente. Ocasionalmente, uma alteração de recurso pode afetar a forma como funciona com CodeCommit. Se você encontrar problemas com uma versão específica do Git and CodeCommit, revise as informações em. [Solução de problemas](troubleshooting.md)

CodeCommit suporta autenticação HTTPS e SSH. Para concluir a configuração, você deve configurar as credenciais do Git para CodeCommit (HTTPS, recomendado para a maioria dos usuários), um key pair SSH (SSH) para usar ao CodeCommit acessar **git-remote-codecommit** (recomendado para usuários que usam acesso federado) ou o auxiliar de credenciais incluído no. AWS CLI
+ Para ver as credenciais do Git em todos os sistemas operacionais compatíveis, consulte [Etapa 3: criar credenciais do Git para conexões HTTPS com CodeCommit](setting-up-gc.md#setting-up-gc-iam).
+ Para SSH no Linux, macOS ou Unix, consulte. [SSH e Linux, macOS ou Unix: configure as chaves públicas e privadas para Git e CodeCommit](setting-up-ssh-unixes.md#setting-up-ssh-unixes-keys-unixes).
+  Para ver SSH no Windows, consulte [Etapa 3: configurar as chaves públicas e privadas para o Git e CodeCommit](setting-up-ssh-windows.md#setting-up-ssh-windows-keys-windows).
+ Em **git-remote-codecommit**, consulte [Etapas de configuração para conexões HTTPS AWS CodeCommit com git-remote-codecommit](setting-up-git-remote-codecommit.md).
+ Para o assistente de credenciais no Linux, macOS ou Unix, consulte [Configurar o auxiliar de credenciais (Linux, macOS ou Unix)](setting-up-https-unixes.md#setting-up-https-unixes-ch-config).
+ Para ver o auxiliar de credenciais no Windows, consulte [Configuração de auxiliar de credenciais (Windows)](setting-up-https-windows.md#setting-up-https-windows-ch-config).

## Etapa 1: criar um CodeCommit repositório
<a name="how-to-migrate-local-create"></a>

Nesta seção, você usa o CodeCommit console para criar o CodeCommit repositório usado no restante deste tutorial. Para usar o AWS CLI para criar o repositório, consulte[Criar um repositório (AWS CLI)](how-to-create-repository.md#how-to-create-repository-cli).

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. No seletor de região, escolha Região da AWS onde você deseja criar o repositório. Para obter mais informações, consulte [Regiões e endpoints de conexão do Git](regions.md).

1. Na página **Repositories (Repositórios)**, selecione **Create repository (Criar repositório)**. 

1. Na página **Create repository (Criar repositório)**, em **Repository name (Nome do repositório)**, insira um nome para o repositório.
**nota**  
Os nomes de repositórios diferenciam maiúsculas de minúsculas. O nome deve ser exclusivo na Região da AWS para sua conta da Amazon Web Services.

1. (Opcional) Em **Description (Descrição)**, insira uma descrição para o repositório. Isso pode ajudar você e outros usuários a identificar a finalidade do repositório. 
**nota**  
O campo de descrição exibe o Markdown no console e aceita todos os caracteres HTML e caracteres Unicode válidos. Se você é um desenvolvedor de aplicativos que está usando o `GetRepository` ou `BatchGetRepositories` APIs e planeja exibir o campo de descrição do repositório em um navegador da Web, consulte a [Referência da CodeCommit API](https://docs.aws.amazon.com/codecommit/latest/APIReference/).

1. (Opcional) Escolha **Adicionar tag** para adicionar uma ou mais tags de repositório (um rótulo de atributo personalizado que ajuda você a organizar e gerenciar seus AWS recursos) ao seu repositório. Para obter mais informações, consulte [Marcando repositórios em AWS CodeCommit](how-to-tag-repository.md).

1. (Opcional) Expanda **Configuração adicional** para especificar se você deseja usar a chave padrão Chave gerenciada pela AWS ou sua própria chave gerenciada pelo cliente para criptografar e descriptografar dados nesse repositório. Se você optar por usar sua própria chave gerenciada pelo cliente, deverá garantir que ela esteja disponível no Região da AWS local em que você está criando o repositório e que a chave esteja ativa. Para obter mais informações, consulte [AWS Key Management Service e criptografia para AWS CodeCommit repositórios](encryption.md).

1. (Opcional) Selecione **Habilitar Amazon CodeGuru Reviewer para Java e Python** se esse repositório contiver código Java ou Python e você CodeGuru quiser que o Reviewer o analise. CodeGuru O revisor usa vários modelos de aprendizado de máquina para encontrar defeitos no código e sugerir melhorias e correções nas pull requests. Para obter mais informações, consulte o [https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html](https://docs.aws.amazon.com/codeguru/latest/reviewer-ug/Welcome.html).

1. Escolha **Criar**. 

Após ser criado, o repositório aparecerá na lista **Repositories (Repositórios)**. Na coluna URL, selecione o ícone de cópia e, em seguida, o protocolo (HTTPS ou SSH) a ser usado para se conectar ao CodeCommit. Copie o URL.

Por exemplo, se você nomeou seu repositório *MyFirstRepo* e está usando HTTPS, a URL teria a seguinte aparência:

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

Você precisará desse URL posteriormente em [Etapa 2: migrar o conteúdo local para o repositório CodeCommit](#how-to-migrate-local-version).

## Etapa 2: migrar o conteúdo local para o repositório CodeCommit
<a name="how-to-migrate-local-version"></a>

Agora que você tem um CodeCommit repositório, pode escolher um diretório no seu computador local para convertê-lo em um repositório Git local. O comando **git init** pode ser usado para converter conteúdo existente e não versionado para um repositório do Git ou, se você ainda não tiver arquivos ou conteúdo, para inicializar um repositório novo e vazio.

1. No terminal ou na linha de comando do seu computador local, altere diretórios para o diretório que deseja usar como origem do seu repositório.

1. Execute o comando a seguir para configurar o Git para usar uma ramificação padrão denominada **main**:

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

   Você também pode executar esse comando para definir o nome da ramificação padrão como **main** para todos os repositórios recém-criados:

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

1. Execute o comando **git init** para inicializar o controle de versão do Git no diretório. Isso cria um subdiretório .git na raiz do diretório que permite o rastreamento do controle de versão. A pasta .git também contém todos os metadados necessários para o repositório. 

   ```
   git init
   ```

1. Verifique o status do diretório inicializado executando o seguinte comando:

   ```
   git status
   ```

   Adicione os arquivos que deseja ao controle de versão. Neste tutorial, você executará o comando `git add` com o especificador `.` para adicionar todos os arquivos no diretório. Para outras opções, consulte a documentação do Git. 

   ```
   git add .
   ```

1. Crie uma confirmação para os arquivos adicionados com uma mensagem de confirmação. 

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

1. Execute o **git push** comando, especificando a URL e o nome do CodeCommit repositório de destino e a `--all` opção. (Este é o URL que você copiou em [Etapa 1: criar um CodeCommit repositório](#how-to-migrate-local-create).)

   Por exemplo, se você nomeou seu repositório *MyFirstRepo* e está configurado para usar HTTPS, execute o seguinte comando:

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

## Etapa 3: Exibir arquivos em CodeCommit
<a name="how-to-migrate-local-view"></a>

Depois de enviar o conteúdo do seu diretório, você pode usar o CodeCommit console para visualizar rapidamente todos os arquivos no repositório.

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. Em **Repositórios**, escolha o nome do repositório (por exemplo,*MyFirstRepository*) na lista. 

1. Visualize os arquivos no repositório para ramificações, clones URLs, configurações e muito mais.

## Etapa 4: compartilhar o CodeCommit repositório
<a name="how-to-migrate-local-share"></a>

Quando você cria um repositório no CodeCommit, dois endpoints são gerados: um para conexões HTTPS e outro para conexões SSH. Ambos fornecem conexões seguras em uma rede. Os usuários podem usar um dos dois protocolos. Ambos os endpoints se mantêm ativos, independentemente do protocolo que você recomenda aos usuários. Antes de compartilhar o repositório com outros, é necessário criar políticas do IAM que permitem o acesso de outros usuários ao seu repositório. Forneça essas instruções de acesso aos seus usuários. 

**Criação de uma política gerenciada por cliente para seu repositório**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Na área de navegação do **Painel**, escolha **Policies** e, em seguida, **Create Policy**. 

1. Na página **Criar políticas**, escolha **Importar política gerenciada**.

1. Na página **Importar políticas gerenciadas**, em **Filtrar políticas**, insira o **AWSCodeCommitPowerUser**. Selecione o botão ao lado do nome da política e escolha **Importar**.

1. Na página **Create policy (Criar política)**, escolha **JSON**. Substitua a parte “\$1” da `Resource` linha para CodeCommit ações pelo Amazon Resource Name (ARN) do CodeCommit repositório, conforme mostrado aqui:

   ```
   "Resource": [
    "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo"
    ]
   ```
**dica**  
**Para encontrar o ARN do CodeCommit repositório, acesse o CodeCommit console, escolha o nome do repositório na lista e escolha Configurações.** Para obter mais informações, consulte [Visualizar detalhes de repositórios](how-to-view-repository-details.md).

   Se você quiser que essa política seja aplicada a mais de um repositório, adicione cada um como um recurso especificando o ARN dele. Inclua uma vírgula entre cada instrução de recurso, conforme mostrado aqui:

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

   Ao concluir a edição, selecione **Revisar política**.

1. Na página **Revisar Política**, em **Nome**, insira um novo nome para a política (por exemplo,*AWSCodeCommitPowerUser-MyDemoRepo*). Como opção, você pode fornecer uma descrição para essa política.

1. Escolha **Create Policy**.

Para gerenciar o acesso ao repositório, crie um grupo do IAM para os usuários, adicione os usuários do IAM ao grupo e anexe a política gerenciada pelo cliente que você criou na etapa anterior. Anexe quaisquer outras políticas necessárias para o acesso, como `IAMSelfManageServiceSpecificCredentials` ou `IAMUserSSHKeys`. 

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Na área de navegação **Painel**, escolha **Grupos** e **Criar novo grupo**. 

1. Na página **Set Group Name (Definir nome de grupo)**, em **Group Name (Nome do grupo)**, insira um nome para o grupo (por exemplo, *MyDemoRepoGroup*) e escolha **Next Step (Próxima etapa)**. Considere incluir o nome do repositório como parte do nome do grupo.
**nota**  
Esse nome precisa ser exclusivo em toda a conta da Amazon Web Services.

1. Selecione a caixa ao lado da política gerenciada pelo cliente que você criou na seção anterior (por exemplo, **AWSCodeCommitPowerUser-MyDemoRepo**). 

1. Na página **Análise**, escolha **Criar grupo**. O IAM criará esse grupo com as políticas especificadas já anexadas. O grupo aparecerá na lista de grupos associados à sua conta da Amazon Web Services.

1. Escolha seu grupo na lista. 

1. Na página de resumo do grupo, escolha a guia**Usuários** e **Adicionar usuários ao grupo**. Na lista que mostra todos os usuários associados à sua conta da Amazon Web Services, selecione as caixas ao lado dos usuários aos quais você deseja permitir acesso ao CodeCommit repositório e escolha **Adicionar usuários**.
**dica**  
Você pode usar a caixa Pesquisar para encontrar rapidamente usuários por nome.

1. Depois de adicionar os usuários, feche o console do IAM.

Depois de criar um usuário do IAM para ser usado para acessar CodeCommit usando o grupo de políticas e as políticas que você configurou, envie a esse usuário as informações necessárias para se conectar ao repositório.

1. Abra o CodeCommit console em [https://console.aws.amazon.com/codesuite/codecommit/home](https://console.aws.amazon.com/codesuite/codecommit/home).

1. No seletor de região, escolha Região da AWS onde o repositório foi criado. Os repositórios são específicos para um Região da AWS. Para obter mais informações, consulte [Regiões e endpoints de conexão do Git](regions.md).

1. Na página **Repositories (Repositórios)**, escolha o repositório que deseja atualizar. 

1. Em **Clone URL (Clonar URL)**, escolha o protocolo que você deseja que os usuários usem. Isso copia a URL clonada para o protocolo de conexão. 

1. Envie aos usuários o URL do clone junto com quaisquer outras instruções, como instalar o AWS CLI, configurar um perfil ou instalar o Git. Não se esqueça de incluir as informações de configuração para o protocolo de conexão (por exemplo, HTTPS). 

# Migrar um repositório de forma incremental
<a name="how-to-push-large-repositories"></a>

Ao migrar para AWS CodeCommit, considere enviar seu repositório em incrementos ou partes para reduzir as chances de um problema de rede intermitente ou um desempenho de rede degradado fazer com que todo o push falhe. Ao usar pushes em incrementos com um script como o que está incluído aqui, você poderá reiniciar a migração e enviar por push somente as confirmações que não obtiveram êxito na tentativa anterior.

Os procedimentos neste tópico mostram como criar e executar um script que migra o repositório em incrementos e reenvia por push somente os incrementos que não obtiveram êxito até a migração estar concluída.

Essas instruções foram escritas presumindo que você já tenha concluído as etapas em [Configurando ](setting-up.md) e [Criar um repositório](how-to-create-repository.md). 

**Topics**
+ [Etapa 0: determinar se a migração será incremental](#how-to-push-large-repositories-determine)
+ [Etapa 1: instalar os pré-requisitos e adicionar o CodeCommit repositório como remoto](#how-to-push-large-repositories-prereq)
+ [Etapa 2: criar o script a ser usado na migração em incrementos](#how-to-push-large-repositories-createscript)
+ [Etapa 3: Executar o script e migrar incrementalmente para CodeCommit](#how-to-push-large-repositories-runscript)
+ [Apêndice: Amostra de script `incremental-repo-migration.py`](#how-to-push-large-repositories-sample)

## Etapa 0: determinar se a migração será incremental
<a name="how-to-push-large-repositories-determine"></a>

Há vários fatores a considerar para determinar o tamanho total do seu repositório e se migrará de maneira incremental. O mais óbvio é o tamanho total dos artefatos no repositório. Fatores como histórico acumulado do repositório também podem contribuir para o tamanho. Um repositório com anos de histórico e ramificações pode ser muito grande, mesmo que os recursos individuais não sejam. Há uma série de estratégias que você pode utilizar para tornar a migração desses repositórios mais simples e mais eficiente. Por exemplo, você pode usar uma estratégia de clonagem superficial ao clonar um repositório com um longo histórico de desenvolvimento, ou pode desativar a compactação delta para grandes arquivos binários. Você pode pesquisar opções consultando a documentação do Git ou optar pela configuração de push em incrementos para migrar o seu repositório usando a amostra de script incluída neste tópico, `incremental-repo-migration.py` 

Você pode configurar pushes em incrementos se uma ou mais das seguintes condições forem verdadeiras:
+ O repositório que você quer migrar tem um histórico de mais de cinco anos.
+ Sua conexão com a Internet está sujeita a interrupções intermitentes, queda de pacotes, resposta lenta ou outras interrupções no serviço.
+ O tamanho total do repositório é maior que 2 GB e você pretende migrá-lo por inteiro.
+ O repositório contém grandes artefatos ou binários que não são bem compactados, como arquivos grandes de imagem de mais de cinco versões controladas.
+ Você já tentou migrar CodeCommit e recebeu uma mensagem de “Erro de serviço interno”. 

Mesmo se nenhuma das condições acima for verdadeira, você ainda poderá escolher enviar pushes de maneira incremental.

## Etapa 1: instalar os pré-requisitos e adicionar o CodeCommit repositório como remoto
<a name="how-to-push-large-repositories-prereq"></a>

É possível criar o seu próprio script personalizado que tenha pré-requisitos próprios. Se você usar os exemplos incluídos neste tópico, deverá:
+ Instalar seus pré-requisitos.
+ Clonar o repositório para o computador local.
+ Adicione o CodeCommit repositório como remoto para o repositório que você deseja migrar.

**Configure para executar incremental-repo-migration o.py**

1.  No computador local, instale o Python 2.6 ou posterior. Para obter mais informações sobre as versões mais recentes, consulte [o site da Python](https://www.python.org/downloads/).

1. No mesmo computador, instale GitPython, que é uma biblioteca Python usada para interagir com repositórios Git. Para obter mais informações, consulte a [a documentação do GitPython](http://gitpython.readthedocs.org/en/stable/).

1.  Use o comando **git clone --mirror** para clonar o repositório que você deseja migrar para o seu computador local. No terminal (Linux, macOS ou Unix) ou no prompt de comando (Windows), use o comando **git clone --mirror** para criar um repositório local para o repositório, incluindo o diretório onde você deseja criá-lo. Por exemplo, para clonar um repositório Git *MyMigrationRepo* chamado com uma URL *https://example.com/my-repo/* de para um diretório chamado: *my-repo*

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

   Você verá uma saída semelhante à seguinte, que indica que o repositório foi clonado em um repositório local bare chamado 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. Altere os diretórios para o repositório local do repositório que você acabou de clonar (por exemplo,). *my-repo* Desse diretório, use o comando **git remote add *DefaultRemoteName* *RemoteRepositoryURL*** para adicionar o repositório CodeCommit como um repositório remoto para o repositório local.
**nota**  
Ao enviar grandes repositórios por push, considere utilizar SSH em vez de HTTPS. Ao enviar por push uma grande alteração, um grande número de alterações ou um grande repositório, as conexões HTTPS de execução prolongada costumam ser encerradas prematuramente devido a problemas de rede ou configurações do firewall. Para obter mais informações sobre a configuração CodeCommit do SSH, consulte [Para conexões SSH no Linux, macOS ou Unix](setting-up-ssh-unixes.md) ou[Para conexões SSH no Windows](setting-up-ssh-windows.md).

    Por exemplo, use o comando a seguir para adicionar o endpoint SSH para um CodeCommit repositório chamado MyDestinationRepo como repositório remoto para o remoto chamado: `codecommit` 

   ```
   git remote add codecommit ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDestinationRepo
   ```
**dica**  
Por ser um clone, o nome do repositório remoto padrão (`origin`) já está em uso. Você deverá usar outro nome de repositório remoto. Embora o exemplo use `codecommit`, você pode usar o nome que quiser. Use o comando **git remote show** para analisar a lista de conjunto de repositórios remotos do seu repositório local.

1. Use o comando **git remote -v** para exibir as configurações de busca e push do seu repositório local e confirmar se estão corretas. Por exemplo:

   ```
   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)
   ```
**dica**  
Se você ainda vir entradas de busca e push de um repositório remoto diferente (por exemplo, entradas para origin), use o comando **git remote set-url --delete** para removê-las.

## Etapa 2: criar o script a ser usado na migração em incrementos
<a name="how-to-push-large-repositories-createscript"></a>

Estas etapas foram escritas presumindo que você esteja usando o script de exemplo `incremental-repo-migration.py`. 

1. Abra um editor de texto e cole os conteúdos da [amostra de script](#how-to-push-large-repositories-sample) em um documento vazio.

1. Salve o documento em um diretório de documentos (não o diretório de trabalho do seu repositório local) e nomeie-o `incremental-repo-migration.py`. Verifique se o diretório escolhido está configurado no ambiente local ou nas variáveis PATH, para que seja possível executar o script Python a partir de uma linha de comando ou um terminal.

## Etapa 3: Executar o script e migrar incrementalmente para CodeCommit
<a name="how-to-push-large-repositories-runscript"></a>

 Agora que você criou seu `incremental-repo-migration.py` script, você pode usá-lo para migrar incrementalmente um repositório local para um repositório. CodeCommit Por padrão, o script envia confirmações por push em lotes de 1.000 confirmações e tenta usar as configurações do Git para o diretório de onde é executado como configurações para os repositórios local e remoto. Você pode usar as opções incluídas em `incremental-repo-migration.py` para definir outras configurações, se necessário.

1. No terminal ou na linha de comando, altere os diretórios para o repositório local que você deseja migrar.

1. Nesse diretório, execute o seguinte comando:

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

1. O script executa e mostra progresso no terminal ou na linha de comando. Alguns repositórios grandes demoram para mostrar o progresso. O script será interrompido se um único push falhar três vezes. Então, você poderá executar novamente o script, que começará pelo lote que falhou. Execute o script novamente até que todos os pushes obtenham êxito e a migração seja concluída.

**dica**  
Você pode executar `incremental-repo-migration.py` a partir de qualquer diretório desde que utilize as opções `-l` e `-r` para especificar as configurações locais e remotas a serem usadas. Por exemplo, para usar o script de qualquer diretório para migrar um repositório local localizado em /tmp/ *my-repo* para um remoto apelidado: *codecommit*  

```
python incremental-repo-migration.py -l "/tmp/my-repo" -r "codecommit" 
```
 Você também pode querer usar a opção `-b` para alterar o tamanho do lote padrão usado ao enviar por push de forma incremental. Por exemplo, se você estiver enviando por push regularmente um repositório de arquivos binários muito grandes que costumam mudar frequentemente e trabalham de um local com largura de banda da rede restrita, use a opção `-b` para alterar o tamanho do lote para 500 em vez de 1.000. Por exemplo:  

```
python incremental-repo-migration.py -b 500
```
Isso envia o repositório local por push de maneira incremental em lotes de 500 confirmações. Se você decidir alterar o tamanho do lote novamente ao migrar o repositório (por exemplo, se você decidir reduzir o tamanho do lote após uma tentativa falha), lembre-se de usar a opção `-c` para remover as tags do lote antes de redefinir o tamanho do lote com `-b`:  

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

**Importante**  
Não use a opção `-c` se desejar executar novamente o script após uma falha. A opção `-c` elimina as tags usadas para acomodar as confirmações em lote. Use a opção `-c` somente se desejar alterar o tamanho do lote e iniciar novamente ou se decidir que não quer mais usar o script.

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

Para a sua conveniência, desenvolvemos um amostra de script Python, `incremental-repo-migration.py`, para enviar um repositório por push de maneira incremental. Esse script é um exemplo de código aberto e é fornecido como se encontra.

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