# Migrando dados para GitHub Enterprise Server

Depois de gerar um arquivo de migração, você pode importar os dados para a instância de destino GitHub Enterprise Server. Antes de aplicar as alterações permanentemente na instância de destino, será possível revisá-las para resolver possíveis conflitos.

## Preparando os dados migrados

1. Usando o [`scp`](https://acloudguru.com/blog/engineering/ssh-and-scp-howto-tips-tricks#scp) comando, copie o arquivo de migração gerado de sua instância de origem ou organização para seu GitHub Enterprise Server destino:

   ```shell
   scp -P 122 PATH-TO-MIGRATION-GUID.tar.gz admin@HOSTNAME:/home/admin/
   ```

2. SSH em sua instância de destino GitHub Enterprise Server . Para saber mais, confira [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).

   ```shell
   ssh -p 122 admin@HOSTNAME
   ```

3. Verifique se o arquivo de migração tem permissões de leitura suficientes.

   ```shell
   chmod 644 /home/admin/MIGRATION-GUID.tar.gz
   ```

4. Use o comando `ghe-migrator prepare` para preparar o arquivo para importação na instância de destino e gerar um novo GUID de Migração para você usar nas etapas seguintes:

   ```shell
   ghe-migrator prepare /home/admin/MIGRATION-GUID.tar.gz
   ```

   * Para iniciar uma nova tentativa de importação, execute `ghe-migrator prepare` novamente e obtenha um novo GUID de Migração.
   * Para especificar o local em que os arquivos de migração devem ser preparados, acrescente `--staging-path=/full/staging/path` ao comando. Assume o padrão de `/data/user/tmp`.

## Gerar uma lista de conflitos de migração

1. Usando o comando `ghe-migrator conflicts` com o GUID de Migração, gere um arquivo *conflicts.csv*:

   ```shell
   ghe-migrator conflicts -g MIGRATION-GUID > conflicts.csv
   ```

   * Se nenhum conflito for relatado, você poderá importar os dados com segurança.

2. Se houver conflitos, usando o comando [`scp`](https://acloudguru.com/blog/engineering/ssh-and-scp-howto-tips-tricks#scp), copie *conflicts.csv* para o computador local:

   ```shell
   scp -P 122 admin@HOSTNAME:conflicts.csv ~/Desktop
   ```

3. Prossiga para [Como resolver conflitos de migração ou configurar mapeamentos personalizados](#resolving-migration-conflicts-or-setting-up-custom-mappings).

## Revisar conflitos de migração

1. Usando um editor de texto ou um [software de planilha compatível com CSV](https://en.wikipedia.org/wiki/Comma-separated_values#Application_support), abra *conflicts.csv*.
2. Com as diretrizes dos exemplos e das tabelas de referência abaixo, revise o arquivo *conflicts.csv* para garantir que as ações adequadas sejam tomadas após a importação.

O arquivo *conflicts.csv* contém um mapa de *migração* de conflitos e ações recomendadas. O mapa de migração lista quais dados estão sendo migrados da origem e como eles serão aplicados ao destino.

| `model_name`   | `source_url`                                           | `target_url`                                           | `recommended_action` |
| -------------- | ------------------------------------------------------ | ------------------------------------------------------ | -------------------- |
| `user`         | `https://example-gh.source/octocat`                    | `https://example-gh.target/octocat`                    | `map`                |
| `organization` | `https://example-gh.source/octo-org`                   | `https://example-gh.target/octo-org`                   | `map`                |
| `repository`   | `https://example-gh.source/octo-org/widgets`           | `https://example-gh.target/octo-org/widgets`           | `rename`             |
| `team`         | `https://example-gh.source/orgs/octo-org/teams/admins` | `https://example-gh.target/orgs/octo-org/teams/admins` | `merge`              |

Cada linha do *conflicts.csv* fornece as seguintes informações:

| Nome                 | Descrição                                                            |
| -------------------- | -------------------------------------------------------------------- |
| `model_name`         | Tipo de dado que está sendo alterado.                                |
| `source_url`         | URL de origem dos dados.                                             |
| `target_url`         | URL esperada de destino dos dados.                                   |
| `recommended_action` | A ação preferencial `ghe-migrator` será tomada ao importar os dados. |

### Mapeamentos possíveis para cada tipo de registro

Há várias ações de mapeamento diferentes que o `ghe-migrator` pode executar ao transferir os dados:

| `action`        | Descrição                                                                                                                                                                                                                                                  | Modelos aplicáveis                   |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| `import`        | (padrão) Os dados da origem são importados para o destino.                                                                                                                                                                                                 | Todos os tipos de registro           |
| `map`           | Em vez de criar um novo modelo com base nos dados de origem, um registro existente no destino é usado. Útil para importar um repositório para uma organização existente ou mapear identidades de usuário no destino para identidades de usuário na origem. | Usuários, organizações               |
| `rename`        | Os dados da origem são renomeados e copiados para o destino.                                                                                                                                                                                               | Usuários, organizações, repositórios |
| `map_or_rename` | Se houver destino, mapeie para o destino. Caso contrário, renomeie o modelo importado.                                                                                                                                                                     | Usuários                             |
| `merge`         | Os dados da origem são combinados com os dados existentes no destino.                                                                                                                                                                                      | Teams                                |

**Sugerimos que você revise o arquivo *conflicts.csv* e use `ghe-migrator audit` para garantir que as ações adequadas sejam executadas.** Se estiver tudo certo, você poderá continuar.

## Resolver conflitos de migração ou configurar mapeamentos personalizados

Se você acredita que o `ghe-migrator` executará uma alteração incorreta, faça correções alterando os dados em *conflicts.csv*. Faça alterações em uma das linhas do *conflicts.csv*.

Por exemplo, digamos que você observe que o usuário `octocat` da origem está sendo mapeado para `octocat` no destino.

| `model_name` | `source_url`                        | `target_url`                        | `recommended_action` |
| ------------ | ----------------------------------- | ----------------------------------- | -------------------- |
| `user`       | `https://example-gh.source/octocat` | `https://example-gh.target/octocat` | `map`                |

Você pode optar por mapear o usuário para outro usuário no destino. Suponha que você saiba que `octocat` deve realmente ser `monalisa` no destino. Altere a coluna `target_url` no *conflicts.csv* para que ela se refira a `monalisa`.

| `model_name` | `source_url`                        | `target_url`                         | `recommended_action` |
| ------------ | ----------------------------------- | ------------------------------------ | -------------------- |
| `user`       | `https://example-gh.source/octocat` | `https://example-gh.target/monalisa` | `map`                |

Como outro exemplo, se quiser renomear o repositório `octo-org/widgets` como `octo-org/amazing-widgets` na instância de destino, altere a `target_url` para `octo-org/amazing-widgets` e a `recommend_action` para `rename`.

| `model_name` | `source_url`                                 | `target_url`                                         | `recommended_action` |
| ------------ | -------------------------------------------- | ---------------------------------------------------- | -------------------- |
| `repository` | `https://example-gh.source/octo-org/widgets` | `https://example-gh.target/octo-org/amazing-widgets` | `rename`             |

### Adicionar mapeamentos personalizados

Uma situação comum durante as migrações é o cenário em que os usuários migrados têm nomes de usuários diferentes no destino e na origem.

Com uma lista de nomes de usuários da origem e uma lista de nomes de usuários do destino, você pode criar um arquivo CSV com mapeamentos personalizados e aplicá-la para garantir que o nome de usuário e o conteúdo de cada usuário sejam atribuídos corretamente no fim da migração.

Você pode gerar rapidamente um CSV de usuários que estão sendo migrados no formato CSV necessário para aplicar os mapeamentos personalizados usando o comando `ghe-migrator audit`:

```shell
ghe-migrator audit -m user -g MIGRATION-GUID > users.csv
```

Agora, você pode editar esse CSV e inserir a nova URL para cada usuário que você deseja mapear ou renomear e atualizar a quarta coluna para ter `map` ou `rename`, conforme apropriado.

Por exemplo, para renomear o usuário `octocat` como `monalisa` no destino `https://example-gh.target`, crie uma linha com o seguinte conteúdo:

| `model_name` | `source_url`                        | `target_url`                         | `state`  |
| ------------ | ----------------------------------- | ------------------------------------ | -------- |
| `user`       | `https://example-gh.source/octocat` | `https://example-gh.target/monalisa` | `rename` |

O mesmo processo pode ser usado para criar mapeamentos em cada registro compatível com mapeamentos personalizados. Para obter mais informações, confira [nossa tabela sobre os possíveis mapeamentos para registros](#possible-mappings-for-each-record-type).

### Aplicar dados de migração modificados

1. Depois de fazer alterações, use o comando [`scp`](https://acloudguru.com/blog/engineering/ssh-and-scp-howto-tips-tricks#scp) para aplicar o *conflicts.csv* modificado (ou qualquer outro arquivo *.csv* de mapeamento no formato correto) à instância de destino:

   ```shell
   scp -P 122 ~/Desktop/conflicts.csv admin@HOSTNAME:/home/admin/
   ```

2. Mapeie novamente os dados de migração usando o comando `ghe-migrator map`, transmitindo o caminho para o arquivo *.csv* modificado e o GUID de Migração:

   ```shell
   ghe-migrator map -i conflicts.csv -g MIGRATION-GUID
   ```

3. Se o comando `ghe-migrator map -i conflicts.csv -g MIGRATION-GUID` relatar que ainda há conflitos, execute o processo de resolução de conflitos de migração novamente.

## Aplicando os dados importados em GitHub Enterprise Server

1. SSH em sua instância de destino GitHub Enterprise Server . Para saber mais, confira [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).

   ```shell
   ssh -p 122 admin@HOSTNAME
   ```

2. Usando o comando `ghe-migrator import`, inicie o processo de importação. Você precisará de:

   * Seu GUID de Migração. Para obter mais informações, consulte [Preparando os dados migrados para importação para GitHub Enterprise Server](#preparing-the-migrated-data).
   * Seu personal access token para autenticação. O personal access token que você usa é apenas para autenticação como administrador de site e não requer nenhuma permissão ou escopo específico. Para saber mais, confira [Gerenciar seus tokens de acesso pessoal](/pt/enterprise-server@3.22/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).

   ```shell
   $ ghe-migrator import /home/admin/MIGRATION-GUID.tar.gz -g MIGRATION-GUID -u USERNAME -p TOKEN

   > Starting GitHub::Migrator
   > Import 100% complete /
   ```

   * Para especificar o local em que os arquivos de migração devem ser preparados, acrescente `--staging-path=/full/staging/path` ao comando. Assume o padrão de `/data/user/tmp`.

## Revisar dados de migração

Por padrão, `ghe-migrator audit` retorna todos os registros. Também é possível filtrar os registros por:

* Tipos de registro;
* Estado dos registros

Os tipos de registros correspondem aos encontrados nos [dados migrados](/pt/enterprise-server@3.22/migrations/using-ghe-migrator/about-ghe-migrator#migrated-data).

## Filtros por tipo de registro

| Tipo de registro                              | Nome do filtro                |
| --------------------------------------------- | ----------------------------- |
| Usuários                                      | `user`                        |
| Organizações                                  | `organization`                |
| Repositórios                                  | `repository`                  |
| Teams                                         | `team`                        |
| Marcos                                        | `milestone`                   |
| Problemas                                     | `issue`                       |
| Comentários dos problemas                     | `issue_comment`               |
| Solicitações de pull                          | `pull_request`                |
| Revisões de pull request                      | `pull_request_review`         |
| Comentários de commit                         | `commit_comment`              |
| Comentários das revisões de pull request      | `pull_request_review_comment` |
| Versões                                       | `release`                     |
| Ações feitas em problemas ou em pull requests | `issue_event`                 |
| Ramificações protegidas                       | `protected_branch`            |

## Filtros por estado de registro

| Estado do registro | Descrição                               |
| ------------------ | --------------------------------------- |
| `export`           | O registro será exportado.              |
| `import`           | O registro será importado.              |
| `map`              | O registro será mapeado.                |
| `rename`           | O registro será renomeado.              |
| `merge`            | O registro será mesclado.               |
| `exported`         | O registro foi exportado com êxito.     |
| `imported`         | O registro foi importado com êxito.     |
| `mapped`           | O registro foi mapeado com êxito.       |
| `renamed`          | O registro foi renomeado com êxito.     |
| `merged`           | O registro passou por merge com êxito.  |
| `failed_export`    | Houve falha ao exportar o registro.     |
| `failed_import`    | Houve falha ao importar o registro.     |
| `failed_map`       | O registro falhou em ser mapeado.       |
| `failed_rename`    | Houve falha ao renomear o registro.     |
| `failed_merge`     | Houve falha ao fazer merge no registro. |

## Filtrar registros auditados

Com o comando `ghe-migrator audit`, você pode filtrar os registros com base no tipo usando o sinalizador `-m`. Da mesma forma, você pode filtrar o estado de importação usando o sinalizador `-s`. O comando se parece com o seguinte:

```shell
ghe-migrator audit -m RECORD_TYPE -s STATE -g MIGRATION-GUID
```

Por exemplo, para visualizar todas as organizações e equipes importadas com êxito, você digitaria:

```shell
$ ghe-migrator audit -m organization,team -s mapped,renamed -g MIGRATION-GUID
> model_name,source_url,target_url,state
> organization,https://gh.source/octo-org/,https://ghe.target/octo-org/,renamed
```

**Recomendamos fortemente auditar todas as importações com falha.** Para fazer isso, você vai inserir:

```shell
$ ghe-migrator audit -s failed_import,failed_map,failed_rename,failed_merge -g MIGRATION-GUID
> model_name,source_url,target_url,state
> user,https://gh.source/octocat,https://gh.target/octocat,failed
> repository,https://gh.source/octo-org/octo-project,https://ghe.target/octo-org/octo-project,failed
```

Se você tiver dúvidas sobre falhas na importação, entre em contato conosco em [Suporte do GitHub Enterprise](https://support.github.com).

## Concluindo a importação em GitHub Enterprise Server

Depois que sua migração for aplicada à sua instância de destino e você tiver revisado a migração, você desbloqueará os repositórios e os excluirá da fonte. Antes de excluir os dados da origem, é recomendável aguardar cerca de duas semanas para garantir o funcionamento adequado de todos os procedimentos.

## Desbloquear repositórios na instância de destino

1. SSH em sua instância do GitHub Enterprise Server. Se sua instância for composta por vários nós, por exemplo, se a alta disponibilidade ou a replicação geográfica estiver configurada, efetue SSH no nó primário. Se você usar um cluster, poderá efetuar SSH em qualquer nó. Substitua HOSTNAME pelo nome do host da instância ou pelo nome do host ou endereço IP de um nó. Para saber mais, confira [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).

   ```shell copy
   ssh -p 122 admin@HOSTNAME
   ```
2. Desbloqueie todos os repositórios importados com o comando `ghe-migrator unlock`. Você precisará de sua GUID de Migração:

```shell
$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project
```

> \[!WARNING]
> Se o repositório contiver GitHub Actions fluxos de trabalho usando o `schedule` gatilho, os fluxos de trabalho não serão executados automaticamente após uma importação. Para iniciar os fluxos de trabalho agendados mais uma vez, envie uma confirmação para o repositório. Para saber mais, confira [Eventos que disparam fluxos de trabalho](/pt/enterprise-server@3.22/actions/reference/workflows-and-actions/events-that-trigger-workflows#schedule).

## Desbloquear repositórios na origem

Após a conclusão da migração, você deve desbloquear os repositórios na origem.

### Desbloqueio de repositórios de uma organização em GitHub.com

Para desbloquear os repositórios em uma organização GitHub.com, você enviará uma `DELETE`solicitação para [o endpoint de desbloqueio da migração](/pt/rest/migrations#unlock-an-organization-repository). Você precisará de:

* Token de acesso para autenticação;
* A característica `id` única da migração
* Nome do repositório a ser desbloqueado.

```shell
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  -H "Accept: application/vnd.github.wyandotte-preview+json" \
  https://api.github.com/orgs/ORG-NAME/migrations/ID/repos/REPO_NAME/lock
```

### Excluindo repositórios de uma organização em GitHub.com

Após desbloquear os repositórios da organização GitHub.com, você deve excluir todos os repositórios que migrou anteriormente usando [o ponto de extremidade de exclusão de repositório](/pt/enterprise-server@3.22/rest/repos/repos#delete-a-repository). Você precisará do token de acesso para autenticação:

```shell
curl -H "Authorization: Bearer GITHUB_ACCESS_TOKEN" -X DELETE \
  https://api.github.com/repos/ORG-NAME/REPO_NAME
```

### Desbloqueio de repositórios de uma GitHub Enterprise Server instância

1. SSH em sua instância do GitHub Enterprise Server. Se sua instância for composta por vários nós, por exemplo, se a alta disponibilidade ou a replicação geográfica estiver configurada, efetue SSH no nó primário. Se você usar um cluster, poderá efetuar SSH em qualquer nó. Substitua HOSTNAME pelo nome do host da instância ou pelo nome do host ou endereço IP de um nó. Para saber mais, confira [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).

   ```shell copy
   ssh -p 122 admin@HOSTNAME
   ```
2. Desbloqueie todos os repositórios importados com o comando `ghe-migrator unlock`. Você precisará de sua GUID de Migração:

```shell
$ ghe-migrator unlock -g MIGRATION-GUID
> Unlocked octo-org/octo-project
```