如何实现自动拒绝修改指定生成文件的GitHub PR,避免无效改动
解决方案
方案1:配置.gitattributes标记自动生成文件(轻量化提示方案)
这是GitHub原生支持的功能,你只需要在仓库根目录新建.gitattributes文件,添加规则标记你的自动生成文件即可,示例配置:
# 标记所有HTML文件为自动生成文件 *.html linguist-generated=true # 若生成文件存放在特定目录,比如public目录下所有内容,可按如下规则配置 public/** linguist-generated=true
添加该配置后,GitHub在PR页面会默认折叠所有这类标记文件的改动,同时会给提交者显示「该文件为自动生成文件,不建议手动修改」的提示,能从前端层面先过滤掉一部分误改提交。
该方案仅做提示不会主动拦截PR,配合方案2使用效果最佳。
方案2:配置GitHub Actions自动拦截不符合要求的PR
这是强管控方案,能直接拦截改动了生成文件的PR,同时自动给提交者发送友好提示。
操作步骤:
- 在仓库下新建
.github/workflows/block-modify-generated-files.yml文件,填入以下配置,你可以根据自己的实际生成文件路径修改匹配规则:
name: Block changes to generated files on: pull_request: types: [opened, synchronize, reopened] permissions: contents: read pull-requests: write jobs: check-files: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Get changed files id: changed-files uses: tj-actions/changed-files@v41 with: # 此处替换为你自己的自动生成文件匹配规则 files: | *.html public/** - name: Comment and block PR if generated files are modified if: steps.changed-files.outputs.any_changed == 'true' uses: thollander/actions-comment-pull-request@v2 with: message: | 您好,本次PR改动了自动生成的站点文件: ${{ steps.changed-files.outputs.all_changed_files }} 这些文件是由GitHub Actions自动构建生成的,手动修改的内容会在下一次站点更新时被覆盖,请修改对应的构建模板文件后重新提交PR,感谢你的贡献。 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Fail check if generated files are modified if: steps.changed-files.outputs.any_changed == 'true' run: exit 1
- 配置仓库分支保护规则:进入仓库
Settings → Branches → Branch protection rules,给你的主分支添加保护规则,勾选「Require status checks to pass before merging」,把刚才新建的check-files工作流设置为必须通过的检查项即可。
配置完成后,只要PR改动了你指定的自动生成文件,工作流就会自动失败,PR无法合并,同时会自动给PR发送提示评论告知用户原因。
可选补充方案:配置PR提交模板
你还可以在仓库里添加PR提交模板,在模板最开头醒目提示不要修改自动生成文件,进一步降低误提交概率:
在.github/PULL_REQUEST_TEMPLATE.md里添加:
⚠️ 注意:请勿手动修改根目录下的HTML文件或public目录下的所有文件,这些文件为自动生成文件,修改会被覆盖,请调整对应的构建模板文件。
内容的提问来源于stack exchange,提问作者Dave Cross
相关产品推荐
相关产品推荐

