咨询:如何将GitLab中的Issues导出并迁移至GitHub?
刚帮团队完成过GitLab到GitHub的Issues迁移,分享几个亲测靠谱的方案,你可以根据自己的项目规模和需求选:
方案一:GitLab官方导出 + GitHub官方导入(最省心,适合中小型项目)
这个方案依赖平台自带工具,不用额外折腾:
- 导出GitLab Issues
- 打开你的GitLab项目,进入「Settings」→「Advanced」→「Export project」
- 在导出选项里,只勾选「Issues」(如果需要附带评论、标签、里程碑这些关联内容,也一起勾选)
- 等待系统生成导出包,下载后解压,能看到
issues.json和对应的附件文件夹
- 适配GitHub导入格式
GitLab的导出JSON和GitHub的导入格式几乎可以直接对应,只需要做几个小调整:- 将GitLab的
description字段重命名为GitHub的body - 把GitLab的
labels数组直接复用为GitHub的labels - 评论部分:GitLab的
notes数组对应GitHub的comments,每个评论的body直接保留,author字段映射为GitHub用户的login(如果团队成员GitHub账号和GitLab用户名一致,这步可以自动匹配)
- 将GitLab的
- 导入到GitHub
- 打开目标GitHub仓库,进入「Settings」→「Import code and data」
- 选择「Repository archive」,上传你调整好的JSON文件,按照页面提示完成导入即可
方案二:第三方CLI工具(高效批量处理,适合大型项目)
如果你的项目有上百个Issue,用CLI工具能节省大量时间,推荐几个主流工具(不用额外装复杂环境):
- 准备访问令牌
- GitLab:在个人「Settings」→「Access Tokens」生成一个PAT,需要勾选
api权限 - GitHub:在个人「Settings」→「Developer settings」→「Personal access tokens」生成PAT,需要勾选
repo权限
- GitLab:在个人「Settings」→「Access Tokens」生成一个PAT,需要勾选
- 安装并运行工具
比如用Node.js的gitlab-to-github工具:
然后运行迁移命令(替换成你的参数):npm install -g gitlab-to-github
工具会自动处理Issue的标题、描述、标签、评论,甚至开放/关闭状态的映射,全程自动化。gitlab-to-github --gitlab-token <你的GitLab PAT> --github-token <你的GitHub PAT> --gitlab-project-id 123 --github-repo "你的用户名/目标仓库名"
方案三:自定义脚本(灵活适配特殊需求)
如果你的Issue有自定义字段、特殊格式或者需要批量修改内容,自己写脚本是最灵活的选择:
- 拉取GitLab Issues数据
用GitLab的REST API分页获取所有Issue,包括评论:# 示例:获取项目ID为123的所有Issue,包含评论 curl --header "PRIVATE-TOKEN: <你的GitLab PAT>" "https://gitlab.example.com/api/v4/projects/123/issues?include_notes=true&per_page=100&page=1" - 数据格式转换
编写脚本(比如Python/JavaScript)把GitLab的字段映射到GitHub的格式:- GitLab的
milestone.title→ GitHub的milestone字段 - GitLab的
assignees→ GitHub的assignees.login数组 - 处理附件:把GitLab附件的链接替换成GitHub仓库的原始文件链接(需要先把附件上传到GitHub仓库)
- GitLab的
- 批量导入到GitHub
用GitHub的REST API创建Issue和评论,注意处理API速率限制(GitHub每小时最多5000次请求,可以加延迟避免触发限制):# 示例:创建一个Issue curl -X POST -H "Authorization: token <你的GitHub PAT>" -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/用户名/仓库名/issues -d '{"title":"测试Issue","body":"这是迁移过来的描述","labels":["bug"]}'
迁移前的注意事项
- 先做小范围测试:选几个带评论、标签、附件的典型Issue先迁移,确认格式和内容都正确再批量操作
- 附件处理:GitLab导出的附件需要手动上传到GitHub仓库或者Releases,然后替换Issue里的链接
- 状态同步:确保GitLab里已关闭的Issue,导入到GitHub后也保持关闭状态
内容的提问来源于stack exchange,提问作者umairhhhs




