总共有三种方式,可以根据自身需求进行选择:
同步方案 | 操作复杂度 | 同步效率 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|---|
手动同步 | 低 | 低 | 偶尔更新(每周 1-2 次) | 无需额外配置,灵活可控 | 频繁同步时繁琐,易遗漏 |
脚本自动化 | 中 | 中 | 频繁更新(每日多次) | 一键操作,本地可控,支持双向 | 需要本地执行,依赖脚本 |
平台工具同步 | 中 | 高 | 实时联动(推送到一个平台后自动同步另一个) | 无需本地操作,实时性强 | Gitee 仅支持单向,GitHub Actions 需配置 Secrets |
准备工作
在开始同步前,需要确保你已完成以下基础配置,避免后续操作中出现权限问题:
- 创建仓库 :分别在 GitHub 和 Gitee 上创建同名仓库(建议仓库名、分支名保持一致,如默认分支都用
main
),如果已有仓库可跳过此步。 - 配置 Git 身份:确保本地 Git 已配置用户名和邮箱(与平台账户关联),执行以下命令检查:
bash
git config --global user.name # 查看用户名
git config --global user.email # 查看邮箱
# 若未配置,执行以下命令设置
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
- 权限验证 :推荐使用 SSH 密钥验证(避免每次推送输入密码),分别在 GitHub 和 Gitee 上添加本地 SSH 公钥:
- 生成 SSH 密钥(若未生成):
ssh-keygen -t ed25519 -C "你的邮箱"
(一路回车即可)。
- 生成 SSH 密钥(若未生成):
- -t ed25519: 指定使用 ED25519 算法,这是 GitHub 当前推荐的、更安全、性能更好的算法。
- -C "...": 为您的密钥添加一个注释,通常使用您的邮箱地址以便识别。
- 运行命令后,终端会问两个问题。直接按回车Enter,接受默认设置。
- 问题一:Enter file in which to save the key (/c/Users/kjy/.ssh/id_ed25519):
- 询问您想把密钥文件保存在哪里,括号里的是默认路径
- Created directory '/c/Users/kjy/.ssh'.
- 问题二:Enter passphrase for "/c/Users/kjy/.ssh/id_ed25519" (empty for no passphrase):
- 询问是否要为这个密钥设置一个额外的密码(私钥密码)。这是一个可选的安全增强措施。
- 为了简化流程,可直接按下 Enter 键,表示不设置密码
- 之后会要求再次输入以确认,请再按一次 Enter 键
复制公钥:cat ~/.ssh/id_ed25519.pub
(Windows 路径为 C:\Users\你的用户名\.ssh\id_ed25519.pub
)。
- 终端会显示一长串以 ssh-ed25519... 开头,并以您的邮箱地址结尾的文本。这就是您的公钥。
- 用鼠标完整地复制这一整串文本
在 GitHub/Gitee 平台的「个人设置 → SSH 密钥」中粘贴公钥,完成添加。
- 回到浏览器,打开 GitHub SSH 密钥设置页面。github.com/settings/ke...
- 点击 New SSH key (新建 SSH 密钥)。
- 在 Title (标题) 栏中,给它起一个名字(例如:"我的Windows电脑")。
- 在 Key (密钥) 文本框中,粘贴您刚刚复制的那一长串公钥。
- 点击 Add SSH key (添加 SSH 密钥)。
- Gitee 一样的操作,添加SSH公钥。gitee.com/profile/ssh...
方式一:手动同步(适用个人小项目、更新频率低)
如果你的仓库更新频率低(如每周 1-2 次),手动同步足够简单高效,核心思路是「给本地仓库添加两个远程地址,分别推送代码」。
步骤1:关联两个远程仓库
首先将本地仓库与 GitHub、Gitee 仓库关联(若本地无仓库,需先克隆任一平台仓库):
- 克隆仓库(本地无代码时):
先克隆 GitHub 仓库到本地(也可克隆 Gitee,后续添加另一个远程即可):
bash
git clone git@github.com:你的用户名/你的仓库名.git # SSH 地址
# 或 HTTPS 地址:git clone https://github.com/你的用户名/你的仓库名.git
cd 你的仓库名 # 进入仓库目录
- 添加第二个远程地址:\ 查看当前已关联的远程仓库,确认是否已有目标平台地址:
bash
git remote -v # 输出类似:origin git@github.com:xxx/xxx.git (fetch)
若缺少 Gitee 地址,执行以下命令添加(远程名可自定义,建议用 github 和 gitee 区分):
bash
# 添加 Gitee 远程(SSH 地址,也可替换为 HTTPS 地址)
git remote add gitee git@gitee.com:你的用户名/你的仓库名.git
# 若需添加 GitHub 远程(本地克隆的是 Gitee 仓库时)
git remote add github git@github.com:你的用户名/你的仓库名.git
再次执行 git remote -v,若看到 github 和 gitee 两个远程地址,说明关联成功。

