用Github Action自动将GitHub代码同步到Gitee

背景

本人正在开发一个开源的项目------pear-rec,代码库在GitHub上,但是对于国内的同学来说不太方便,因为国内访问GitHub不太稳定,所以我就想把代码同步到国内的代码管理平台gitee上面,这时我们就需要将Github的代码同步到gitee仓库的需求。具体的,对于我们目前参与的项目来说核心诉求是:以Github社区作为主仓,并且定期自动同步到Gitee作为镜像仓库

方案

一. 手动同步

Gitee 的仓库镜像管理,提供了同步的按钮,你只用点一下,即可与 Github 同步更新。

有点麻烦的是,我们需要在推送到 Github 后,再到 Gitee 项目主页手动点击一下。

二. 推送两个仓库

除此之外,我们也可以在 git 管理里设置两个 remote,直接推送到两个仓库地址上,我们可以修改一下git,如下:

  1. 首先查看远程仓库地址:
js 复制代码
git remote -v
  1. 添加多个远程仓库地址:
js 复制代码
git remote add origin-name1 http://xxxxxx

git remote add origin-name2 http://xxxxxx
  1. 更新代码(从某个远程仓库)
js 复制代码
git pull origin-name1 branch_name1

git pull origin-name2 branch_name1
  1. 推送代码:
js 复制代码
git push origin-name2 branch_name1:将代码推送到远程仓库origin-name2的branch_name1分支

git push origin-name3 branch_name2:将代码推送到远程仓库origin-name3的branch_name2的分支

这个方法比上一个方法好一些了,不用登录gitee和点击同步按钮,直接通过git就可以同步代码,但是我还想更加简便,于是我就想到了Github Action

三. Github Actions 自动同步

我们也可以利用 Github Actions,写一个工作流,在发现 Github 仓库的 mian 分支代码更新后,自动同步当前代码到 Gitee 上。

关于 Github Actions 的介绍,可以参考阮一峰老师的 《GitHub Actions 入门教程》

为了实现 GiteeGithub 的同步,我们需要借助一个 action,还好业界已经有现成的实现了,这里我采用的是 Hub Mirror Action,我们可以看到使用的示例代码:

js 复制代码
steps:
- name: Mirror the Github organization repos to Gitee.
  uses: Yikun/hub-mirror-action@master
  with:
    src: github/kunpengcompute
    dst: gitee/kunpengcompute
    dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
    dst_token: ${{ secrets.GITEE_TOKEN }}
    account_type: org
    # src_account_type: org
    # dst_account_type: org

使用 Github Actions

1. 新建文件

在代码库的根目录下创建一个.github文件夹,然后在文件夹内新建一个workflows的文件夹,最后在新建一个syncToGitee.yml文件,目录结构如下:

js 复制代码
└── .github
    └── workflows
        └── syncToGitee.yml 

2. 修改代码

例子代码我们并不能直接用我们要修改一下,首先我们要理解代码中的四个配置的参数的含义:

  • src 表示需要被同步的源端账户名,即我们 Github 的账户名,因为我的 Github ID 是 027xiguapi,所以这里我应该改成 github/027xiguapi
  • dst 表示需要同步到的目的端账户名,即我们 Gitee 的账户名,因为我的 Gitee ID 也是 xiguapi027,所以这里我应该改成 gitee/xiguapi027
  • dst_key 表示用于在目的端上传代码的私钥,然后将其保存在 Secrets 中。
  • dst_token 表示用于在在 Gitee 上创建一个私人令牌(token),然后将其保存在 Secrets 中。

知道参数的含义后,我们就可以修改代码了,我的代码如下:

js 复制代码
name: syncToGitee
'on':
  push:
    branches:
      - main
jobs:
  repo-sync:
    runs-on: ubuntu-latest
    steps:
      - name: Mirror with force push (git push -f)
        uses: Yikun/hub-mirror-action@master
        with:
          src: github/027xiguapi
          dst: gitee/xiguapi027
          dst_key: '${{ secrets.GITEE_PRIVATE_KEY }}'
          dst_token: '${{ secrets.GITEE_TOKEN }}'
          static_list: pear-rec
          force_update: true
          debug: true

3. 设置 GitHub 变量

  • 获取私钥 打开shell输入下面代码:
js 复制代码
cat ~/.ssh/id_rsa
  • 将私钥复制到 GitHub 仓库

选择 "Setting" -> "Secrets" -> "actions" -> "New repository secret"

  • 通过设置中的 Secrets 创建一个 GITEE_PRIVATE_KEY 变量,将私钥内容拷贝到值区域

然后点击 Add secret 即可。

  • 同理将公钥传到 Gitee 上,这样就可以实现 GitHubGitee 的通信

这里我们从 Gitee 上获取,具体地址为 gitee.com/profile/per...。生成并复制 Token,然后同样的步骤,保存在 Github 的 Secrets 中,Name 为 "GITEE_TOKEN",界面如下:

  • 类似上面,创建一个 GITEE_TOKEN 变量,将私人令牌作为值粘贴进去
  • 将配置文件中的源和目标设置为你自己的账号即可。
js 复制代码
src: github/<这里改成自己的GitHub名字>
dst: gitee/<这里改成自己的Gitee名字>
  • 修改 Github Actions 配置 选择 "Setting" -> "Actions" -> "General" 进入页面,如图

Actions permissions 内选择选择第四个,并添加

js 复制代码
Yikun/hub-mirror-action@master,

这样配置就完成了。

4.结果

每当我们推送代码的时候,GitHub Action 就会开始启动并工作了。效果如下: 执行时间大概一分钟左右,Gitee 的代码就会自动同步。

至此,我们实现了 GithubGitee 代码仓库的同步。

Q&A

    1. Q: 出现如下报错怎么处理?

A:YAML格式化网站 可以解决

    1. Q: 有源码吗?

A: 当然有,地址如下:pear-rec,有兴趣的话可以大家一起探讨,同时也欢迎大家forkstar

相关推荐
meilindehuzi_a8 小时前
从零理解并实现 RAG:用 LangChain.js 构建语义检索问答系统
开发语言·javascript·langchain
世界哪有真情9 小时前
拿人类意识卡 AI?等于用 bug 验收正式产品
前端·人工智能·后端
鱼樱前端9 小时前
别再自己拼凑了!这款 Vue 3.5+ 严肃产品级组件库,把 AI 对话、工作流和复杂数据全包了!
javascript·vue.js·github
Listen·Rain10 小时前
Vue3:setup详解
前端·javascript·vue.js
Patrick_Wilson11 小时前
修好 bug 只是开始:一次由监控需求反向重构日志结构的复盘
前端·监控·数据可视化
kyriewen11 小时前
面试官让我优化一个卡死的表格,我打开 Claude 五秒重写,他放下咖啡问我要不要来当组长
前端·javascript·面试
阿里嘎多学长11 小时前
2026-07-14 GitHub 热点项目精选
开发语言·程序员·github·代码托管
小粉粉hhh12 小时前
React(二)——dom、组件间通信、useEffect
前端·javascript·react.js
Csvn12 小时前
🤖 AI 生成前端代码的 5 个典型翻车现场及修复指南
前端
IpdataCloud12 小时前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip