前言在上一篇《一篇带你用 VuePress + Github Pages 搭建博客》中,我们用VuePress成功搭建了一个博客并部署到GithubPages,但是由于Github访问问题,我们可以选择部署仓库到Gitee一使用Gitee的Pages服务重新生成一个静态网站进行备份。Gitee导入仓库第一部分我们在Github上创建了一个博客仓库。现在我们在Gitee上绑定Github账号,选择仓库导入:仓库建立之后,问题也随之而来,就是如何保证我们本地仓库的Github和Gitee仓库的代码同步呢?1.手动同步在Gitee的项目主页上,提供了一个同步按钮。只需要点击与Github同步更新即可,但注意这里的同步功能默认是强制同步的。推送到Github后,我们需要手动点击Gitee项目主页,有点麻烦。2.推送两个仓库另外,我们也可以直接推送到sh脚本文件中的两个仓库地址。我们修改一下上篇的脚本:#!/usr/bin/envsh#确保脚本抛出Encounterederrorsset-e#Generatestaticfilesnpmrundocs:build#进入生成的文件夹cddocs/.vuepress/distgitinitgitadd-Agitcommit-m'deploy'#如果发布到https://.github.io/gitpush-fgit@github.com:mqyqingfeng/learn-typescript.gitmaster:gh-pagesgitpush-fgit@gitee.com:mqyqingfeng/learn-typescript.gitmaster:gh-pagescd-当我们执行shdeploy.sh时,会自动推送到两个仓库。3、GithubActions自动同步我们也可以使用GithubActions写一个工作流,在发现Github博客仓库的gh-pages分支代码更新后,自动同步当前代码到Gitee。关于GithubActions的介绍可以参考阮一峰老师的《GitHub Actions 入门教程》。为了实现Gitee和Github的同步,我们需要用到一个action。幸运的是,业界已经有了现成的实现。这里我使用HubMirrorAction。我们可以看到使用的示例代码:steps:-name:将Github组织repos镜像到Gitee。uses:Yikun/hub-mirror-action@masterwith:src:github/kunpengcomputedst:gitee/kunpengcomputedst_key:${{secrets.GITEE_PRIVATE_KEY}}dst_token:${{secrets.GITEE_TOKEN}}account_type:有四个必填项inorg:src表示需要同步的源账户名,也就是我们Github的账户名,因为我的GithubID是mqyqingfeng,所以这里应该改成github/mqyqingfeng。dst表示需要同步到的目标账户名,也就是我们Gitee的账户名,因为我的GiteeID也是mqyqingfeng,所以这里改成gitee/mqyqingfeng。dst_key表示用于将代码上传到目的地的私钥,然后将其保存在Secrets中。具体操作步骤如下:获取私钥:cat~/.ssh/id_rsa复制私钥内容,然后在要同步的Github仓库中,选择“设置”->“秘密”->“Newrepositorysecret”填写SecretContent,Name为“GITEE_PRIVATE_KEY”,Value为复制的内容[](https://lovelijunyi.gitee.io/...),然后点击Addsecret。dst_token创建仓库的APItoken,用于自动创建不存在的仓库。这里我们从Gitee获取,具体地址为https://gitee.com/profile/personal_access_tokens。生成并复制Token,然后按照同样的步骤保存在Github的Secrets中。名称是“GITEE_TOKEN”。然后我们可以在仓库的根目录下创建一个目录.github/workflows,然后创建一个名为syncToGitee.yml的文件File:name:syncToGiteeon:push:branches:-gh-pagesjobs:repo-sync:runs-on:ubuntu-lateststeps:-名称:将Github组织repos镜像到Gitee。使用:Yikun/hub-mirror-action@masterwith:src:'github/mqyqingfeng'dst:'gitee/mqyqingfeng'dst_key:${{secrets.GITEE_PRIVATE_KEY}}dst_token:${{secrets.GITEE_TOKEN}}static_list:"learn-typescript"force_update:truedebug:true其中,static_list表示单仓库同步,??force_update为true表示开启gitpush-f强制同步,debug为true表示开启debug开关,会显示所有执行命令。当我们提交这样一个文件到Github时,Github会自动检测并运行该脚本。但是现在还有几个问题需要注意:因为我们是提交到Github的gh-pages分支,这个文件和目录需要写在gh-pages分支里面,观察我们的脚本代码,会发现每次我们shdeploy使用.sh时,将代码编译到dist目录,然后重新gitinit,最后强制提交。所以我们在项目根目录下创建.github/woorkflows/syncToGitee.yml是没有用的。一是提交dist目录下的代码,二是每次都会清空重新编译生成代码提交。为此,我们可以在脚本中添加代码,每次编译后,将外层的.github/woorkflows/syncToGitee.yml复制到dist目录下,提交到Github。所以我们还是在项目的根目录下添加目录和文件。此时文件结构如下:.├─docs│├─README.md│└─.vuepress│└─config.js└─.github│└─workflows│└─syncToGitee.yml└─package.json└─deploy.sh脚本文件代码如下:#!/usr/bin/envsh#确保脚本遇到任何错误都会抛出set-e#生成静态文件npmrundocs:build#进入生成的文件夹cddocs/.vuepress/dist#复制目录和文件cp-r../../../.github./gitinitgitadd-Agitcommit-m'deploy'#如果发布到https://.github.io/gitpush-fgit@github.com:mqyqingfeng/learn-typescript.gitmaster:gh-pagescd-此时我们运行shdeploy.sh,将代码提交到Github,然后就可以看到运行记录在仓库的Actions中:执行时间大概一分钟左右,会自动同步Gitee的代码。至此,我们实现了Github和Gitee代码库的同步。系列文章系列文章目录地址:https://github.com/mqyqingfeng/Blog微信:“mqyqingfeng”,加我到SaeYu的唯一读者群。如有错误或不准确的地方,请务必指正,万分感谢。如果你喜欢或者有启发,欢迎star,这也是对作者的鼓励。