Skip to content

代码自动同步多个代码托管平台

常见的代码托管平台

  • GitHub
    • 最大的代码托管平台,拥有庞大的用户群和丰富的功能。
    • 拥有免费的公共仓库,以及付费的私有仓库选项。
    • 强大的协作功能,支持分支管理、Pull Request、Issue跟踪等。
    • 拥有丰富的社区资源,方便学习和解决问题。
    • 支持CI/CD流程,方便自动化部署和测试。
  • Gitee
    • 中国本土的代码托管平台,用户界面简洁易用。
    • 支持多种语言和项目类型,拥有丰富的开发工具。
    • 提供免费的公共仓库和私有仓库选项。
  • GitLab
    • 功能类似于 GitHub,但更加注重安全性、隐私和自主性。
    • 提供免费的私有仓库,适合企业内部使用。
    • 支持CI/CD流程,方便自动化部署和测试。

Github Actions 自动同步

配置Actions好处是当我们提交代码到github的时候,代码会自动更新同步到gitee,便于国内用户访问

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

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

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

yml
name: syncToGitee
on:
  push:
    branches:
      - master
jobs:
  repo-sync:
    runs-on: ubuntu-latest
    steps:
      - name: Mirror the Github organization repos to Gitee.
        uses: Yikun/hub-mirror-action@master
        with:
          src: 'github/jiangwan1773'
          dst: 'gitee/jiangwan1773'
          dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
          dst_token:  ${{ secrets.GITEE_TOKEN }}
          static_list: "blog" # 仓库名字
          force_update: true # 强制同步
          debug: true # 启用 `debug` 开关

其中有四个必填项:

  • src 表示需要被同步的源端账户名,即我们 Github 的账户名,因为我的 Github ID 是 jiangwan1773,所以这里我应该改成 github/jiangwan1773

  • dst 表示需要同步到的目的端账户名,即我们 Gitee 的账户名,因为我的 Gitee ID 也是 jiangwan1773,所以这里我应该改成 gitee/jiangwan1773

  • dst_key 表示用于在目的端上传代码的私钥,然后将其保存在 Secrets 中。 具体的操作步骤如下:

    获取私钥:

    sh
    cat ~/.ssh/id_rsa

    复制私钥内容,然后在要同步的 Github 仓库中,选择 "Setting" -> "Secrets" -> "Actions secrets and variables" -> "New repository secret"

    填入 Secret 内容,Name 命名为 "GITEE_PRIVATE_KEY",Value 为复制的内容

    然后点击 Add secret 即可。

  • dst_token 创建仓库的API tokens, 用于自动创建不存在的仓库。这里我们从 Gitee 上获取,gitee地址。生成并复制 Token,然后同样的步骤,保存在 Github 的 Secrets 中,Name 为 GITEE_TOKEN

    那么我们就可以在仓库建立的根目录下,建立目录 .github/workflows ,然后创建一个名为 syncToGitee.yml 的文件:

    yml
    name: syncToGitee
    on:
      push:
        branches:
          - master
    jobs:
      repo-sync:
        runs-on: ubuntu-latest
        steps:
          - name: Mirror the Github organization repos to Gitee.
            uses: Yikun/hub-mirror-action@master
            with:
              src: 'github/ytlyy1773'
              dst: 'gitee/ytlyy1773'
              dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
              dst_token:  ${{ secrets.GITEE_TOKEN }}
              static_list: "blog" # 仓库名字
              force_update: true # 强制同步
              debug: true # 启用 `debug` 开关

怎么配置GitHub Secrets   🚘

gitee pages Actions 已弃用

  • 需要注意 gitee pages 目前已经 停止服务,具体的启用时间等官方说明
  • 以下完整配置注释部分是自动构建 gitee pages 的自动化配置
yml
name: syncToGitee
on:
  push:
    branches:
      - master
jobs:
  repo-sync:
    runs-on: ubuntu-latest
    steps:
      - name: Mirror the Github organization repos to Gitee.
        uses: Yikun/hub-mirror-action@master
        with:
          src: 'github/jiangwan1773'
          dst: 'gitee/jiangwan1773'
          dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
          dst_token:  ${{ secrets.GITEE_TOKEN }}
          static_list: "blog" # 仓库名字
          force_update: true # 强制同步
          debug: true # 启用 `debug` 开关

      # - name: Build Gitee Pages
      #   uses: yanglbme/gitee-pages-action@main
      #   with:
      #     # 注意替换为你的 Gitee 用户名
      #     gitee-username: 'jiangwan1773'
      #     # 注意在 Settings->Secrets 配置 GITEE_PASSWORD
      #     gitee-password: ${{ secrets.GITEE_PASSWORD }}
      #     # 注意替换为你的 Gitee 仓库,仓库名严格区分大小写,请准确填写,否则会出错
      #     gitee-repo: 'jiangwan1773/blog'
      #     # 要部署的分支,默认是 master,若是其他分支,则需要指定(指定的分支必须存在)
      #     branch: github-pages