# Como importar um repositório do Mercurial

Você pode importar um repositório do Mercurial convertendo o repositório no Git e, em seguida, efetuando push do repositório Git para o GitHub.

## Pré-requisitos

Para seguir estas etapas, você precisa usar um sistema macOS ou Linux e ter as seguintes ferramentas instaladas:

* [Mercurial](https://www.mercurial-scm.org)
* [Git](https://git-scm.com/downloads)
* Armazenamento de Arquivos Grandes do Git (Git LFS) (confira [Instalar o Git Large File Storage](/pt/enterprise-server@3.20/repositories/working-with-files/managing-large-files/installing-git-large-file-storage))
* [Python](https://www.python.org), incluindo o gerenciador de pacotes `pip`

## Como importar um repositório do Mercurial

1. Crie um novo repositório em GitHub. Para evitar erros, não inicialize o novo repositório com arquivos LEIAME, de licença ou gitignore. É possível adicionar esses arquivos após o push do projeto para o GitHub. Para saber mais, confira [Criar um repositório](/pt/enterprise-server@3.20/repositories/creating-and-managing-repositories/creating-a-new-repository).

2. Para confirmar se o Mercurial está instalado no computador, execute `hg --version`.

   A saída será semelhante a `Mercurial Distributed SCM (version 6.4)`.

3. Para confirmar se o Git está instalado no computador, execute `git --version.`

   A saída será parecida com `git version 2.40.0`.

4. Para confirmar se o Git LFS está instalado no computador, execute `git lfs --version`.

   A saída será parecida com `git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1)`.

5. Para confirmar se o `pip` está instalado no computador, execute `pip --version`.

   A saída será semelhante a `pip 21.2.4`.

6. Para instalar o pacote `mercurial` do Python, execute `pip install mercurial`.

7. Baixe a última release do [fast-export](https://github.com/frej/fast-export/releases) para o computador e extraia o arquivo.

8. Acesse o diretório extraído e execute `./hg-fast-export.sh --help`.

   A saída deve começar com `usage: hg-fast-export.sh`.

9. Clone seu repositório do Mercurial.

   Por exemplo, para clonar o código-fonte do próprio Mercurial no diretório `mercurial-repo`, execute `hg clone https://www.mercurial-scm.org/repo/hg mercurial-repo`.

10. Crie um diretório, vá para o novo diretório e inicialize um novo repositório Git.

    Por exemplo, caso você deseje nomear seu novo repositório `mercurial-git`, execute `mkdir mercurial-git && cd mercurial-git && git init`.

11. Acesse o diretório do repositório Git recém-criado.

12. Para configurar seu novo repositório Git para tratar o uso de maiúsculas e minúsculas de nomes de arquivos da mesma forma que o Mercurial, execute `git config core.ignoreCase false`.

13. Para obter uma lista de committers no seu projeto Mercurial e armazenar a lista em `committers.txt`, execute o seguinte script.

    ```shell copy
    hg log --template "{author}\n" | sort | uniq > committers.txt
    ```

14. Atualize o arquivo `committers.txt`, mapeando o nome do autor do commit usado no repositório do Mercurial para o nome que você deseja usar no repositório Git, com o seguinte formato:

    ```text
    “The Octocat <octocato@gmail.com>”=”Octocat <octocat@github.com>”
    ```

15. No repositório Git inicializado, execute `hg-fast-export.sh`, transmitindo o caminho para o repositório do Mercurial e o caminho para o arquivo `committers.txt` como argumentos.

    Por exemplo, `../fast-export-221024/hg-fast-export.sh -r ../mercurial-repo -A ../mercurial-repo/committers.txt -M main`.

16. Após a conclusão da importação, para fazer check-out do repositório Git recém-criado, execute `git checkout HEAD`.

17. Para adicionar o repositório GitHub como um repositório remoto, execute `git remote add origin URL`, substituindo `URL` pela URL do repositório GitHub criado anteriormente, como `https://github.com/octocat/example-repository.git`.

18. Para efetuar push do repositório para o GitHub, execute `git push --mirror origin`.

    Se o repositório contiver arquivos maiores que o limite de tamanho do arquivo do GitHub, poderá ocorrer uma falha no push. Mova os arquivos grandes para o Git LFS executando `git lfs import` e tente novamente.