同一GitHub仓库双分支部署两个GitHub Pages站点方案咨询
实现方案与操作步骤
核心思路
通过修改两个分支的GitHub Actions工作流,让它们分别操作gh-pages分支的不同目录:
- branch1(Next.js项目)部署后覆盖
gh-pages分支根目录,但保留branch2文件夹 - branch2(静态站点)部署后仅更新
gh-pages分支下的branch2文件夹,不触动根目录内容
1. 修改branch1的工作流脚本
替换branch1中现有的.github/workflows/[原部署文件名].yml为以下内容:
name: Deploy Next.js to GitHub Pages (Root) on: push: branches: [branch1] jobs: deploy: runs-on: ubuntu-latest steps: - name: 拉取branch1代码 uses: actions/checkout@v4 - name: 配置Node.js环境 uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: 安装依赖 run: npm ci - name: 构建并导出Next.js静态文件 run: npm run export - name: 拉取gh-pages分支 uses: actions/checkout@v4 with: ref: gh-pages path: gh-pages - name: 保留branch2文件夹并更新根目录 run: | cd gh-pages # 删除根目录下除branch2外的所有内容 ls -1 | grep -v 'branch2' | xargs rm -rf # 将Next.js构建产物复制到根目录 cp -r ../out/* . - name: 提交并推送变更 run: | cd gh-pages git config user.name "GitHub Actions" git config user.email "actions@github.com" git add . git commit -m "Deploy branch1 to root" || echo "无变更需要提交" git push
2. 添加branch2的工作流脚本
在branch2中创建.github/workflows/deploy-branch2.yml文件,内容如下:
name: Deploy Static Site to GitHub Pages (/branch2) on: push: branches: [branch2] jobs: deploy: runs-on: ubuntu-latest steps: - name: 拉取branch2代码 uses: actions/checkout@v4 with: path: branch2 - name: 拉取gh-pages分支 uses: actions/checkout@v4 with: ref: gh-pages path: gh-pages - name: 更新gh-pages中的branch2目录 run: | # 确保branch2目录存在 mkdir -p gh-pages/branch2 # 将branch2的所有内容复制到目标目录,覆盖旧文件 cp -r branch2/* gh-pages/branch2/ - name: 提交并推送变更 run: | cd gh-pages git config user.name "GitHub Actions" git config user.email "actions@github.com" git add . git commit -m "Deploy branch2 to /branch2" || echo "无变更需要提交" git push
3. 配置GitHub Pages源
- 进入仓库的Settings页面
- 选择左侧的Pages选项
- 在Source区域:
- 分支选择
gh-pages - 目录选择
/ (root)
- 分支选择
- 点击Save保存配置
4. 测试部署
- 向branch1推送任意变更:工作流会自动更新
gh-pages根目录,同时保留branch2文件夹 - 向branch2推送任意变更:工作流仅更新
gh-pages/branch2目录,不影响根目录内容
内容的提问来源于stack exchange,提问作者DavidNyan10
相关产品推荐
相关产品推荐

