GitHub Pages自定义域名配置在推送gh-pages新提交后被重置如何解决
问题核心成因
GitHub Pages的自定义域名配置并非独立存储在平台设置后台,它会实时同步为站点发布分支根目录下的CNAME文件。
你当前的推送脚本存在全量清空分支文件的逻辑:
- 每次构建后创建无历史记录的孤儿分支
- 执行
rm -rf *删除分支内所有原有文件 - 仅写入Zola构建产物、
.nojekyll标识、新生成的README.md
整个流程未保留存储自定义域名的CNAME文件,强推覆盖分支后,GitHub Pages服务检测不到CNAME文件,就会自动清空设置中的自定义域名配置,回退为默认的.github.io访问地址。
可落地的修改方案
适配现有脚本逻辑,无需大幅改动,只要保证每次推送的gh-pages分支根目录下存在正确的CNAME文件即可,两种实现方式二选一:
- 最简单的实现:在创建站点标识文件的步骤中,直接将自定义域名写入
CNAME文件。比如你的域名为www.bigelectrons.com,在现有脚本的touch .nojekyll附近添加一行命令:
每次构建推送时,分支根目录都会携带与自定义域名一致的CNAME文件,平台不会触发配置重置。echo "www.bigelectrons.com" > CNAME - 如果不想把域名硬编码在流程脚本中,可以在清空旧文件前先备份原有CNAME,等新构建内容写入完成后再恢复。修改后的对应脚本片段:
- name: Commit and push to target branch run: |- git config --global user.email "workflow-bot@mydomain.com" git config --global user.name "workflow-bot" git checkout --orphan $TARGET_BRANCH # 提前备份原有CNAME文件,文件不存在则跳过 cp CNAME /tmp/CNAME 2>/dev/null || true rm -rf .github/ mv public .. rm -rf * mv ../public/* . # 恢复备份的CNAME文件 cp /tmp/CNAME ./CNAME 2>/dev/null || true touch .nojekyll touch README.md echo 'https://www.bigelectrons.com - SITE GENERATED USING ZOLA' > README.md git add . git commit -m "generated using zola build" git push --set-upstream origin $TARGET_BRANCH --force - 注意:修改完成后首次运行流程,可检查gh-pages分支根目录下的CNAME文件内容是否与自己的自定义域名一致,确保配置生效。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

