提交Git到主仓库时,能否自动更新子域名对应仓库内容?
实现主仓库推送自动同步子仓库内容(mdBook场景)
完全可以通过Git + GitHub Actions实现主仓库推送时自动同步对应卷到子仓库,以下是具体实现步骤:
1. 准备子仓库
- 为每部已完成的卷创建独立GitHub仓库(比如
theologicus-volume2),仓库结构要匹配mdBook单卷要求——至少包含该卷的src/目录和对应的book.toml(可从主仓库对应卷目录复制基础配置) - 提前完成子仓库部署配置:绑定子域名
volume2.theologic.us到GitHub Pages,确保mdBook构建逻辑正常(和主站部署流程一致)
2. 生成访问令牌
在你的GitHub账户设置里生成一个Personal Access Token (PAT),权限勾选repo(允许读写仓库),保存好这个令牌备用。
3. 配置主仓库的GitHub Actions工作流
在主仓库的.github/workflows/目录下新建工作流文件,比如sync-volumes.yml,内容如下(替换占位符为你的实际信息):
name: Sync Completed Volumes to Sub Repos on: push: branches: [ main ] # 仅当volume2目录变更时触发,减少不必要的工作流执行 paths: - 'volume2/**' jobs: sync-volume2: runs-on: ubuntu-latest steps: - name: 拉取主仓库代码 uses: actions/checkout@v4 - name: 准备要同步的卷内容 run: | # 创建临时目录存放卷内容 mkdir -p /tmp/volume2-sync # 复制主仓库中volume2的所有内容到临时目录 cp -r volume2/* /tmp/volume2-sync/ # 如果子仓库需要独立的book.toml,这里可以单独复制或调整配置 # cp ./volume2/book.toml /tmp/volume2-sync/ - name: 推送到子仓库 uses: ad-m/github-push-action@master with: repository: 你的GitHub用户名/theologicus-volume2 branch: main directory: /tmp/volume2-sync github_token: ${{ secrets.VOLUME_SYNC_PAT }}
4. 配置主仓库的Secrets
进入主仓库的「Settings > Secrets and variables > Actions」,添加一个名为VOLUME_SYNC_PAT的秘密变量,值为之前生成的PAT。
5. 验证同步效果
向主仓库的volume2/目录提交一次变更,查看GitHub Actions工作流是否执行成功,再检查子仓库代码是否更新、子域名网站是否同步了新内容。
额外优化点
- 多卷同步:如果有多个已完成的卷,可以在同一个工作流中添加多个
job,分别处理不同卷的同步逻辑 - 构建验证:在工作流中添加mdBook构建步骤,确保同步的内容能正常生成书籍,避免无效同步
- 分支限定:可以根据需要调整
on.push.branches,只在特定分支推送时触发同步
内容的提问来源于stack exchange,提问作者Joseph Louthan
相关产品推荐
相关产品推荐

