本blog的出现是为了能够分享个人所学的相关知识,检验自身学习成果。内容会和其他技术存在部分关联,如有任何描述错误或者说明有误的地方,还望指出。
1. 背景
在代码托管的过程中,我们有时候需要将GitHub的代码同步到其他托管平台(Gitee、GitLab等)的需求。主要关系是:以GiHub为主仓,并且定期自动同步到Gitee作为镜像仓库。GitHub Pages及Gitee Pages自动更新部署。
2. 方案
2.1 Gitee手动同步
Gitee本身是提供了其他平台仓库绑定及绑定仓库同步的功能。这个功能是可以满足需求的。但是,作为一个程序员,能自动完成的事情坚决不靠人力去完成。而且如果一个组织下发展到了几百上千个仓库后,手动同步的缺陷就十分明显了。这个时候就需要某种计算机资源自动的完成同步操作。所以这个方案排除。
2.2 GitHub Action
其实GitHub Action是GitHub的持续集成服务。它能够在指定操作时触发脚本功能。就选这个方案了。GitHub Action的功能是很强大的。关于GiHub Action的详细内容可以看GitHub Action官网。
持续集成在项目中有着很重要的地位,推荐大家去了解了解。
3. 具体操作
3.1 准备工作
3.1.1 Github和Gitee的邮箱绑定
代码托管平台的邮箱在这里其实很重要,我在这里踩过一个坑。邮箱关系到ssh公钥私钥。推荐所有托管平台的邮箱统一。
3.1.2 根据托管平台的邮箱生成ssh的公钥私钥
git bash 中敲入命令 会在
~/.ssh
文件夹下生成id_rsa.pub
文件和id_rsa
文件,分别存放公钥和私钥
ssh-keygen -t rsa -C "user@email.com"
3.2 将公钥添加到Gitee
Gitee:[设置] -> [安全设置] -> [SSH公钥]
3.3 将私钥添加到GitHub中需要备份的仓库的Secrets中
GitHub Repository -> [Settings] -> [Secrets]


记住Name的值,将私钥填入Value中。
3.4 配置GitHub Action文件
3.4.1 在需要备份的仓库的根目录下新建文件配置文件
路径为: .github/workflows/gitee_mirror.yml ,并在gitee_mirror.yml中添加以下内容。
name: 'GitHub Actions Mirror'
on: [push, delete]
jobs:
mirror_to_gitee:
runs-on: ubuntu-latest
steps:
- name: 'Checkout'
uses: actions/checkout@v1
- name: 'Mirror to gitee'
uses: pixta-dev/repository-mirroring-action@v1
with:
target_repo_url:
git@gitee.com:xxxxxx/xxxxxx.git
ssh_private_key:
${{ secrets.GITEE_PRIVATE_KEY }}
以上action中存在 repository-mirroring-action,这个有兴趣的可以了解。
3.4.2 其中需要注意的有这几个配置
on : 该配置项表示在指定操作事进行同步
target_repo_url : 该配置项填代码备份目的平台仓库的ssh 地址
ssh_private_key: 该配置填写在GitHub中配置的Secrets。在本文3.3步骤中提到记住的Name,我配置的Name是GITEE_PRIVATE_KEY。
附上我配置的workFlow文件
3.5 提交配置文件
在GitHub的Actions中可以看到生效的workflow
