You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

咨询:如何将GitLab中的Issues导出并迁移至GitHub?

刚帮团队完成过GitLab到GitHub的Issues迁移,分享几个亲测靠谱的方案,你可以根据自己的项目规模和需求选:

方案一:GitLab官方导出 + GitHub官方导入(最省心,适合中小型项目)

这个方案依赖平台自带工具,不用额外折腾:

  • 导出GitLab Issues
    1. 打开你的GitLab项目,进入「Settings」→「Advanced」→「Export project」
    2. 在导出选项里,只勾选「Issues」(如果需要附带评论、标签、里程碑这些关联内容,也一起勾选)
    3. 等待系统生成导出包,下载后解压,能看到issues.json和对应的附件文件夹
  • 适配GitHub导入格式
    GitLab的导出JSON和GitHub的导入格式几乎可以直接对应,只需要做几个小调整:
    • 将GitLab的description字段重命名为GitHub的body
    • 把GitLab的labels数组直接复用为GitHub的labels
    • 评论部分:GitLab的notes数组对应GitHub的comments,每个评论的body直接保留,author字段映射为GitHub用户的login(如果团队成员GitHub账号和GitLab用户名一致,这步可以自动匹配)
  • 导入到GitHub
    1. 打开目标GitHub仓库,进入「Settings」→「Import code and data」
    2. 选择「Repository archive」,上传你调整好的JSON文件,按照页面提示完成导入即可
方案二:第三方CLI工具(高效批量处理,适合大型项目)

如果你的项目有上百个Issue,用CLI工具能节省大量时间,推荐几个主流工具(不用额外装复杂环境):

  • 准备访问令牌
    1. GitLab:在个人「Settings」→「Access Tokens」生成一个PAT,需要勾选api权限
    2. GitHub:在个人「Settings」→「Developer settings」→「Personal access tokens」生成PAT,需要勾选repo权限
  • 安装并运行工具
    比如用Node.js的gitlab-to-github工具:
    npm install -g gitlab-to-github
    
    然后运行迁移命令(替换成你的参数):
    gitlab-to-github --gitlab-token <你的GitLab PAT> --github-token <你的GitHub PAT> --gitlab-project-id 123 --github-repo "你的用户名/目标仓库名"
    
    工具会自动处理Issue的标题、描述、标签、评论,甚至开放/关闭状态的映射,全程自动化。
方案三:自定义脚本(灵活适配特殊需求)

如果你的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仓库)
  • 批量导入到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

火山引擎 最新活动