如何将Gitlab免费云仓库的Issues、PR及评论导入Github免费云?
从Gitlab免费云迁移仓库到Github(含Issues/PR/评论/原始时间戳)
要完整迁移代码、Issues、Merge Requests(对应Github的PR)、评论及原始时间戳,避开你之前遇到的API限制、时间戳丢失、工具报错问题,可按以下方案操作:
一、先完成代码与版本历史迁移
直接用Git命令做镜像克隆,比Github自带导入按钮更可靠,能完整迁移分支、标签:
# 克隆Gitlab仓库的完整镜像 git clone --mirror git@gitlab.com:你的用户名/原仓库名.git cd 原仓库名.git # 推送到Github新仓库 git push --mirror git@github.com:你的用户名/新仓库名.git
二、迁移Issues、PR及评论(保留原始时间戳)
方案1:Gitlab导出+自定义脚本批量导入(可控性强)
Gitlab免费版支持导出项目数据为JSON(包含所有Issues、MR、评论、时间戳),配合Github API写脚本导入,可灵活处理API限流,保留原始时间:
- 导出Gitlab数据
- 登录Gitlab进入目标仓库 → 设置 → 通用 → 导出项目
- 勾选「Issues」「Merge requests」「Comments」,等待导出后下载压缩包,解压后得到
issues.json、merge_requests.json、notes.json
- 准备Github权限
- 创建Github个人访问令牌,勾选
repo权限(需仓库写权限)
- 创建Github个人访问令牌,勾选
- 编写导入脚本
以Python为例,核心逻辑如下(可根据需求扩展):import json import requests import time GITHUB_TOKEN = "你的Github个人访问令牌" REPO = "你的用户名/新仓库名" HEADERS = {"Authorization": f"token {GITHUB_TOKEN}"} # 导入Issues及评论 with open("issues.json", "r") as f: issues = json.load(f) for issue in issues: # 创建Issue create_payload = { "title": issue["title"], "body": issue["description"] or "", "state": "open" if issue["state"] == "opened" else "closed", "labels": [label["title"] for label in issue["labels"]] } res = requests.post(f"https://api.github.com/repos/{REPO}/issues", json=create_payload, headers=HEADERS) if res.status_code != 201: print(f"创建Issue失败: {issue['title']}") continue github_issue_num = res.json()["number"] # 修改原始创建/更新时间 update_payload = { "created_at": issue["created_at"], "updated_at": issue["updated_at"] } requests.patch(f"https://api.github.com/repos/{REPO}/issues/{github_issue_num}", json=update_payload, headers=HEADERS) # 导入评论 for note in [n for n in issue["notes"] if n["noteable_type"] == "Issue"]: requests.post(f"https://api.github.com/repos/{REPO}/issues/{github_issue_num}/comments", json={"body": note["body"], "created_at": note["created_at"]}, headers=HEADERS) time.sleep(1) # 避免触发API限流 # Merge Requests导入逻辑类似:关联已迁移的分支,创建PR并导入评论
方案2:正确使用Github Actions Importer(官方工具)
你之前尝试的官方Actions Importer是靠谱方案,正确操作步骤如下:
- 安装CLI工具:
brew install github/gh/gh-actions-importer - 配置迁移权限:
按提示输入Gitlab(需gh actions-importer configureread_api权限)和Github的令牌,选择迁移类型为issues和pull_requests - 测试迁移(不实际修改仓库):
gh actions-importer dry-run issues --source-url https://gitlab.com/你的用户名/原仓库名 --target-url https://github.com/你的用户名/新仓库名 - 执行正式迁移:
该工具会自动处理API限流,保留原始时间戳,支持批量迁移多个仓库。gh actions-importer migrate issues --source-url https://gitlab.com/你的用户名/原仓库名 --target-url https://github.com/你的用户名/新仓库名
三、你之前使用工具的问题说明
- node-gitlab-2-github:未调用Github时间戳修改API,仅能以当前时间创建内容,且无API限流处理,效率极低,不推荐
- github-csv-tools:CSV格式兼容性差,不支持修改时间戳,仅适合极小批量简单迁移
- Actions Importer:之前未掌握正确CLI操作流程,按上述步骤即可正常使用
四、注意事项
- 迁移前在Github创建空仓库,不要初始化README/许可证,避免冲突
- 批量迁移多个仓库时,建议分批次进行,每批间隔1小时,避开API小时调用限制
- 迁移完成后,核对Issues/PR的状态、标签、评论、时间戳是否完整
内容的提问来源于stack exchange,提问作者Frotz
相关产品推荐
相关产品推荐

