虽然Github自带一个Sync Fork的按钮,但是每次都自己点总是麻烦的,所以有人搞了个Github Action来做这件事,https://github.com/tgymnich/fork-sync

创建workflow

创建新的workflow后在sync.yml输入里面的内容:

官方:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Sync Fork

on:
schedule:
- cron: '*/30 * * * *' # every 30 minutes
workflow_dispatch: # on button click

jobs:
sync:

runs-on: ubuntu-latest

steps:
- uses: tgymnich/fork-sync@v1.8
with:
token: ${{ secrets.PERSONAL_TOKEN }}
owner: llvm
base: master
head: master

注释:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name: Sync Fork

on:
push: # push 时触发, 主要是为了测试配置有没有问题
schedule:
- cron: '* */24 * * *' # 每天一次
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
- uses: tgymnich/fork-sync@v1.8
with:
token: ${{ secrets.TOKEN }} #Github Token,记得加入secrets
owner: ngosang # fork 的上游仓库 user
head: master # fork 的上游仓库 branch
base: master # 本地仓库 branch

最终sync.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
name: Sync Fork

on:
schedule:
- cron: '* */24 * * *' # 每天一次
workflow_dispatch: # on button click

jobs:
sync:

runs-on: ubuntu-latest

steps:
- uses: tgymnich/fork-sync@v1.8
with:
token: ${{ secrets.PERSONAL_TOKEN }}
owner: mack-a
base: master
head: master

* */24 * * *改成* */48 * * *每两天运行一次

PS:ChatGPT有时给出的答案可能是错误的,需要验证:crontab guru

创建github访问token

参考:管理个人访问令牌

1.在任何页面的右上角,单击个人资料照片,然后单击“设置”。

2.在左侧边栏中,单击“ 开发人员设置”。
3.请在左侧边栏的“ Personal access token”下,单击“细粒度令牌” 。
4.单击“生成新令牌”。
5.在“令牌名称”下,输入令牌的名称。
6.在“过期时间”下,选择令牌的过期时间(永不过期)。

7.然后权限要开启repoworkflow的权限

8.创建完成后复制token内容

添加环境变量secret

settings/secrets(Secrets and variables)/actions里把Github的Token设置上,比如workflow写的是secrets.PERSONAL_TOKEN,所以添加的时候Name填写PERSONAL_TOKEN,Secret里填写上一步创建Token内容。

如果部署完成之后,运行显示错误是:

repo-sync
Failed to create or merge pull request: HttpError: Validation Failed: {“resource”:”PullRequest”,”code”:”custom”,”message”:”No commits between knight000:master and ngosang:master”}

就证明初步成功了,因为你部署了workflow所以比原仓库新,等原仓库更新后点Re-run jobs就可以测试是否正确部署了。

自动提交修改到Gitee(未测试)

以下action文件来自https://juejin.cn/post/6894928345830522887

把GITEE_PRIVATE_KEY、GITEE_TOKEN、GITEE_USER都添加到secrets里,然后Gitee内从URL导入仓库,创建同名仓库即可同步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 通过 Github actions, 在 Github 仓库的每一次 commit 后自动同步到 Gitee 上
name: sync2gitee
on:
push:
branches:
- master
jobs:
repo-sync:
env:
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
dst_token: ${{ secrets.GITEE_TOKEN }}
gitee_user: ${{ secrets.GITEE_USER }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
persist-credentials: false

- name: sync github -> gitee
uses: Yikun/hub-mirror-action@master
if: env.dst_key && env.dst_token && env.gitee_user
with:
# 必选,需要同步的 Github 用户(源)
src: 'github/${{ github.repository_owner }}'
# 必选,需要同步到的 Gitee 用户(目的)
dst: 'gitee/${{ secrets.GITEE_USER }}'
# 必选,Gitee公钥对应的私钥,https://gitee.com/profile/sshkeys
dst_key: ${{ secrets.GITEE_PRIVATE_KEY }}
# 必选,Gitee对应的用于创建仓库的token,https://gitee.com/profile/personal_access_tokens
dst_token: ${{ secrets.GITEE_TOKEN }}
# 如果是组织,指定组织即可,默认为用户 user
# account_type: org
# 直接取当前项目的仓库名
static_list: ${{ github.event.repository.name }}

因为有if: env.dst_key && env.dst_token && env.gitee_user这一句所以信息不足的情况下是会跳过执行,显示执行成功而不是显示错误,请注意。

参考链接