# Como migrar organizações do GitHub.com para o GitHub Enterprise Cloud

Você pode migrar organizações do GitHub.com para o GitHub Enterprise Cloud usando a GitHub CLI ou a API do GraphQL.

## Sobre as migrações de repositório com o GitHub Enterprise Importer

As migrações para GitHub Enterprise Cloud incluem migrações entre contas em GitHub.com e, se você estiver adotando residência de dados, migrações para o subdomínio da sua empresa em GHE.com.

Você pode executar a migração com a GitHub CLI ou a API.

A GitHub CLI simplifica o processo de migração e é recomendada para a maioria dos clientes. Os clientes avançados com necessidades de personalização intensiva podem usar a API para criar integrações próprias ao GitHub Enterprise Importer.

<div class="ghd-tool cli">
Para ver instruções para usar a API, use o alternador de ferramentas na parte superior da página.
</div>

<div class="ghd-tool api">
Para ver instruções para usar os dados da GitHub CLI, use o alternador de ferramentas na parte superior da página.
</div>

Se a organização de destino ou a empresa tiver conjuntos de regras habilitados, o histórico do repositório migrado poderá violar essas regras. Para permitir a migração sem desabilitar seus conjuntos de regras, adicione "Migrações de repositório" à lista de bypass para cada conjunto de regras aplicável.  Esse bypass se aplica somente durante a migração. Após a conclusão, os conjuntos de regras serão aplicados em todas as novas contribuições.

Para configurar o bypass:

1. Navegue até cada conjunto de regras da empresa ou da organização.
2. Na seção "Lista de bypass", clique em **Adicionar bypass**.
3. Selecione **migrações de repositório**.

Para obter mais informações, consulte [Criar conjuntos de regras para repositórios na sua organização](/pt/enterprise-cloud@latest/organizations/managing-organization-settings/creating-rulesets-for-repositories-in-your-organization) e [Configuração de exceções de regras para migrações de repositório](/pt/enterprise-cloud@latest/migrations/troubleshooting/setting-ruleset-bypasses-for-repository-migrations).

## Pré-requisitos

