同一个Git仓库多个网站,如何减少Vercel/EdgeOne重复构建?用Commit前缀路由发布分支

如果你在一个 Git 仓库里同时维护了多个网站站点(例如:同一个仓库下同时管理中文站和英文站,或者多语言国际化博客),并且把它们分别部署在类似 Vercel、腾讯云 EdgeOne Pages、Cloudflare Pages 等平台上,你大概率会遇到这样一个头疼的问题:

只要你向 GitHub 推送一次代码,所有绑定的站点都会同时被拉起全量构建!

  • 明明只更新了一篇中文内容,英文站点也跟着白白跑一次构建;
  • 英文站改了一个单词错别字,中文站点也被重新打包上线;
  • 如果你习惯在写文章、敲代码的过程中经常推送代码到 GitHub 备份,平台构建额度和免费并发数很快就会被耗尽,甚至触发频控限流。

针对这个场景,本文分享一种不需要依赖平台高级特性、通用性极强且能百分之百自主控制发布时机的轻量解决方案:Commit 消息前缀路由 + 发布分支隔离。


方案设计思路

很多同学首先想到的可能是平台自带的“路径差异检测”(例如 Vercel 的 Ignored Build Step),但这种方式有两个明显弊端:

  1. 平台兼容性差:不少新兴平台或国内托管服务对路径监听、差异探测的支持不够完善,配置起来容易失效;
  2. 无法拦截“未完成的草稿”:即便你修改了中文内容,但如果只是中途推送到 GitHub 做备份、文章还没写完,自动化目录监听依然会直接将半成品打包上线。

更灵活的思路是把“构建触发权”掌握在自己手里:

  1. 分支职责分离:
    • master 分支:主分支,日常写作、代码备份、提交历史全部在这里。
    • cd-zh 分支:专门用于触发中文站上线的专属部署分支。
    • cd-en 分支:专门用于触发英文站上线的专属部署分支。
  2. 平台侧绑定专属分支:
    • 托管平台的中文项目:监听分支从 master 改为 cd-zh;
    • 托管平台的英文项目:监听分支从 master 改为 cd-en。
  3. Commit 信息前缀作为“发布指令”:
    • 提交信息以 cd-zh 开头(如 cd-zh: 发布新文章)→ 只推送到 cd-zh 分支,仅中文站构建;
    • 提交信息以 cd-en 开头(如 cd-en: add new post)→ 只推送到 cd-en 分支,仅英文站构建;
    • 提交信息以 cd 开头(如 cd: 全站同步发布)→ 同时更新两个分支,双站同时构建;
    • 日常普通提交(如 保存草稿、修个样式备份)→ 不更新任何 CD 分支,两个平台零触发、零消耗!

GitHub Actions 自动化分发配置

在 GitHub 仓库中创建 .github/workflows/deploy-router.yml,放入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
name: Branch Router for CD

on:
push:
branches: [master]

# 核心权限:允许 Action 往仓库推送分支
permissions:
contents: write

jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Route to Branches based on Commit Message
run: |
# 获取本次提交的第一行文本
MSG=$(git log -1 --pretty=%B | head -n 1)
echo "Current commit message: $MSG"

case "$MSG" in
cd-en*)
echo ">>> 检测到 cd-en 指令:仅更新 cd-en 分支,触发英文站构建"
git push origin master:cd-en --force
;;
cd-zh*)
echo ">>> 检测到 cd-zh 指令:仅更新 cd-zh 分支,触发中文站构建"
git push origin master:cd-zh --force
;;
cd\ *|cd:*|cd)
echo ">>> 检测到 cd 指令:同时更新两个分支,触发双站构建"
git push origin master:cd-zh --force
git push origin master:cd-en --force
;;
*)
echo ">>> 普通提交(未包含 CD 指令):跳过所有站点构建,节省额度"
;;
esac

小技巧(避免分支合并冲突):
脚本中使用的是 git push origin master:cd-zh --force,它是直接将 master 的最新指针强制覆盖到发布分支上,把部署分支单纯作为“信号触发器”。这样不管 master 分支怎么变动,部署分支永远不会产生任何 merge 历史冲突。


托管平台控制台配置

代码推送到 GitHub 后,只需到你的托管平台(EdgeOne / Vercel / Cloudflare Pages)控制台做一次极简修改:

  1. 打开中文站点项目:进入“构建设置 / Git 配置”,将生产分支从 master 改为 cd-zh;
  2. 打开英文站点项目:将生产分支从 master 改为 cd-en。

实际使用体验

配置完成后,发布节奏彻底变得可控:

  • 平时写文章写到一半,随时 git commit -m "update draft" 然后 git push,GitHub 只做远程备份,线上网站完全不跑构建,省心省额度;
  • 中文文章润色完毕,准备发布:
    1
    2
    git commit -m "cd-zh: 发布某某实用小工具介绍"
    git push
    此时 GitHub Action 秒级响应,将代码同步至 cd-zh 分支,只有中文站点开始构建上线;
  • 如果同时修改了公共配置、底层主题或双语文章需要一并更新,直接:
    1
    2
    git commit -m "cd: 全站配置升级"
    git push
    两个站点同步触发构建。

通过这种“Commit 意图驱动”的分支路由方式,不仅大幅削减了无效构建的次数,也彻底避免了草稿误上线的尴尬。

在完成改造后:

  • 解决了文章草稿,提交的时候只要不写 cd 开头的提交消息,就不会触发构建
  • 只更新英文网站,就只更新英文站点,不会中英文一起更新。
  • 如果要全量更新中文、英文网站,也能轻松控制,提交消息写 cd 开头即可
  • 减少了构建次数,避免 vercel、腾讯的构建次数限制
  • 为地球节能做出巨大贡献!
  • 本技术方案兼容全部平台,不依赖 vercel 的忽略等特效
  • 节省了构建额度

同一个Git仓库多个网站,如何减少Vercel/EdgeOne重复构建?用Commit前缀路由发布分支
https://365note.janqi.com/p/同一个Git仓库多网站,如何减少Vercel或EdgeOne重复构建/
作者
365笔记
发布于
2026年10月30日
许可协议