从手动到自动:代码多平台同步的最终秘籍
创作时间:
作者:
@小白创作中心
从手动到自动:代码多平台同步的最终秘籍
引用
CSDN
1.
https://blog.csdn.net/u010868168/article/details/145645396
在软件开发过程中,代码的多平台同步是一个常见的需求。本文将介绍一种通过GitHub Actions实现代码自动同步到多个代码托管平台(如Gitee、Gitlab、Bitbucket等)的方法,特别是基于SSH私钥的自动化同步方案,让代码同步变得更加简单高效。
一、背景与需求
在日常开发中,开发者通常会将代码存储在GitHub上。然而,由于网络访问的限制,有时会遇到无法访问的情况。为了确保其他用户能够顺利访问代码,开发者期望在向GitHub提交代码时,能够同步将代码推送到多个代码托管平台,如Gitee、Gitlab、Bitbucket等。
二、初始方案:本地配置多仓库地址
起初,开发者通过在本地配置多个仓库地址来实现这一需求,具体命令如下:
git remote add github 仓库地址
git remote add gitee 仓库地址
但是,每次提交代码时,都需要手动依次将代码推送到各个对应的仓库,操作较为繁琐:
git push github main
git push gitee main
三、使用 GitHub Action 实现自动化同步
后来,GitHub Action 的出现提供了自动化操作的解决方案。开发者开始使用它来实现多平台同步。不过,在使用多个平台同步功能时,需要事先向每个同步平台申请访问 Token。这些 Token 通常只能显示一次,当开启新的项目时,常常忘记之前的 Token,导致难以再次配置。
之前使用的同步代码如下:
# Sample workflow for building and deploying a Jekyll site to GitHub Pages
name: Push Other Pages
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
jobs:
# Build job
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: gh-pages
fetch-depth: 0 # <-- clone with complete history
- name: Sync Repo to Bitbucket
uses: heussd/mirror-to-bitbucket-github-action@v2
with:
username: flowstone
spacename: flowstone
repository: flowstone.bitbucket.io
password: ${{ secrets.BITBUCKET_PASSWORD }}
- name: Sync Repo to Coding
uses: serverlesslife-cn/sync-repo-to-coding@master
env:
# 在 GitHub Settings->Secrets 配置 CODING_PRIVATE_KEY
SSH_PRIVATE_KEY: ${{ secrets.CODING_PRIVATE_KEY }}
with:
# 注意替换为你的 GitHub 源仓库地址
github-repo: "git@github.com:flowstone/flowstone.github.io.git"
# 注意替换为你的 CODING 目标仓库地址
coding-repo: "git@e.coding.net:flowstone/flowstone.coding.me.git"
- name: Sync Repo to Gitlab
uses: action-pack/gitlab-sync@v3
with:
username: ${{ secrets.USERNAME }}
url: ${{ secrets.GITLAB_URL }}
# Personal access token from gitlab.com
token: ${{ secrets.GITLAB_PAT }}
四、新方法:SSH 私钥同步方案
后来,开发者从豆包处了解到一种新的同步方法。只需将 SSH 的私钥保存到 GitHub 仓库的 Secret 中,当执行 GitHub Action 脚本时,服务器就拥有私钥,从而可以同步绑定了相同公钥的代码平台。虽然这种方式存在一定风险,因为只要拥有私钥就可以访问所有仓库,但对于个人开发者而言,影响不大。
4.1 操作流程
- 找到本地的 SSH 私钥,一般默认绑定的是id_rsa。
- 打开id_rsa文件。
- 将文件内容配置到 GitHub 仓库中,每个需要同步的仓库都需要进行此配置。
4.2 同步脚本
同步脚本如下:
name: Sync Multi - Branches to Multiple Platforms via SSH
on:
push:
branches:
- '*' # 监听所有分支的推送事件
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0 # 进行完整克隆
- name: Configure Git user
run: |
git config --global user.name '流体石头'
git config --global user.email 'example@example.com'
- name: Add SSH key
uses: webfactory/ssh-agent@v0.8.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
- name: Add remote repositories
run: |
git remote add gitee git@gitee.com:flowstone/FS-Tool-Pro.git
git remote add bitbucket git@bitbucket.org:flowstone/FS-Tool-Pro.git
git remote add gitlab git@gitlab.com:flowstone/FS-Tool-Pro.git
- name: Add host keys to known_hosts
run: |
ssh-keyscan -H gitee.com >> ~/.ssh/known_hosts
ssh-keyscan -H bitbucket.org >> ~/.ssh/known_hosts
ssh-keyscan -H gitlab.com >> ~/.ssh/known_hosts
- name: Get current branch
id: get_branch
run: echo "::set-output name=branch::${GITHUB_REF#refs/heads/}"
- name: Push to targets
run: |
git push --force gitee ${{ steps.get_branch.outputs.branch }}
git push --force bitbucket ${{ steps.get_branch.outputs.branch }}
git push --force gitlab ${{ steps.get_branch.outputs.branch }}
五、注意事项
在上述同步代码中,需要指定同步的仓库地址。每次推送代码时,工作流都会自动执行。需要注意的是,其他代码平台必须配置相同的id_rsa公钥,并且创建相同的仓库名。
热门推荐
如何提升AI绘画中的手部效果
福州春节免费乘车活动火爆 主城区超千万人次出行
www服务器如何将信息结构化?
为什么不能抖腿?国学大师南怀瑾:赶紧戒掉,否则会倒霉……
历史上真实的清朝男子发式和影视剧中的有什么区别呢
揭秘《暗黑破坏神》宇宙起源:从混沌到永恒的传奇之战!
空调异响及掉冰块现象分析:原因与解决方案
秋季降温提醒:这份防寒保暖小贴士,请查收
孙吴帝王谱:孙吴历代帝王的在位时间和事迹
武当道门八段锦:八百年传承的养生瑰宝
从美国寄件回国:USPS、UPS、FedEx和DHL四大快递方式详解
是什么影响了你的手机信号?8大原因全搞清!
《原神》七圣召唤芙宁娜PVE卡组攻略:轻松碾压!
AI预测汽车涂装的未来:纳米涂层技术带自清洁功能
如何正确修改文件后缀名及注意事项详解
浅析波塞冬:古希腊神话中的神祇,拥有丰富的神话传说和象征意义
二手本田雅阁车况判断指南:从外观到内饰的全面检查标准
香港打工申请指南:了解申请流程和注意事项
教你轻松处理八爪鱼,掌握技巧让烹饪变得简单愉快
2025年四川新高考志愿填报指南:含志愿设置、规则
TA18钛合金力学性能和物理性能分析
肇庆七星岩景区全攻略:喀斯特地貌下的奇幻之旅
你观影 我普法之二丨带你看看《哪吒之魔童闹海》中关于家庭教育的那些事
没有对比就没有伤害,你知道《山河令》和《陈情令》的区别是什么?
血缘不决定继承?宅基地继承有讲究,有女无子、非农子女要长点心
老人喝花旗参好还是西洋参好?
从中美日三国之间的差异,看中国天然气产业布局的重点和方向
邓锋:从清华学子到硅谷成功企业家
2025年澳门大学收费标准:一年学费多少?多少分能上?
长安汽车:势头正盛,突遇重组