步骤2:手动推送代码到两个平台
当本地代码有更新时,按以下流程同步到两个仓库:
- 提交本地更改
bash
git add . # 添加所有更改(也可指定文件,如 git add README.md)
git commit -m "feat: 新增同步说明文档" # 填写有意义的提交信息
- 分别推送到 GitHub 和 Gitee
bash
# 推送到 GitHub 的 main 分支
git push github main
# 推送到 Gitee 的 main 分支
git push gitee main
若推送成功,打开两个平台的仓库页面,即可看到代码已同步。
注意:如果远程分支有更新(如他人提交),需先拉取最新代码再推送,避免冲突:
git pull github main # 拉取 GitHub 最新代码
git pull gitee main # 拉取 Gitee 最新代码

方式二:脚本自动化同步(适用频繁更新,每日多次)
如果你的仓库每天需要多次同步,手动执行 push 命令会很繁琐。此时可以写一个 Shell 脚本,将「提交 + 双平台推送」打包成一条命令,一键完成同步。
- 在仓库根目录下新建脚本文件
<font style="color:rgba(0, 0, 0, 0.8);">sync_repos.sh</font>
(文件名可自定义),粘贴以下内容:
bash
#!/bin/bash
# 功能:自动提交本地更改,并同步到 GitHub 和 Gitee 仓库
# 使用方法:./sync_repos.sh "你的提交信息"
# 1. 检查是否传入提交信息
if [ $# -eq 0 ]; then
echo "❌ 请提供提交信息!例如:./sync_repos.sh 'fix: 修复登录bug'"
exit 1 # 退出脚本,状态码1表示错误
fi
# 2. 添加所有本地更改
echo "🔍 正在添加本地更改..."
git add .
if [ $? -ne 0 ]; then # $? 表示上一条命令的执行结果,0为成功
echo "❌ 添加更改失败,请检查本地文件状态!"
exit 1
fi
# 3. 提交更改(使用传入的参数作为提交信息)
echo "📝 正在提交更改,信息:$1"
git commit -m "$1"
if [ $? -ne 0 ]; then
echo "❌ 提交失败!可能没有需要提交的更改(git status 查看)。"
exit 1
fi
# 4. 推送到 GitHub
echo "🚀 正在推送到 GitHub..."
git push
if [ $? -eq 0 ]; then
echo "✅ GitHub 推送成功!"
else
echo "❌ GitHub 推送失败,请检查网络或权限!"
exit 1
fi
# 5. 推送到 Gitee
echo "🚀 正在推送到 Gitee..."
git push gitee
if [ $? -eq 0 ]; then
echo "✅ Gitee 推送成功!"
else
echo "❌ Gitee 推送失败,请检查网络或权限!"
exit 1
fi
# 6. 同步完成
echo "🎉 所有仓库同步完成!"
注意根据实际推送命令进行调整,例如想要推送到指定分支main,给github远程地址设定了别名为github:
bash
# 4. 推送到 GitHub
echo "🚀 正在推送到 GitHub..."
git push github main
if [ $? -eq 0 ]; then
echo "✅ GitHub 推送成功!"
else
echo "❌ GitHub 推送失败,请检查网络或权限!"
exit 1
fi
- 给脚本添加执行权限(仅首次需要)
Linux/Unix系统:
bash
chmod +x sync_repos.sh
# 后续每次需要同步时,只需在仓库目录下执行:
./sync_repos.sh "你的提交信息" # 例如:./sync_repos.sh "docs: 更新同步脚本说明"
windows系统有以下两种方式:
(1)需要使用 git bash 来执行
bash
chmod +x sync_repos.sh

后续每次需要同步时,只需在仓库目录下执行:
bash
./sync_repos.sh "你的提交信息" # 例如:./sync_repos.sh "docs: 更新同步脚本说明"

(2)使用 Windows 批处理文件:.bat
bash
@echo off
REM Auto commit and sync to GitHub and Gitee repositories
REM Usage: sync_repos.bat "your commit message"
REM 1. Check if commit message is provided
if "%~1"=="" (
echo [ERROR] Please provide commit message! Example: sync_repos.bat "fix: login bug"
exit /b 1
)
REM 2. Add all local changes
echo [INFO] Adding local changes...
git add .
if errorlevel 1 (
echo [ERROR] Failed to add changes! Please check local file status!
exit /b 1
)
REM 3. Commit changes
echo [INFO] Committing changes with message: %*
git commit -m %*
if errorlevel 1 (
echo [WARNING] No changes to commit, continuing with push...
)
REM 4. Push to GitHub
echo [INFO] Pushing to GitHub...
git push
if errorlevel 1 (
echo [ERROR] GitHub push failed! Please check network or permissions!
exit /b 1
) else (
echo [SUCCESS] GitHub push successful!
)
REM 5. Push to Gitee
echo [INFO] Pushing to Gitee...
git push gitee
if errorlevel 1 (
echo [ERROR] Gitee push failed! Please check network or permissions!
exit /b 1
) else (
echo [SUCCESS] Gitee push successful!
)
REM 6. Sync completed
echo [SUCCESS] All repositories synced successfully!
后续每次需要同步时,只需在仓库目录下执行:
bash
sync_repos.bat "你的提交信息"

脚本会自动完成「添加更改→提交→推送到 GitHub→推送到 Gitee」,并输出每一步的结果,失败时会提示原因。
方式三:平台工具同步(适合实时联动场景)
如果需要「推送到一个平台后,另一个平台自动同步」(如推送到 GitHub 后,Gitee 自动更新),可以利用平台自带的工具或第三方服务实现,无需本地操作。
方案 1:Gitee 自带「GitHub 同步」功能
Gitee 提供了一键同步 GitHub 仓库的功能,适合以 GitHub 为主要仓库、Gitee 为镜像的场景。
操作步骤:
- 两种方式
- 【每次都需要重新输入账号和令牌】进入 Gitee 仓库页面,点击 管理 -> 功能设置 -> 同步 -> 保存。保存后会发现仓库名上多了个刷新按钮


点击顶部导航栏的「同步」按钮(若未关联 GitHub,需先授权)。


出现 TIP 提示,拉取成功

在 github 获取个人令牌步骤:
- 在Github中点击头像,找到setting选项,在左侧找到Develpoer settings选项
- 在左侧找到Personal access tokens-->Tokens(classic)-->Generate new token-->Generate new token(classic)
- 生成的令牌只展示一次,记得复制保存,刷新页面后就无法再次查看令牌了(只能重新生成令牌)
- 进入 Gitee 仓库页面,点击 管理 -> 仓库镜像管理 -> 添加镜像 -> 授权操作 -> 选择镜像方向 -> 添加 -> 点击更新按钮,手动更新 仓库镜像管理 ( Gitee <-> Github 双向同步) - Gitee.com





方案 2:GitHub Actions 自动同步到 Gitee
GitHub Actions 是 GitHub 自带的自动化工具,可以配置「当代码推送到 GitHub 后,自动同步到 Gitee」,实现双向同步的效果(若推送到 Gitee 后需同步到 GitHub,可在 Gitee 配置「WebHook + 自定义服务」,但步骤较复杂,此处重点讲 GitHub → Gitee)。
操作步骤:
- 生成 SSH 密钥对(若已生成,可跳过):
执行 ssh-keygen -t ed25519 -C "你的邮箱",一路回车,生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。

bash
# 获取私钥
cat ~/.ssh/id_ed25519
# 获取公钥
cat ~/.ssh/id_ed25519.pub
- 将公钥添加到 Gitee:
- 复制公钥内容:cat ~/.ssh/id_ed25519.pub。
- 进入 Gitee 「个人设置 → SSH 密钥」,粘贴公钥,备注填写「GitHub Actions Sync」,点击「确定」。
- 将私钥添加到 GitHub Secrets:
- 进入 GitHub 仓库页面,点击「Settings → Secrets and variables → Actions → New repository secret」。

vbnet
2. 「Name」填写 GITEE_RSA_PRIVATE_KEY(必须与后续配置文件中的变量名一致),「Secret」粘贴 id_ed25519(私钥)的内容,点击「Add secret」。注意,这里的私钥复制全,包括 -----BEGIN OPENSSH PRIVATE KEY----- 和 -----END OPENSSH PRIVATE KEY-----

- 创建 GitHub Actions 工作流配置文件:
- 在本地仓库根目录下,新建目录 .github/workflows(若不存在)。
- 在该目录下新建文件 sync-to-gitee.yml,粘贴以下内容:
bash
name: Sync GitHub to Gitee # 工作流名称
# 触发条件:当代码推送到 GitHub 的 main 分支时触发
on:
push:
branches: [ main ] # 可修改为你的默认分支,如 master
# 工作流任务
jobs:
sync:
runs-on: ubuntu-latest # 运行环境(Ubuntu 系统)
steps:
# 步骤1:拉取 GitHub 仓库代码
- name: Checkout GitHub code
uses: actions/checkout@v4 # 使用官方的代码拉取动作
with:
fetch-depth: 0 # 拉取所有历史记录,避免缺失提交
# 步骤2:将代码同步到 Gitee
- name: Sync to Gitee
uses: wearerequired/git-mirror-action@v1 # 使用第三方同步动作
env:
# 从 GitHub Secrets 中获取私钥
SSH_PRIVATE_KEY: ${{ secrets.GITEE_RSA_PRIVATE_KEY }}
with:
# 源仓库(GitHub)地址(SSH 格式)
source-repo: git@github.com:你的用户名/你的仓库名.git
# 目标仓库(Gitee)地址(SSH 格式)
destination-repo: git@gitee.com:你的用户名/你的仓库名.git
markdown
5. 将配置文件提交并推送到 GitHub:
bash
git add .github/workflows/sync-to-gitee.yml
git commit -m "ci: 添加 GitHub Actions 同步到 Gitee 的工作流"
git push github main
- 验证同步效果:
- 推送到 GitHub 后,进入 GitHub 仓库页面,点击「Actions」,查看工作流是否运行成功(绿色对勾表示成功)。
- 若成功,打开 Gitee 仓库页面,即可看到代码已自动同步。

附录
bash
# 刷新 DNS 缓存
# Windows
ipconfig /flushdns
# macOS
sudo killall -HUP mDNSResponder
# Linux
sudo systemctl restart network-manager