Skip to main content

导入 Mercurial 存储库

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

先决条件

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

导入 Mercurial 存储库

  1. 在 GitHub 上创建新存储库。 为避免错误,请勿使用 README、许可或 gitignore 文件初始化新存储库。 您可以在项目推送到 GitHub Enterprise Cloud 之后添加这些文件。 有关详细信息,请参阅“创建新仓库”。

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

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

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

    输出应类似于 git version 2.40.0

  4. 若要确认计算机上已安装 Git LFS,请运行 git lfs --version

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

  5. 若要确认计算机上已安装 pip,请运行 pip --version

    输出应类似于 pip 21.2.4

  6. 若要安装 mercurial Python 包,请运行 pip install mercurial

  7. 将最新版本的 fast-export 下载到计算机,然后解压缩存档。

  8. 移动到解压缩的目录中,然后运行 ./hg-fast-export.sh --help

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

  9. 克隆 Mercurial 存储库。

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

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

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

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

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

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

    Shell
    hg log --template "{author}\n" | sort | uniq > committers.txt
    
  14. 更新 committers.txt 文件,将 Mercurial 存储库中使用的提交者姓名映射到要在 Git 存储库中使用的姓名,格式如下:

    “The Octocat <octocato@gmail.com>”=”Octocat <octocat@github.com>”
    
  15. 在初始化的 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

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

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

  18. 若要将存储库推送到 GitHub,请运行 git push --mirror origin

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

其他阅读材料