Gitee自动同步GitHub仓库
为什么要同步
github是国际通用的代码托管平台,但是在国内的访问速度堪忧~如使用GitHub pages,将个人博客,项目主页托管在github上的话,体验不会很好。
在国内的代码托管平台主要是
gitee和coding,故他们的pages服务成了首选
同步方案
同步上传
通过remote 设定不同的别名,上传两遍,在\.git\config中同时设置GitHub 和Gitee 的地址
GitHub的Actions
借助wearerequired/git-mirror-action这个项目,通过GitHub的Actions 实现任意仓库自动同步
怎么做呢?
1、在仓库根目录下创建.github/workflows/sync.yml文件
name: Sync To Gitee
on: page_build
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: wearerequired/git-mirror-action@master
env:
SSH_PRIVATE_KEY: ${{ secrets.GITEE_PRIVATE_KEY }}
with:
source-repo: "git@github.com:qianzai/mydocs.git"
destination-repo: "git@gitee.com:BuZM/mydocs.git"
- 记得修改 source-repo 和 destination-repo为对应的两个仓库
- 因为有
page的关系,所以触发条件改为了page_build,如果只是普通的同步的话,可以把on换成对应的触发条件
2、添加钥匙
使用 ssh-keygen 命令生成一对公钥和私钥
在Gitee添加公钥
在GitHub添加私钥,添加GITEE_PRIVATE_KEY,内容为之前的私匙
这样子,每次部署之后,
github会自动推送到gitee上
pages 同步
gitee的pages服务不能自动更新,每次还要去手动更新,除非花钱购买开启gitee pages pro服务
模拟登录调用
其实抓取以下接口就能发现 直接通过POST: https://gitee.com/${repository}/pages/rebuild 这个接口进行的,那么我们只要模拟登录就可以了
axios.post(
url + "/rebuild",
qs.stringify({
branch: core.getInput("branch"),
build_directory: core.getInput("directory"),
force_https: core.getInput("https")
}),
{
headers: {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
Cookie: cookie,
Referer: url,
"X-Requested-With": "XMLHttpRequest",
"X-CSRF-Token": csrfToken
}
}
);
主要是headers里的 Content-Type, X-CSRF-Token, Cookie特别重要,页面的参数对应这页面的几个按钮
其中,Cookie 可以devtools中直接拿到,X-CSRF-TOKEN经过调查,被写在了<meta content="" name="csrf-token"></meta>上,通过获取任意一个页面然后拿到即可
这个大佬已经将其封装好了,我们直接使用即可
gitee-pages-action:github.com/mizuka-wu/g…
只要在之前actions上steps上追加一个step即可
- name: reload
uses: mizuka-wu/gitee-pages-action@v1.0.0
with:
repository: BuZM/mydocs
cookie: ${{ secrets.GITEE_COOKIE }}
directory: docs
https: true
添加 cookie
和之前添加私钥一样,在setting中点击secrets,新建GITEE_COOKIE,将上面获取到的cookie值存入其中即可
上传同步
Actions运行成功