Gitee 与 GitHub 仓库同步:从手动操作到自动化部署

总共有三种方式,可以根据自身需求进行选择:

同步方案 操作复杂度 同步效率 适用场景 优点 缺点
手动同步 偶尔更新(每周 1-2 次) 无需额外配置,灵活可控 频繁同步时繁琐,易遗漏
脚本自动化 频繁更新(每日多次) 一键操作,本地可控,支持双向 需要本地执行,依赖脚本
平台工具同步 实时联动(推送到一个平台后自动同步另一个) 无需本地操作,实时性强 Gitee 仅支持单向,GitHub Actions 需配置 Secrets

准备工作

在开始同步前,需要确保你已完成以下基础配置,避免后续操作中出现权限问题:

  1. 创建仓库 :分别在 GitHub 和 Gitee 上创建同名仓库(建议仓库名、分支名保持一致,如默认分支都用 main),如果已有仓库可跳过此步。
  2. 配置 Git 身份:确保本地 Git 已配置用户名和邮箱(与平台账户关联),执行以下命令检查:
bash 复制代码
git config --global user.name  # 查看用户名
git config --global user.email  # 查看邮箱
# 若未配置,执行以下命令设置
git config --global user.name "你的用户名"
git config --global user.email "你的邮箱"
  1. 权限验证 :推荐使用 SSH 密钥验证(避免每次推送输入密码),分别在 GitHub 和 Gitee 上添加本地 SSH 公钥:
    • 生成 SSH 密钥(若未生成):ssh-keygen -t ed25519 -C "你的邮箱"(一路回车即可)。
  1. -t ed25519: 指定使用 ED25519 算法,这是 GitHub 当前推荐的、更安全、性能更好的算法。
  2. -C "...": 为您的密钥添加一个注释,通常使用您的邮箱地址以便识别。
  3. 运行命令后,终端会问两个问题。直接按回车Enter,接受默认设置。
    1. 问题一:Enter file in which to save the key (/c/Users/kjy/.ssh/id_ed25519):
      1. 询问您想把密钥文件保存在哪里,括号里的是默认路径
      2. Created directory '/c/Users/kjy/.ssh'.
    2. 问题二:Enter passphrase for "/c/Users/kjy/.ssh/id_ed25519" (empty for no passphrase):
      1. 询问是否要为这个密钥设置一个额外的密码(私钥密码)。这是一个可选的安全增强措施。
      2. 为了简化流程,可直接按下 Enter 键,表示不设置密码
      3. 之后会要求再次输入以确认,请再按一次 Enter 键

复制公钥:cat ~/.ssh/id_ed25519.pub(Windows 路径为 C:\Users\你的用户名\.ssh\id_ed25519.pub)。

  1. 终端会显示一长串以 ssh-ed25519... 开头,并以您的邮箱地址结尾的文本。这就是您的公钥。
  2. 用鼠标完整地复制这一整串文本

在 GitHub/Gitee 平台的「个人设置 → SSH 密钥」中粘贴公钥,完成添加。

  1. 回到浏览器,打开 GitHub SSH 密钥设置页面。github.com/settings/ke...
  2. 点击 New SSH key (新建 SSH 密钥)。
  3. 在 Title (标题) 栏中,给它起一个名字(例如:"我的Windows电脑")。
  4. 在 Key (密钥) 文本框中,粘贴您刚刚复制的那一长串公钥。
  5. 点击 Add SSH key (添加 SSH 密钥)。
  1. Gitee 一样的操作,添加SSH公钥。gitee.com/profile/ssh...

方式一:手动同步(适用个人小项目、更新频率低)

如果你的仓库更新频率低(如每周 1-2 次),手动同步足够简单高效,核心思路是「给本地仓库添加两个远程地址,分别推送代码」。

步骤1:关联两个远程仓库

首先将本地仓库与 GitHub、Gitee 仓库关联(若本地无仓库,需先克隆任一平台仓库):

  1. 克隆仓库(本地无代码时):

先克隆 GitHub 仓库到本地(也可克隆 Gitee,后续添加另一个远程即可):

