Skip to content
个人作品推荐
栾媛爱动物
播放动物叫声趣味微信小程序
栾媛爱动物微信小程序
微信扫码体验

Git 一键同步代码到 GitHub、Gitee、GitCode 总结文档

编辑日期:2026-02-26

背景

在开源项目开发中,为了提高项目的知名度和可访问性,我们通常会将代码同步到多个代码托管平台,如 GitHub、Gitee、GitCode 等。手动同步代码到多个平台不仅繁琐,而且容易出错。因此,本文将介绍如何实现 Git 一键同步代码到多个代码托管平台的方法。

背景与目标

本地项目需同时同步到 Gitee / GitHub / GitCode 三平台,实现:

  1. 默认从 Gitee 拉取更新(git pull)
  2. 一键命令推送到三个平台(git push-all)
  3. 解决全程遇到的分支、冲突、认证、历史无关等问题

环境与初始问题

  • 本地分支:main(空分支/无提交)
  • 远程仓库:三平台均为 ly-docs
  • 初始报错合集:
    1. fatal: couldn't find remote ref main
    2. fatal: refusing to merge unrelated histories
    3. ! [rejected] main -> main (fetch first)
    4. fatal: no commit on branch 'main' yet
    5. HTTP Basic: Access denied(密码登录失效)
    6. 自动合并冲突:CONFLICT (add/add)

核心问题与解决方案清单

1. 远程不存在 main 分支 / 历史无关

现象

fatal: couldn't find remote ref main
fatal: refusing to merge unrelated histories

原因

本地与远程是两个独立仓库,无共同提交历史。

解决

bash
git pull origin main --allow-unrelated-histories

冲突文件手动解决后:

bash
git add .
git commit -m "merge: 解决无关历史合并冲突"

2. 本地分支为空,无法设置跟踪

现象

fatal: no commit on branch 'main' yet

原因

空分支不能绑定上游远程分支。

解决

bash
git commit --allow-empty -m "init: 初始化空分支"
git branch --set-upstream-to=origin/main main

3. 推送被拒:non-fast-forward

现象

! [rejected] main -> main (non-fast-forward)

原因

本地分支落后远程,必须先拉取合并。

解决

bash
git pull
# 有冲突则解决后提交
git push-all

4. 认证失败:密码登录已废弃

现象

remote: HTTP Basic: Access denied.

原因

GitHub/Gitee/GitCode 均禁用密码,必须用 Token。

解决

各平台生成 Token 后,替换远程地址:

bash
# Gitee
git remote set-url origin `https://用户名:Token@gitee.com/用户名/ly-docs.git`

# GitHub
git remote set-url github `https://用户名:Token@github.com/用户名/ly-docs.git`

# GitCode
git remote set-url gitcode `https://用户名:Token@gitcode.com/用户名/ly-docs.git`

5. 文件冲突:add/add 冲突

现象

Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md

原因

本地与远程同时新增同名文件,内容不同。

解决

  1. 打开文件删除 <<<<<<< HEAD / ======= / >>>>>>> origin/main
  2. 保留需要的内容
  3. 标记解决并提交
bash
git add README.md .gitignore
git commit -m "fix: 解决add/add冲突"

实现原理

Git 支持多个远程仓库,我们可以通过配置多个远程仓库地址,然后使用脚本来批量推送代码到这些仓库。具体原理如下:

  1. 为本地仓库添加多个远程仓库地址
  2. 创建一个同步脚本,用于批量推送代码到所有远程仓库
  3. 执行脚本,实现一键同步

配置步骤

1. 准备工作

  • 确保本地已安装 Git
  • 在各个代码托管平台(GitHub、Gitee、GitCode)上创建同名仓库
  • 确保本地仓库已初始化并配置好用户信息

2. 配置多个远程仓库

方法一:使用 git remote 命令添加

bash
# 查看当前远程仓库
git remote -v

# 添加 GitHub 远程仓库
git remote add github https://github.com/your-username/your-repo.git

# 添加 Gitee 远程仓库
git remote add gitee https://gitee.com/your-username/your-repo.git

