如何将Mercurial特定目录迁移至GitLab并保留提交历史?
用hg-fast-export迁移Mercurial单个目录到GitLab并保留提交历史
hg-fast-export完全支持仅导出指定目录/文件并保留对应提交历史,具体操作步骤如下:
操作步骤
克隆原始Mercurial仓库到本地:
hg clone <你的Hg仓库地址> hg-local-repo cd hg-local-repo创建filemap文件定义导出规则:
在Hg仓库根目录下新建filemap.txt,写入目标目录的导出规则(替换成你实际要导出的目录相对路径):include path/to/target-directory注:如果需要明确排除其他所有内容,可追加
exclude *,仅保留include规则即可实现只导出目标目录。初始化空Git仓库用于接收导出内容:
mkdir ../git-target-repo && cd ../git-target-repo git init执行定向导出:
假设你已将hg-fast-export工具克隆到../fast-export目录,运行以下命令:../fast-export/hg-fast-export.sh -r ../hg-local-repo -f ../hg-local-repo/filemap.txt参数说明:
-r:指定本地Hg仓库的路径-f:指定刚才创建的filemap规则文件
验证导出结果:
查看Git仓库的提交历史,确认目标目录的历史记录完整:git log --oneline -- path/to/target-directory推送至GitLab:
关联GitLab远程仓库并推送代码:git remote add origin <你的GitLab仓库地址> git push -u origin main
注意事项
- 如果目标目录在Mercurial历史中有重命名或移动操作,需确保filemap中的路径覆盖不同时期的路径,必要时可添加多个
include规则。 - 若导出过程出现异常,可尝试添加
--force参数重新导出,或检查filemap的路径是否存在拼写错误。
内容的提问来源于stack exchange,提问作者Praga_t
相关产品推荐
相关产品推荐

