如何将dev分支指定文件夹复制到deploy分支,实现GitHub Pages自动化部署?
GitHub Pages 自动化部署方案(从dev分支dist同步到deploy分支根目录)
核心思路
创建无历史记录的干净deploy分支,将dev分支下packages/client/dist/的内容直接复制到该分支根目录,推送前彻底清空分支旧内容,确保deploy分支仅包含最新构建产物。
具体命令步骤(可封装为yarn脚本)
1. 前置准备(确保在dev分支且已完成构建)
git checkout dev yarn build # 生成packages/client/dist/下的构建产物
2. 重置deploy分支(清空所有旧内容)
# 创建无父提交的空分支(若deploy已存在,会强制覆盖原有内容) git checkout --orphan deploy # 删除分支下所有文件及目录,保证工作区完全干净 git rm -rf .
3. 复制dist内容到当前分支根目录
# 复制dist下的所有可见文件到工作区根目录 cp -r packages/client/dist/* . # 复制dist下的隐藏文件(如.gitignore、CNAME等,忽略不存在的报错) cp -r packages/client/dist/.* . 2>/dev/null || true
4. 提交并推送deploy分支
git add . # 带时间戳的提交信息,方便追溯部署版本 git commit -m "chore: deploy to GitHub Pages [$(date +'%Y-%m-%d %H:%M:%S')]" # 强制推送覆盖远程分支(因无历史记录,必须用-f) git push -f origin deploy
5. 切回dev分支继续开发
git checkout dev
封装为yarn命令
在项目根目录的package.json中添加如下脚本,之后只需执行yarn deploy:ghp即可一键完成部署:
{ "scripts": { "deploy:ghp": "git checkout dev && yarn build && git checkout --orphan deploy && git rm -rf . && cp -r packages/client/dist/* . && cp -r packages/client/dist/.* . 2>/dev/null || true && git add . && git commit -m \"chore: deploy to GitHub Pages [$(date +'%Y-%m-%d %H:%M:%S')]\" && git push -f origin deploy && git checkout dev" } }
关键问题说明
- .gitignore干扰解决:直接复制dist文件到空分支,而非从dev分支缓存读取,dev分支的
.gitignore不会影响deploy分支的文件提交。 - 旧产物清理:
git checkout --orphan+git rm -rf .确保每次部署都是全新环境,彻底避免旧文件残留。 - 强制推送合理性:deploy分支仅用于存放构建产物,无开发历史,强制推送不会丢失有效内容。
内容的提问来源于stack exchange,提问作者optimizitor
相关产品推荐
相关产品推荐

