用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

相关推荐
崔庆才丨静觅3 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60613 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了3 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅3 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅4 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅4 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment4 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅5 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊5 小时前
jwt介绍
前端
爱敲代码的小鱼5 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax