# 导入 Mercurial 存储库

可以通过将存储库转换为 Git，然后将 Git 存储库推送到 GitHub，从 Mercurial 导入存储库。

## 先决条件

若要执行这些步骤，必须使用 macOS 或 Linux 系统并安装以下工具：

* [Mercurial](https://www.mercurial-scm.org)
* [Git](https://git-scm.com/downloads)
* Git 大型文件存储 (Git LFS)（请参阅“[安装 Git 大文件存储](/zh/enterprise-server@3.18/repositories/working-with-files/managing-large-files/installing-git-large-file-storage)”）
* [Python](https://www.python.org)，包括 `pip` 包管理器

## 导入 Mercurial 存储库

1. 在 GitHub 上创建新存储库。 为避免错误，请勿使用 README、许可或 gitignore 文件初始化新存储库。 你可以在项目推送到 GitHub 之后添加这些文件。 有关详细信息，请参阅“[创建新仓库](/zh/enterprise-server@3.18/repositories/creating-and-managing-repositories/creating-a-new-repository)”。

2. 若要确认计算机上已安装 Mercurial，请运行 `hg --version`。

   输出应类似于 `Mercurial Distributed SCM (version 6.4)`。

3. 若要确认计算机上已安装 Git，请运行 `git --version.`

   输出应类似于 `git version 2.40.0`。1. 若要确认计算机上已安装 Git LFS，请运行 `git lfs --version`。

   输出应类似于 `git-lfs/3.1.4 (GitHub; darwin arm64; go 1.18.1)`。

4. 若要确认计算机上已安装 `pip`，请运行 `pip --version`。

   输出应类似于 `pip 21.2.4`。

5. 若要安装 `mercurial` Python 包，请运行 `pip install mercurial`。

6. 将最新版本的 [fast-export](https://github.com/frej/fast-export/releases) 下载到计算机，然后解压缩存档。

7. 移动到解压缩的目录中，然后运行 `./hg-fast-export.sh --help`。

   输出的开头应为 `usage: hg-fast-export.sh`。

8. 克隆 Mercurial 存储库。

   例如，若要将 Mercurial 本身的源代码克隆到 `mercurial-repo` 目录，请运行 `hg clone https://www.mercurial-scm.org/repo/hg mercurial-repo`。

9. 创建新目录，移动到新目录，然后初始化新的 Git 存储库。

   例如，如果要将新存储库命名为 `mercurial-git`，请运行 `mkdir mercurial-git && cd mercurial-git && git init`。

10. 移动到新创建的 Git 存储库的目录中。

11. 若要将新的 Git 存储库配置为以与 Mercurial 相同的方式处理文件名大小写，请运行 `git config core.ignoreCase false`。

12. 若要获取 Mercurial 项目中的提交者列表并将该列表存储在 `committers.txt` 中，请运行以下脚本。

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

13. 更新 `committers.txt` 文件，将 Mercurial 存储库中使用的提交者姓名映射到要在 Git 存储库中使用的姓名，格式如下：

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

14. 在您已初始化的 Git 存储库中运行 `hg-fast-export.sh`，并传入您 Mercurial 存储库的路径和 `committers.txt` 文件的路径作为参数。

    例如，`../fast-export-221024/hg-fast-export.sh -r ../mercurial-repo -A ../mercurial-repo/committers.txt -M main`。

15. 导入完成后，若要检查新创建的 Git 存储库，请运行 `git checkout HEAD`。

16. 若要将 GitHub 存储库添加为远程存储库，请运行 `git remote add origin URL`，将 `URL` 替换为前面创建的 GitHub 存储库的 URL，例如 `https://github.com/octocat/example-repository.git`。

17. 若要将存储库推送到 GitHub，请运行 `git push --mirror origin`。

    如果仓库包含的任何文件大于 GitHub 的文件大小限制，则你的推送可能会失败。 通过运行 `git lfs import` 将大文件移动到 Git LFS，然后重试。