多数国内开发者习惯使用Gitee托管代码,兼顾访问速度与协作便捷性。当项目需要面向全球开源、接入开源社区时,GitHub是更适配的平台。但手动在两个平台重复提交、同步分支,不仅增加开发成本,还容易出现提交历史不一致、分支冲突、版本遗漏等问题。
本文针对从Gitee迁移项目至GitHub开源、仅提交一端即可实现双平台自动同步的核心需求,提供完整迁移流程、三种自动化同步方案,以及可直接复制的命令与配置清单,一次配置永久生效,彻底告别手动同步。
一、前期准备:基础环境与权限配置
开始迁移与同步前,先完成基础配置,避免权限报错、推送失败等问题,所有命令可直接复制执行。
-
检查并配置本地Git环境
bash# 查看Git版本,确认已安装Git git --version # 配置全局用户名与邮箱(与Gitee/GitHub账号保持一致) git config --global user.name "你的用户名" git config --global user.email "你的注册邮箱" -
配置SSH密钥(双平台通用,无密码推送)
bash# 生成SSH密钥(一路回车,无需设置密码) ssh-keygen -t ed25519 -C "你的注册邮箱" # 查看公钥内容,复制后添加到Gitee和GitHub的SSH密钥设置中 cat ~/.ssh/id_ed25519.pub -
前置检查
- 清理项目中敏感信息(密钥、密码、内网配置、测试凭证)
- 确认Gitee仓库拥有所有者/管理员权限
- GitHub完成邮箱验证,新建仓库权限正常
二、Gitee项目迁移至GitHub:保留完整提交历史
迁移核心是全量同步代码、分支、提交历史,推荐本地克隆推送方式,稳定性最高。
方法1:本地克隆+双远程推送(推荐)
-
克隆Gitee仓库到本地
bashgit clone git@gitee.com:用户名/仓库名.git cd 仓库名 -
登录GitHub,新建空白仓库(不勾选README、LICENSE、.gitignore)
-
为本地仓库添加GitHub远程地址
bash# 添加GitHub远程源,命名为github git remote add github git@github.com:用户名/仓库名.git # 查看远程地址,确认gitee与github均已绑定 git remote -v -
全量推送代码、分支、标签至GitHub
bash# 推送所有分支 git push github --all # 推送所有标签 git push github --tags推送完成后,刷新GitHub仓库页面,即可看到与Gitee完全一致的代码与提交历史。
方法2:GitHub快速导入(无本地环境)
- 进入GitHub首页,点击「New repository」→「Import repository」
- 填入Gitee仓库克隆地址,设置仓库名称与公开权限
- 等待自动导入完成,适合临时快速迁移
三、自动同步方案:仅提交一端,双平台实时同步
以下三种方案覆盖个人开发、团队协作场景,均实现一次提交,自动同步,按需选择即可。
方案A:本地Git多远程推送(极简配置,个人首选)
原理:本地仓库同时绑定Gitee与GitHub,一次推送同步双平台,无需云端工具,零依赖。
-
为默认远程 origin 添加GitHub推送地址
bashgit remote set-url --add origin git@github.com:用户名/仓库名.git -
验证配置是否生效
bashgit remote -v # 输出中origin会同时显示gitee和github两个推送地址 -
后续使用(全程仅需常规Git命令)
bash# 常规提交 git add . git commit -m "提交说明" # 一次推送,同步Gitee+GitHub git push origin 分支名
方案B:GitHub Actions自动同步(以Gitee为核心仓库)
适合固定向Gitee提交、GitHub自动更新的场景,依托GitHub原生工作流实现云端自动化。
-
Gitee生成私人令牌:进入Gitee「设置」→「安全设置」→「私人令牌」,勾选
repo权限,生成并复制令牌。 -
GitHub添加密钥:进入GitHub仓库「Settings」→「Secrets and variables」→「Actions」→ 「New repository secret」,名称填写
GITEE_TOKEN,值粘贴Gitee令牌。 -
新建同步工作流:在GitHub仓库创建文件
.github/workflows/sync-to-gitee.yml,复制以下配置:yamlname: Sync Gitee to GitHub on: push: branches: [ main, master, '*' ] workflow_dispatch: jobs: sync: runs-on: ubuntu-latest steps: - name: Sync Repository uses: wearerequired/git-mirror-action@v1 with: source-repo: git@gitee.com:用户名/仓库名.git destination-repo: git@github.com:用户名/仓库名.git -
提交配置文件,后续向Gitee推送代码,GitHub会自动同步。
方案C:Gitee原生仓库镜像(平台级同步,无需配置)
Gitee自带镜像功能,无需本地/云端配置,平台级自动同步,稳定性最高。
- 进入Gitee仓库「管理」→「仓库镜像管理」→「添加镜像」
- 镜像方向选择「Push(同步到外部仓库)」
- 填入GitHub仓库地址,绑定GitHub令牌
- 启用镜像,后续Gitee提交自动同步至GitHub
四、核心速查清单:一键复制,直接使用
-
Git基础配置速查
bash# Git全局配置 git config --global user.name "你的用户名" git config --global user.email "你的邮箱" # 生成SSH密钥 ssh-keygen -t ed25519 -C "你的邮箱" cat ~/.ssh/id_ed25519.pub -
迁移与多远程配置速查
bash# 克隆Gitee仓库 git clone git@gitee.com:用户名/仓库名.git cd 仓库名 # 添加GitHub远程 git remote add github git@github.com:用户名/仓库名.git # 全量推送 git push github --all && git push github --tags # 配置双远程推送 git remote set-url --add origin git@github.com:用户名/仓库名.git # 常规同步提交 git add . && git commit -m "更新内容" && git push origin -
GitHub Actions配置速查
直接复制上述
sync-to-gitee.yml完整内容,修改用户名与仓库名即可使用。
五、常见问题与避坑指南
- 推送权限失败:检查SSH密钥是否添加双平台、令牌权限是否完整,优先使用SSH地址而非HTTPS。
- 分支同步不全 :必须使用
--all与--tags参数,确保全量分支与标签同步。 - 代码冲突:同步前先拉取远程最新代码,保持本地与源仓库一致。
- 自动化同步失败:检查GitHub密钥配置、YAML文件缩进、Gitee令牌是否过期。
- 开源合规:迁移后添加LICENSE、完善README,避免敏感信息泄露。
六、方案选型建议
- 个人独立开发:选择方案A,本地一次配置,无依赖、操作最简单。
- 团队协作:选择方案B或方案C,统一提交入口,避免成员本地配置不一致。
- 长期维护:定期检查双平台同步状态,保持分支、版本、文档一致。
七、总结
从Gitee迁移至GitHub开源,核心是一次迁移、永久自动同步,无需重复提交与手动维护。本文提供的三种方案覆盖不同使用场景,配合可直接复制的命令与配置清单,可快速实现仅提交一端,双平台自动同步的目标,彻底解决多平台代码托管的繁琐问题。
如果在配置过程中遇到权限、同步、冲突等问题,欢迎留言交流;也可分享你的同步实践,共同完善多平台代码托管的最佳方案。