* Recomendamos fortemente que você faça uma execução de avaliação da migração e conclua a migração de produção logo em seguida. Para saber mais sobre execuções de avaliação, confira [Visão geral de uma migração entre produtos GitHub](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/overview-of-a-migration-between-github-products#running-your-migrations).
* Certifique-se de entender os dados que serão migrados e as limitações de suporte conhecidas do Importador. Para obter mais informações, consulte [Sobre migrações entre produtos do GitHub com GitHub Enterprise Importer](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/about-migrations-between-github-products).
* Embora não seja necessário, recomendamos interromper o trabalho durante a migração de produção. O Importer não dá suporte a migrações delta, ou seja, as alterações que ocorrerem durante a migração não serão migradas. Se você optar por não interromper o trabalho durante a migração de produção, precisará migrar manualmente essas alterações.
* Na organização de origem, você precisa ser um proprietário da organização ou ter a função de migrador. Para saber mais, confira [Gerenciando o acesso para uma migração entre produtos GitHub](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/managing-access-for-a-migration-between-github-products#about-the-migrator-role).
* Na conta empresarial de destino, você precisa ser um proprietário da empresa.
* As migrações da organização podem migrar organizações com até 5 mil repositórios. Se uma organização contiver mais de 5 mil repositórios, siga as instruções para [Como migrar repositórios do GitHub.com para o GitHub Enterprise Cloud](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/migrating-repositories-from-githubcom-to-github-enterprise-cloud).

<div class="ghd-tool api">

## Etapa 0: Preparar-se para usar a API do GraphQL do GitHub

Para fazer consultas do GraphQL, você precisará escrever seus scripts ou usar um cliente HTTP como o [Insomnia](https://insomnia.rest/).

Para saber mais sobre como começar a usar a API do GraphQL do GitHub, incluindo como se autenticar, confira [Realizar chamadas com o GraphQL](/pt/enterprise-cloud@latest/graphql/guides/forming-calls-with-graphql).

Você enviará todas as consultas GraphQL para o **destino** da sua migração. Se você estiver migrando para o GitHub Enterprise Cloud com residência de dados, envie consultas para o ponto de extremidade do subdomínio da sua empresa do GHE.com.

## Etapa 1: Obter a ID da empresa do destino de migração

Como proprietário da empresa no GitHub.com, use a consulta a seguir para retornar a ID da conta empresarial da qual você deseja ser o proprietário da organização migrada. Você precisará da ID da empresa para identificar o destino de migração.

```graphql
query(
  $slug: String!
){
  enterprise (slug: $slug)
  {
    slug
    id
  }
}
```

| Variável da consulta | Descrição                                                                                                                                                                   |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `slug`               | O campo de dados dinâmico da conta empresarial, que você pode identificar conferindo a URL da sua empresa, `https://github.com/enterprises/SLUG` ou `https://SLUG.ghe.com`. |

## Etapa 2: Iniciar a migração da sua organização

Quando você inicia uma migração, uma organização individual e os respectivos dados complementares são migrados para uma nova organização com a empresa de destino identificada por você.

```graphql
mutation startOrganizationMigration (
  $sourceOrgUrl: URI!,
  $targetOrgName: String!,
  $targetEnterpriseId: ID!,
  $sourceAccessToken: String!,
    $targetAccessToken: String!
){
  startOrganizationMigration( input: {
    sourceOrgUrl: $sourceOrgUrl,
    targetOrgName: $targetOrgName,
    targetEnterpriseId: $targetEnterpriseId,
    sourceAccessToken: $sourceAccessToken,
        targetAccessToken: $targetAccessToken
  }) {
    orgMigration {
      id
    }
  }
}
```

| Variável da consulta | Descrição                                                                                                                                                                                                                                                                                                                                                                  |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sourceOrgUrl`       | A URL da organização de origem, como `https://github.com/octo-org`.                                                                                                                                                                                                                                                                                                        |
| `targetOrgName`      | O nome que você deseja dar à nova organização. Não pode ser compartilhado por outra organização na sua plataforma de destino.                                                                                                                                                                                                                                              |
| `targetEnterpriseId` | A ID da empresa na qual você deseja criar a organização, retornada pela etapa 2.                                                                                                                                                                                                                                                                                           |
| `sourceAccessToken`  | O personal access token (classic) da organização de origem. Para ver os requisitos, consulte [Gerenciando o acesso para uma migração entre produtos GitHub](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/managing-access-for-a-migration-between-github-products#required-scopes-for-personal-access-tokens). |
| `targetAccessToken`  | O personal access token (classic) da empresa de destino.                                                                                                                                                                                                                                                                                                                   |

Na próxima etapa, você usará a ID de migração retornada da mutação `startOrganizationMigration` para verificar o status da migração.

## Etapa 3: Verificar o status da migração

Para detectar falhas de migração e garantir que a migração esteja funcionando, consulte as `OrganizationMigration`s que você criou para ver o status de migração usando a consulta `getMigration`.

A consulta será retornada com um status para que você saiba se a migração é `queued`, `in progress`, `failed` ou `completed`, além de informações sobre quantos repositórios estão esperando para serem migrados. Em caso de falha na migração, o Importer fornecerá um motivo para a falha.

```graphql
query (
  $id: ID!
){
  node( id: $id ) {
    ... on OrganizationMigration {
      id
            sourceOrgUrl
            targetOrgName
      state
      failure_reason
      remaining_repositories_count
      total_repositories_count
    }
  }
}
```

| Variável da consulta | Descrição           |
| -------------------- | ------------------- |
| `id`                 | A `id` da migração. |

</div>

<div class="ghd-tool cli">

## Etapa 1: Instalar a GEI extension of the GitHub CLI

Se essa for sua primeira migração, você precisará instalar a GEI extension of the GitHub CLI. Para obter mais informações sobre a GitHub CLI, confira [Sobre GitHub CLI](/pt/enterprise-cloud@latest/github-cli/github-cli/about-github-cli).

1. Instale a GitHub CLI. Para obter instruções de instalação para GitHub CLI, veja o [repositório GitHub CLI](https://github.com/cli/cli#installation).

   > \[!NOTE]
   > Você precisa ter a versão 2.4.0 ou mais recente da GitHub CLI. Verifique a versão instalada com o comando `gh --version`.
2. Instale o GEI extension.

   ```shell copy
   gh extension install github/gh-gei
   ```

Sempre que precisar de ajuda com a GEI extension, use o sinalizador `--help` com um comando. Por exemplo, `gh gei --help` listará todos os comandos disponíveis, e `gh gei migrate-repo --help` listará todas as opções disponíveis para o comando `migrate-repo`.

## Etapa 2: Atualizar a GEI extension of the GitHub CLI

A GEI extension é atualizada semanalmente. Para garantir que você esteja usando a última versão, atualize a extensão.

```shell
gh extension upgrade github/gh-gei
```

## Etapa 3: Definir variáveis de ambiente

Para usar a GEI extension para migrar para o GitHub Enterprise Cloud, crie personal access tokens (classic) que possam acessar a organização de origem e a empresa de destino e defina os personal access tokens (classic) como variáveis de ambiente.

1. Crie e registre um personal access token que atenda a todos os requisitos para autenticação da organização de origem para as migrações da organização. Para saber mais, confira [Gerenciando o acesso para uma migração entre produtos GitHub](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/migrating-between-github-products/managing-access-for-a-migration-between-github-products#creating-a-personal-access-token-for-github-enterprise-importer).

2. Crie e registre um personal access token (classic) que atenda a todos os requisitos para autenticação da empresa de destino para as migrações da organização.

3. Defina variáveis de ambiente para os personal access tokens (classic), substituindo TOKEN nos comandos abaixo pelos personal access tokens (classic) que você registrou acima. Use `GH_PAT` para a empresa de destino e `GH_SOURCE_PAT` para a organização de origem.

   * Se você estiver usando o Terminal, use o comando `export`.

     ```shell copy
     export GH_PAT="TOKEN"
     export GH_SOURCE_PAT="TOKEN"
     ```

   * Se você estiver usando o PowerShell, use o comando `$env`.

     ```shell copy
     $env:GH_PAT="TOKEN"
     $env:GH_SOURCE_PAT="TOKEN"
     ```

4. Se você estiver migrando para GitHub Enterprise Cloud com residência de dados, por conveniência, defina uma variável de ambiente para a **URL de API base** para sua empresa.

   Certifique-se de substituir `SUBDOMAIN` pelo subdomínio da sua empresa. Por exemplo, se o subdomínio da sua empresa for `acme`, o `TARGET_API_URL` valor será `https://api.acme.ghe.com`.

   * Se você estiver usando o Terminal, use o comando `export`.

     ```shell copy
     export TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
     ```

   * Se você estiver usando o PowerShell, use o comando `$env`.

     ```shell copy
     $env:TARGET_API_URL="https://api.SUBDOMAIN.ghe.com"
     ```

   Você usará essa variável com a opção `--target-api-url` em comandos executados com o GitHub CLI.

## Etapa 4: Migrar sua organização

Para migrar uma organização, use o comando `gh gei migrate-org`.

```shell copy
gh gei migrate-org --github-source-org SOURCE --github-target-org DESTINATION --github-target-enterprise ENTERPRISE
```

> \[!NOTE] Se você estiver migrando para o GHE.com, adicione `--target-api-url TARGET-API-URL`, em que TARGET-API-URL é a URL da API base para o subdomínio da sua empresa. Por exemplo: `https://api.octocorp.ghe.com`.

Substitua os espaços reservados no comando acima pelos valores a seguir.

| Espaço reservado | Valor                                                                                                                                                                    |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| SOURCE           | Nome da organização de origem                                                                                                                                            |
| DESTINO          | O nome que você deseja dar à nova organização. Não pode ser compartilhado por outra organização na sua plataforma de destino.                                            |
| EMPRESA          | O slug da sua empresa de destino, que você pode identificar consultando o URL da sua conta empresarial, `https://github.com/enterprises/SLUG` ou `https://SLUG.ghe.com`. |

## Etapa 5: Validar a migração e verificar o log de erros

</div>

<div class="ghd-tool api">

## Etapa 4: Validar a migração e verificar o log de erros

</div>

Após a conclusão da migração, recomendamos que você verifique o repositório do log de migração. Para saber mais, confira [Como acessar os logs de migração do GitHub Enterprise Importer](/pt/enterprise-cloud@latest/migrations/using-github-enterprise-importer/completing-your-migration-with-github-enterprise-importer/accessing-your-migration-logs-for-github-enterprise-importer#accessing-an-organization-migration-log).

Por fim, recomendamos que você faça uma verificação de integridade da sua organização e dos repositórios migrados.