bash 复制代码
git clone git@github.com:你的用户名/你的仓库名.git  # SSH 地址
# 或 HTTPS 地址:git clone https://github.com/你的用户名/你的仓库名.git
cd 你的仓库名  # 进入仓库目录
  1. 添加第二个远程地址:\ 查看当前已关联的远程仓库,确认是否已有目标平台地址:
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:手动推送代码到两个平台

当本地代码有更新时,按以下流程同步到两个仓库:

  1. 提交本地更改
bash 复制代码
git add .  # 添加所有更改(也可指定文件,如 git add README.md)
git commit -m "feat: 新增同步说明文档"  # 填写有意义的提交信息
  1. 分别推送到 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 脚本,将「提交 + 双平台推送」打包成一条命令,一键完成同步。

  1. 在仓库根目录下新建脚本文件 <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
  1. 给脚本添加执行权限(仅首次需要)

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 为镜像的场景。

操作步骤:

  1. 两种方式
    1. 【每次都需要重新输入账号和令牌】进入 Gitee 仓库页面,点击 管理 -> 功能设置 -> 同步 -> 保存。保存后会发现仓库名上多了个刷新按钮

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

出现 TIP 提示,拉取成功

在 github 获取个人令牌步骤:

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

方案 2:GitHub Actions 自动同步到 Gitee

GitHub Actions 是 GitHub 自带的自动化工具,可以配置「当代码推送到 GitHub 后,自动同步到 Gitee」,实现双向同步的效果(若推送到 Gitee 后需同步到 GitHub,可在 Gitee 配置「WebHook + 自定义服务」,但步骤较复杂,此处重点讲 GitHub → Gitee)。

操作步骤:

  1. 生成 SSH 密钥对(若已生成,可跳过):

执行 ssh-keygen -t ed25519 -C "你的邮箱",一路回车,生成 id_ed25519(私钥)和 id_ed25519.pub(公钥)。

bash 复制代码
# 获取私钥
cat ~/.ssh/id_ed25519
# 获取公钥
cat ~/.ssh/id_ed25519.pub
  1. 将公钥添加到 Gitee:
    1. 复制公钥内容:cat ~/.ssh/id_ed25519.pub。
    2. 进入 Gitee 「个人设置 → SSH 密钥」,粘贴公钥,备注填写「GitHub Actions Sync」,点击「确定」。
  2. 将私钥添加到 GitHub Secrets:
    1. 进入 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-----
  1. 创建 GitHub Actions 工作流配置文件:
    1. 在本地仓库根目录下,新建目录 .github/workflows(若不存在)。
    2. 在该目录下新建文件 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
  1. 验证同步效果:
    1. 推送到 GitHub 后,进入 GitHub 仓库页面,点击「Actions」,查看工作流是否运行成功(绿色对勾表示成功)。
    2. 若成功,打开 Gitee 仓库页面,即可看到代码已自动同步。

附录

bash 复制代码
# 刷新 DNS 缓存
# Windows
ipconfig /flushdns
# macOS
sudo killall -HUP mDNSResponder
# Linux
sudo systemctl restart network-manager
相关推荐
哒哒哒就是我4 小时前
React中,函数组件里执行setState后到UI上看到最新内容的呈现,react内部会经历哪些过程?
前端·react.js·前端框架
AGG_Chan4 小时前
flutter专栏--深入剖析你的第一个flutter应用
前端·flutter
再学一点就睡4 小时前
多端单点登录(SSO)实战:从架构设计到代码实现
前端·架构
繁依Fanyi4 小时前
思维脑图转时间轴线
前端
发愤图强的羔羊4 小时前
Chartdb 解析数据库 DDL:从 SQL 脚本到可视化数据模型的实现之道
前端
摸着石头过河的石头4 小时前
控制反转 (IoC) 是什么?用代码例子轻松理解
前端·javascript·设计模式
携欢5 小时前
PortSwigger靶场之Stored XSS into HTML context with nothing encoded通关秘籍
前端·xss
小桥风满袖5 小时前
极简三分钟ES6 - const声明
前端·javascript
小小前端记录日常5 小时前
vue3 excelExport 导出封装
前端