# Migrando seu repositório com Enterprise Live Migrations

Migre de GitHub Enterprise Server para GHE.com com tempo de inatividade mínimo.

> \[!NOTE]
> Enterprise Live Migrations está dentro prévia pública e sujeito a alterações.

> \[!TIP] Ao seguir este guia, você pode consultar o [Referência da CLI do Enterprise Live Migrations](/pt/enterprise-server@3.22/migrations/elm/elm-cli-reference) para obter informações de uso mais detalhadas. Se você encontrar erros, consulte [Solução de problemas de migrações dinâmicas do GitHub Enterprise Server para o GHE.com](/pt/enterprise-server@3.22/migrations/elm/troubleshooting).

## Pré-requisitos

Verifique se você está pronto para a migração. Consulte [Preparando sua migração ao vivo do GitHub Enterprise Server para o GHE.com](/pt/enterprise-server@3.22/migrations/elm/prepare-for-your-migration).

## 1. Criar tokens de acesso

Você deve autenticar com um personal access token (classic) tanto para a origem quanto para o destino da migração. Para obter instruções detalhadas, confira [Gerenciar seus tokens de acesso pessoal](/pt/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic).

**Anote ambos os tokens**, pois você precisará deles na próxima etapa.

1. Crie um personal access token (classic) em **GitHub Enterprise Server** com os escopos a seguir.

   * `repo`
   * `admin:org`
   * `admin:repo_hook`
   * `admin:org_hook`

2. Crie um personal access token (classic) em **GHE.com** com os escopos a seguir.

   * `repo`
   * `workflow`
   * `admin:org`
   * `admin:repo_hook`
   * `admin:enterprise`

3. Se o logon único for imposto na organização de destino GHE.com, autorize o token GHE.com.

## 2. Configurar GitHub Enterprise Server

Você deve definir alguma configuração na GitHub Enterprise Server instância antes de executar uma migração. Esses valores de configuração se aplicam a todas as ELM migrações. Os desenvolvedores que utilizam GitHub Enterprise Server podem passar por um breve tempo de inatividade ao aplicar a nova configuração.

1. Acesse o GitHub Enterprise Server shell administrativo por SSH. Consulte [Acessar o shell administrativo (SSH)](/pt/enterprise-server@3.22/admin/administering-your-instance/administering-your-instance-from-the-command-line/accessing-the-administrative-shell-ssh).
2. Defina as variáveis de configuração a seguir com `ghe-config`.

   Por exemplo: `ghe-config app.elm-exporter.enabled true`

   | Variable                                             | Defina isso como...                                                                     |
   | ---------------------------------------------------- | --------------------------------------------------------------------------------------- |
   | `app.elm-exporter.enabled`                           | `true`                                                                                  |
   | `app.elm.internal-webhooks-enabled`                  | `true`                                                                                  |
   | `app.elm-exporter.webhooks-loopback-address-enabled` | `true`                                                                                  |
   | `secrets.elm-exporter.migration-target-url`          | A URL da API para sua empresa de destino (por exemplo: `https://api.octocorp.ghe.com`). |

**Não** inclua uma barra no final da URL. |
\| `secrets.elm-exporter.migration-target-token` | O token de acesso que você criou para GHE.com. |
\| `secrets.elm-exporter.source-token` | O token de acesso que você criou para GitHub Enterprise Server. |
\| `secrets.elm-exporter.source-user` | O nome de usuário associado ao GitHub Enterprise Server token (por exemplo: `ghe-admin`). |
\| `app.migrations.enabled` | Se você ainda não tiver migrações habilitadas na instância, deverá defini-la como `true`. |

1. Aplicar a configuração.

   ```shell copy
   ghe-config-apply
   ```

## 3. Definir variáveis de ambiente necessárias

Quando a configuração tiver sido aplicada e antes de iniciar uma migração, defina as variáveis de ambiente necessárias. Por exemplo:

```shell
export API_URL='http://localhost:1738'
```

> \[!IMPORTANT] Copie os valores para `API_URL` e `MIGRATION_MANAGER_HMAC_KEY` exatamente. As outras variáveis são específicas para seu ambiente.

| Variable                                  | Valor necessário                                                                        |
| ----------------------------------------- | --------------------------------------------------------------------------------------- |
| API\_URL                                  | `http://localhost:1738`                                                                 |
| MIGRATION\_MANAGER\_HMAC\_KEY             | `$(ghe-config secrets.elm-exporter.elm-exporter-hmac-keys)`                             |
| MIGRATION\_TARGET\_URL                    | A URL da API para sua empresa de destino (por exemplo: `https://api.octocorp.ghe.com`). |
| **Não** inclua uma barra no final da URL. |                                                                                         |
| MIGRATION\_TARGET\_TOKEN                  | O personal access token (classic) para GHE.com                                          |

