You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pre-Commit Hook脚本检测特定文件夹未暂存文件失效问题排查

问题排查与解决方案

你的pre-commit钩子失效的原因主要有以下几点,对应解决方案如下:

1. 仅检测已跟踪文件的未暂存修改,遗漏未跟踪的新文件

git diff Resources/config只会输出已被git跟踪的文件的未暂存修改,对于从未执行过git add的新文件(未跟踪文件)完全不会检测到。

2. 用wc -l判断差异的方式不可靠

git diff的输出行数可能因文件内容的换行、git diff的格式输出(比如权限变更、空文件修改)出现误判,比如修改后刚好输出0行的情况,导致脚本错误认为没有未暂存修改。

修复后的钩子配置

替换原有脚本逻辑,改用git status --porcelain来全面检测未暂存修改(包括已跟踪文件的未暂存变更和未跟踪新文件):

- id: check-modified-files
  name: Check for Modified Unstaged Files
  entry: bash
  language: system
  args:
  - -c
  - |
      # 检测目标目录下的未暂存修改(已跟踪文件变更)和未跟踪新文件
      if git status --porcelain Resources/config | grep -q -E "^ M|^??"; then
        echo "Error: Unstaged files found in the specific folder: ./Resources/config"
        exit 1
      fi

代码说明

  • git status --porcelain:以简洁固定格式输出文件状态,避免格式变动导致误判
  • ^ M:匹配已跟踪且未暂存的修改文件
  • ^??:匹配未跟踪的新文件
  • grep -q:静默匹配,只要有符合条件的行就返回非0退出码,触发错误提示

内容的提问来源于stack exchange,提问作者dev1417

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 15:31:20