# Exportando dados de migração de GitHub.com

Você pode exportar dados de migração de uma organização no GitHub.com usando a API para selecionar repositórios a serem migrados e, em seguida, gerando um arquivo de migração que pode ser importado em uma instância do GitHub Enterprise Server.

## Preparar a organização de origem em GitHub

1. Verifique se você tem [permissões de proprietário](/pt/enterprise-server@3.22/organizations/managing-peoples-access-to-your-organization-with-roles/roles-in-an-organization) nos repositórios da organização de origem.

2. [Gerar um token de acesso](/pt/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) com os escopos `repo` e `admin:org` no GitHub.com.

3. Para minimizar o tempo de inatividade, faça uma lista de repositórios que você deseja exportar a partir da instância de origem. É possível adicionar vários repositórios a uma exportação de uma vez usando um arquivo de texto que lista a URL de cada repositório em uma linha separada.

## Exportar repositórios da organização

> \[!NOTE]
> As relações de fork não persistem após uma migração.

Para exportar dados de repositório por meio do GitHub.com, use [a API de Migrações](/pt/rest/migrations).

No momento, a API de Migrações está em período de visualização, o que significa que os endpoints e os parâmetros podem mudar no futuro.

## Gerar arquivos de migração

> \[!NOTE]
> Bloquear um repositório impede todo o acesso de gravação a ele. Não é possível associar novas equipes ou colaboradores a um repositório bloqueado.
>
> Se você estiver realizando uma execução de teste, você não precisará bloquear o repositório. Quando você migra dados de um repositório que está em uso, o GitHub recomenda o bloqueio do repositório. Para saber mais, confira [Sobre o ghe-migrator](/pt/enterprise-server@3.22/migrations/using-ghe-migrator/about-ghe-migrator#types-of-migrations).

1. Informe os integrantes da organização que você fará uma migração. Dependendo do número de repositórios exportados, a exportação pode levar vários minutos. A migração completa (com importação) pode levar horas. Portanto, é recomendável fazer uma avaliação para determinar a duração do processo completo. Para saber mais, confira [Sobre o ghe-migrator](/pt/enterprise-server@3.22/migrations/using-ghe-migrator/about-ghe-migrator#types-of-migrations).

2. Inicie uma migração enviando uma solicitação `POST` ao [ponto de extremidade da migração](/pt/rest/migrations#start-an-organization-migration). Você precisará de:

   * Token de acesso para autenticação;

   * Uma [lista dos repositórios](/pt/rest/repos#list-organization-repositories) que você deseja migrar:

     ```shell
     curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \
     -X POST \
     -H "Accept: application/vnd.github+json" \
     -d'{"lock_repositories":true,"repositories":["ORG_NAME/REPO_NAME", "ORG_NAME/REPO_NAME"]}' \
     https://api.github.com/orgs/ORG_NAME/migrations
     ```

   * Caso deseje bloquear os repositórios antes de migrá-los, defina `lock_repositories` como `true`. Fazer isso é altamente recomendável.

   * Você pode excluir anexos de arquivo passando `exclude_attachments: true` ao endpoint. Anexos de arquivos podem ser grandes e gerar um volume desnecessário no seu arquivo de migração final. O tamanho do arquivo final precisa ter menos de 20 GB.

   Essa solicitação retorna um `id` exclusivo que representa sua migração. Você precisará dele em ações subsequentes que envolvam a API de Migrações.

3. Envie uma solicitação `GET` ao [ponto de extremidade de status da migração](/pt/rest/migrations#get-an-organization-migration-status) para buscar o status de uma migração. Você precisará de:

   * Token de acesso para autenticação;
   * A `id` exclusiva da migração:

     ```shell
     curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \
     -H "Accept: application/vnd.github+json" \
     https://api.github.com/orgs/ORG_NAME/migrations/ID
     ```

   Os estados das migrações são os seguintes:

   * `pending`, que significa que a migração ainda não foi iniciada.
   * `exporting`, que significa que a migração está em andamento.
   * `exported`, que significa que a migração foi concluída com êxito.
   * `failed`, que significa que a migração falhou.

4. Depois que a migração for exportada, baixe o arquivo de migração enviando uma solicitação `GET` ao [ponto de extremidade de download da migração](/pt/rest/migrations#download-an-organization-migration-archive). Você precisará de:
   * Token de acesso para autenticação;
   * A `id` exclusiva da migração:

     ```shell
     curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \
     -H "Accept: application/vnd.github+json" \
     -L -o migration_archive.tar.gz \
     https://api.github.com/orgs/ORG_NAME/migrations/ID/archive
     ```

5. O arquivo de migração é excluído automaticamente após sete dias. Se preferir excluí-lo mais cedo, envie uma solicitação `DELETE` ao [ponto de extremidade de exclusão do arquivo de migração](/pt/rest/migrations#delete-an-organization-migration-archive). Você precisará de:
   * Token de acesso para autenticação;
   * A `id` exclusiva da migração:

     ```shell
     curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" \
     -X DELETE \
     -H "Accept: application/vnd.github+json" \
     https://api.github.com/orgs/ORG_NAME/migrations/ID/archive
     ```

6. Para preparar os dados de migração arquivados para importação para uma instância do GitHub Enterprise Server, confira [Migrando dados para GitHub Enterprise Server](/pt/enterprise-server@3.22/migrations/using-ghe-migrator/migrating-data-to-github-enterprise-server#preparing-the-migrated-data).