Qualquer um desses valores também pode ser fornecido como sinalizadores da CLI em qualquer `elm` comando, o que terá prioridade sobre as variáveis. Por exemplo: `--api-url http://localhost:1738`.

## 4. Criar uma migração

Crie uma nova migração especificando os detalhes do repositório de origem e de destino.
`--pat-name` deve ser definido `system-pat` como um valor estático. Os outros valores são espaços reservados específicos para seu ambiente.

> \[!NOTE] O `target-org` pode ser novo ou existente. Se a organização de destino ainda não existir, ela será criada durante a migração. No entanto, nenhuma configuração da organização de origem será migrada.

```shell copy
elm migration create \
  --source-org EXISTING-GHES-ORG \
  --source-repo EXISTING-GHES-REPO \
  --target-org GHEC-ORG \
  --target-repo NEW-GHEC-REPO \
  --target-api GHEC-API-URL \
  --pat-name system-pat
```

Por exemplo:

```shell
elm migration create \
  --source-org my-ghes-org \
  --source-repo my-ghes-repo \
  --target-org my-dr-org \
  --target-repo my-dr-repo \
  --target-api $MIGRATION_TARGET_URL \
  --pat-name system-pat
```

Sinalizadores opcionais:

* `--start`: se você estiver pronto para iniciar a migração imediatamente.
* `--target-visibility`: repositórios migrados são criados com visibilidade **interna** por padrão, mas você pode especificar `private`.

### Salvar o ID da migração

Você deverá ver uma resposta semelhante à seguinte:

```json
{
  "migrationId": "2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9",
  "expiresAt": "2026-02-11T21:49:33.619162159Z"
}
```

Exporte como `migrationId` uma variável, pois você precisará dela para os próximos comandos. Por exemplo:

```shell
export MIGRATION_ID='2b5c9eae-b5da-4306-ab04-2a29cc2b7cb9'
```

## 5. Iniciar a migração

Se você ainda não iniciou a migração, inicie-a agora usando a ID de migração que você acabou de salvar.

```shell copy
elm migration start --migration-id $MIGRATION_ID
```

Isso inicia os processos de backfill e atualização em tempo real.
ELM agora está coletando dados do repositório de origem e monitorando eventos de webhook com suporte.

## 6. Monitorar a migração

Quando a migração for iniciada, você deverá ver um novo repositório.GHE.com Durante a migração, você verá o preenchimento do repositório com uma carga inicial de dados e receberá atualizações à medida que os desenvolvedores continuarem a trabalhar no repositório de origem.

Execute o comando a seguir regularmente para monitorar o status da migração. Você verá um detalhamento dos status da origem e do destino e informações sobre dados dinâmicos sendo migrados.

```shell copy
elm migration status --migration-id $MIGRATION_ID
```

O indicador mais importante na resposta é o status no objeto **combinedState** . Quando o status chegar `COMBINED_STATUS_READY_FOR_CUTOVER`, você deverá estar pronto para prosseguir para a próxima etapa. No entanto, você será alertado no `displayMessage` se algum recurso individual não tiver migrado, o que talvez seja necessário investigar.

Por exemplo:

```json
  "combinedState":  {
    "status":  "COMBINED_STATUS_READY_FOR_CUTOVER",
    "displayMessage":  "Ready for cutover (1 resources failed)",
    "repositories":  [
      {
        "repositoryNwo":  "new-test-org/my-new-repo",
        "phase":  "REPOSITORY_PHASE_READY_FOR_CUTOVER",
        "displayStatus":  "Ready for cutover (1 failed)"
      }
    ],
    "readyForCutover":  true,
    "cutoverBlockers":  []
  },
```

Dicas:

* Se você estiver executando várias migrações, poderá verificar o status de todas elas com `elm migration list`. Esse comando mostra migrações em andamento por padrão, mas você também pode filtrar por `--status`.
* Se você encontrar status de falha que exijam atenção, consulte [Solução de problemas de migrações dinâmicas do GitHub Enterprise Server para o GHE.com](/pt/enterprise-server@3.22/migrations/elm/troubleshooting#statuses-and-recommended-actions).

## 7. Concluir a migração

Quando uma migração estiver pronta para entrada em operação, você pode concluir a migração. O processo de migração arquivará o repositório de origem, fazendo com que ele fique **permanentemente em modo somente leitura**, a menos que um administrador do repositório o desarquive.

```shell copy
elm migration cutover-to-destination --migration-id $MIGRATION_ID
```

Continue monitorando a migração. Quando você vê o `MIGRATION_STATUS_COMPLETED` status na parte superior da resposta, a migração é concluída, embora haja algumas tarefas de acompanhamento para dar acesso aos usuários de GitHub Enterprise Server.

## Próximas Etapas 

Dê aos usuários acesso ao novo repositório e reconcilie a atividade com contas de usuário. Consulte [Concluindo sua migração ao vivo do GitHub Enterprise Server para o GHE.com](/pt/enterprise-server@3.22/migrations/elm/complete-your-migration).