如何将Git仓库从AWS CodeCommit完整迁移到GitHub(保留全分支等所有内容)
CodeCommit 迁移 GitHub 全量保留操作指南
以下操作可实现仓库1:1迁移,完整保留所有分支、标签、提交记录、提交者信息、Git注释等全部关联内容,不会出现内容缺失。
- 前置准备
- 确保本地账号同时拥有CodeCommit仓库的拉取权限、GitHub目标仓库的推送权限
- 在GitHub上创建全新的空仓库,不要勾选初始化README、LICENSE、.gitignore选项,必须保持仓库完全空白,否则推送时会出现非相关提交冲突
- 步骤1:裸克隆源CodeCommit仓库
找一个临时工作目录打开终端,执行以下命令拉取源仓库的全量元数据,该操作不会检出工作区文件,只会拉取所有Git对象:git clone --bare <你的CodeCommit仓库克隆地址>克隆完成后,当前目录下会生成一个名为
<仓库名>.git的文件夹 - 步骤2:镜像推送到GitHub空仓库
进入上一步生成的裸仓库目录,执行镜像推送命令,该命令会自动把所有分支、标签、远程跟踪引用、提交记录等所有Git关联内容一次性推送到目标仓库:cd <仓库名>.git git push --mirror <你的GitHub空仓库克隆地址> - 步骤3:迁移结果校验
推送完成后不要直接删除本地临时裸仓库,先做一致性校验:- 新建临时目录,分别克隆CodeCommit源仓库和GitHub目标仓库,在两个仓库下分别执行
git branch -a对比分支列表、执行git tag对比标签列表,确认数量和名称完全一致 - 分别执行
git log --oneline对比提交记录,确认提交哈希、提交信息、提交者信息完全匹配
- 新建临时目录,分别克隆CodeCommit源仓库和GitHub目标仓库,在两个仓库下分别执行
- 步骤4:本地仓库远端切换
校验通过后,你本地之前关联CodeCommit的工作仓库,可以直接执行命令替换远端地址,后续所有操作就会直接同步到GitHub:git remote set-url origin <你的GitHub仓库克隆地址>
常见迁移失败原因
之前操作不成功基本都是踩了以下几个坑:
- 克隆源仓库时用了普通
git clone不带--bare参数,默认只会拉取默认分支的内容,其他分支不会被拉到本地 - 推送时没加
--mirror参数,只推送了当前本地检出的分支,遗漏其他分支、标签等内容 - GitHub目标仓库提前做了初始化,生成了额外的初始提交,导致推送时出现分支冲突
- 本地账号权限不足,推送时部分受保护分支没有推送成功,这种情况终端会有明确的权限报错,给对应账号开足仓库管理员权限重新执行推送命令即可
内容的提问来源于stack exchange,提问作者Tibo
相关产品推荐
相关产品推荐