# 添加 GitCode 远程仓库
git remote add gitcode https://gitcode.com/your-username/your-repo.git

# 查看配置结果
git remote -v

方法二:直接编辑 .git/config 文件

打开本地仓库中的 .git/config 文件,添加以下内容:

ini
[remote "github"]
    url = https://github.com/your-username/your-repo.git
    fetch = +refs/heads/*:refs/remotes/github/*
[remote "gitee"]
    url = https://gitee.com/your-username/your-repo.git
    fetch = +refs/heads/*:refs/remotes/gitee/*
[remote "gitcode"]
    url = https://gitcode.com/your-username/your-repo.git
    fetch = +refs/heads/*:refs/remotes/gitcode/*

3. 创建同步脚本

Windows 平台(sync.bat)

batch
@echo off
echo 开始同步代码到多个平台...

echo 同步到 GitHub...
git push github --all
git push github --tags

echo 同步到 Gitee...
git push gitee --all
git push gitee --tags

echo 同步到 GitCode...
git push gitcode --all
git push gitcode --tags

echo 同步完成!
pause

Linux/Mac 平台(sync.sh)

bash
#!/bin/bash
echo "开始同步代码到多个平台..."

echo "同步到 GitHub..."
git push github --all
git push github --tags

echo "同步到 Gitee..."
git push gitee --all
git push gitee --tags

echo "同步到 GitCode..."
git push gitcode --all
git push gitcode --tags

echo "同步完成!"

4. 配置脚本权限(仅 Linux/Mac 平台)

bash
chmod +x sync.sh

使用方法

  1. 在本地仓库中进行代码修改和提交
  2. 执行同步脚本:
    • Windows:双击 sync.bat 文件
    • Linux/Mac:在终端中执行 ./sync.sh
  3. 脚本会自动将代码同步到所有配置的远程仓库

高级配置

1. 使用 SSH 连接

为了避免每次推送都需要输入密码,建议使用 SSH 连接远程仓库。具体步骤如下:

  1. 生成 SSH 密钥对:
bash
ssh-keygen -t rsa -b 4096 -C "your-email@example.com"
  1. 将公钥添加到各个代码托管平台:

    • GitHub:Settings → SSH and GPG keys → New SSH key
    • Gitee:设置 → SSH 公钥 → 添加公钥
    • GitCode:设置 → SSH 密钥 → 添加密钥
  2. 修改远程仓库地址为 SSH 格式:

bash
# 修改 GitHub 远程仓库地址
git remote set-url github git@github.com:your-username/your-repo.git

# 修改 Gitee 远程仓库地址
git remote set-url gitee git@gitee.com:your-username/your-repo.git

# 修改 GitCode 远程仓库地址
git remote set-url gitcode git@gitcode.com:your-username/your-repo.git

2. 配置默认推送行为

可以配置 Git 的默认推送行为,使其默认推送到所有远程仓库:

bash
# 查看当前默认推送行为
git config --get push.default

# 设置默认推送行为为 simple(仅推送当前分支到对应远程分支)
git config push.default simple

3. 使用 Git Hooks 自动同步

可以使用 Git Hooks 在提交代码后自动执行同步脚本:

  1. 进入 .git/hooks 目录
  2. 创建 post-commit 文件:
bash
#!/bin/bash
# 切换到仓库根目录
cd "$(git rev-parse --show-toplevel)"

# 执行同步脚本
if [ -f "sync.sh" ]; then
    ./sync.sh
elif [ -f "sync.bat" ]; then
    ./sync.bat
fi
  1. 配置脚本权限:
bash
chmod +x post-commit

常见问题

1. 推送失败

可能原因

  • 网络连接问题
  • 远程仓库地址错误
  • 权限不足

解决方案

  • 检查网络连接
  • 验证远程仓库地址是否正确
  • 确保已配置正确的 SSH 密钥或用户名密码

2. 同步速度慢

可能原因

  • 网络延迟
  • 代码仓库较大
  • 多个远程仓库同时推送

解决方案

  • 使用 SSH 连接,提高传输速度
  • 考虑使用 git push --mirror 命令,仅推送必要的引用
  • 在脚本中添加适当的延迟,避免同时推送导致的网络拥塞

3. 分支不同步

可能原因

  • 某些分支仅存在于部分远程仓库
  • 分支名称不一致

解决方案

  • 使用 git push --all 命令,确保所有分支都被推送
  • 统一分支命名规范,避免分支名称不一致

最终最优配置

1. 远程结构

origin   → Gitee(默认拉取)
github   → GitHub
gitcode  → GitCode

2. 一键推送配置

bash
git config --global alias.push-all '!git push origin main && git push github main && git push gitcode main'

3. 日常工作流

bash
# 从 Gitee 拉取
git pull

# 提交修改
git add .
git commit -m "feat: 更新内容"

# 一键推三平台
git push-all

关键命令速查表

问题场景命令
允许合并无关历史git pull origin main --allow-unrelated-histories
空分支初始化提交git commit --allow-empty -m "init"
绑定默认上游(Gitee)git branch --set-upstream-to=origin/main main
一键推送到三平台git push-all
查看远程地址git remote -v
查看分支跟踪git branch -vv

最佳实践

1. 仓库管理

  • 在本地仓库中保持代码的整洁和规范
  • 定期清理无用分支,减少同步数据量
  • 使用标签(tags)管理版本,确保版本信息同步到所有平台

2. 同步策略

  • 对于大型仓库,考虑使用 git push --mirror 命令,提高同步效率
  • 对于频繁更新的仓库,建议使用 Git Hooks 自动同步
  • 对于重要的版本发布,建议手动执行同步脚本,确保同步成功

3. 安全考虑

  • 使用 SSH 连接远程仓库,避免明文传输密码
  • 定期更新 SSH 密钥,提高安全性
  • 确保同步脚本的权限设置正确,避免被恶意修改

4. 避坑总结

  1. 永远不要用密码:三平台均必须用 Token
  2. 分支名统一:本地/远程都用 main
  3. 冲突不可怕:先解决再提交,不要跳过合并
  4. 空分支必须先提交:才能绑定远程
  5. 推送被拒一定先 pull:不要直接强制推送
  6. 多平台同步用 git alias 最稳定:不要用复杂脚本

Gitee / GitHub / GitCode Token 申请完整步骤

Token(个人访问令牌)是三平台替代密码登录的唯一合法方式,遵循「最小权限原则」申请,既能满足 Git 推送需求,又能保障账号安全。以下是三个平台的详细申请步骤,全程网页端操作,步骤清晰可直接对照执行。

1. Gitee Token 申请步骤

  1. 登录 Gitee 官网:打开 https://gitee.com,登录个人账号(本文以账号 quxiangshun 为例)。

  2. 进入私人令牌页面:点击页面右上角「个人头像」→ 下拉菜单选择「设置」→ 左侧菜单栏找到「私人令牌」,点击进入令牌管理页面。

  3. 生成新令牌:点击页面右上角「生成新令牌」,进入配置页面,按以下要求填写:

    • 令牌描述(Note):填写易识别的备注,如「Git 多平台同步 - ly-docs 仓库专用」,便于后续区分令牌用途。
    • 有效期:推荐选择「长期有效」(个人使用),或按需选择短期(如30天),到期后需重新申请。
    • 权限勾选:仅勾选「仓库管理(repo)」相关权限(最小权限原则),具体勾选以下选项:
      • repo:仓库的读写权限(核心,必须勾选)
      • projects:项目管理权限(辅助,可选勾选)
  4. 确认生成并保存:配置完成后,滚动到页面底部,点击「提交」,会弹出账号密码验证弹窗,输入 Gitee 登录密码确认。验证通过后,会生成一串 Token(如本文提供的 7a**************7c),该 Token 仅显示一次,务必立即复制并保存到安全位置(如记事本、密码管理器),关闭页面后无法再次查看。

  5. Token 失效/替换:若 Token 不慎泄露或失效,回到「私人令牌」页面,找到对应令牌,点击「撤销」即可失效,随后重新按上述步骤生成新 Token。

2. GitHub Token 申请步骤

  1. 登录 GitHub 官网:打开 https://github.com,登录个人账号(本文以账号 quxiangshun 为例)。

  2. 进入开发者设置页面:点击页面右上角「个人头像」→ 下拉菜单选择「Settings」(设置)→ 左侧菜单栏滚动到最底部,点击「Developer settings」(开发者设置)→ 再选择「Personal access tokens」(个人访问令牌)→ 点击「Tokens (classic)」(经典令牌,推荐新手使用,权限更易控制)。

  3. 生成新的经典令牌:点击页面右上角「Generate new token」→ 下拉选择「Generate new token (classic)」,进入配置页面,按以下要求填写:

    • Note(备注):填写令牌用途,如「Git 多平台同步 - ly-docs 仓库推送专用」,便于后续识别。
    • Expiration(有效期):推荐选择短期(如30天),安全性更高;个人使用可选择「No expiration」(永不过期),到期后需重新生成。
    • Select scopes(权限范围):仅勾选「repo」分类下的所有权限(满足 Git 推送需求即可),具体勾选:
      • repo:status:仓库状态访问权限
      • repo_deployment:仓库部署权限
      • public_repo:公共仓库读写权限
      • repo:invite:仓库邀请权限
      • security_events:安全事件权限
  4. 生成并保存 Token:滚动到页面底部,点击「Generate token」(生成令牌),生成一串以 ghp_ 开头的 Token(如本文提供的 github_pat_11A********)。该 Token 仅显示一次,立即复制并保存到安全位置,关闭页面后无法找回。

  5. Token 管理:若 Token 泄露、过期,回到「Personal access tokens」页面,找到对应 Token,点击「Revoke」(撤销)即可失效,重新生成新 Token 替换即可。

3. GitCode Token 申请步骤

  1. 登录 GitCode 官网:打开 https://gitcode.com,登录个人账号(本文以账号 quxiangshun 为例),GitCode 与 Gitee 操作逻辑相近,流程基本一致。

  2. 进入访问令牌页面:点击页面右上角「个人头像」→ 下拉菜单选择「设置」→ 左侧菜单栏找到「访问令牌」,点击进入令牌管理页面。

  3. 生成新令牌:点击页面「生成令牌」按钮,进入配置页面,按以下要求填写:

    • 令牌名称:填写备注,如「ly-docs 仓库多平台同步专用」,便于区分。
    • 有效期:按需选择,推荐「长期有效」(个人使用),或短期有效,到期重新申请。
    • 权限勾选:仅勾选「仓库管理」相关权限(最小权限),具体勾选「仓库管理」分类下的所有选项,确保拥有仓库的读写权限,满足 Git 推送需求。
  4. 确认生成并保存:配置完成后,点击「生成」按钮,会生成一串 Token(如本文提供的 jN********Zs)。该 Token 仅显示一次,立即复制并保存,关闭页面后无法再次查看。

  5. Token 失效处理:若 Token 泄露、失效,回到「访问令牌」页面,找到对应令牌,点击「删除」即可失效,重新按上述步骤生成新 Token 替换。

Token 通用注意事项

  1. 安全性第一:Token 等价于账号密码,请勿公开分享(如截图、发给他人),避免账号被盗用;若不慎泄露,立即在对应平台撤销 Token 并重新生成。

  2. 最小权限原则:申请时仅勾选 Git 推送所需权限(如 repo 权限),无需勾选无关权限(如账号管理、支付相关),降低泄露风险。

  3. 定期更换:即使设置为永不过期,也建议定期(如3个月)重新生成 Token,提升账号安全性。

  4. 用途区分:若有多个项目,建议为每个项目生成单独的 Token,便于管理和撤销,避免一个 Token 泄露影响所有项目。

总结

通过本文介绍的方法,我们可以实现 Git 一键同步代码到 GitHub、Gitee、GitCode 等多个代码托管平台,大大提高了开发效率。具体步骤如下:

  1. 为本地仓库添加多个远程仓库地址
  2. 创建同步脚本,用于批量推送代码
  3. 执行脚本,实现一键同步

此外,我们还介绍了一些高级配置和最佳实践,帮助你更好地管理多平台代码同步。希望本文对你有所帮助!

相关链接