git diff是否可递归检查文件夹及其子文件夹的内容差异?
Git目录差异递归检测方案
git diff 指定目录路径时默认递归检测所有层级子目录的文件变更,不需要额外添加递归参数,你当前的写法检测不到子文件夹变更可按以下步骤调整:
- 首先确认
$oldrev、$newrev变量取值正确,hook场景下需确保两个参数是合法的提交哈希值,检测的修订范围覆盖了子文件夹变更对应的提交 - 替换
--quiet参数为--exit-code,同时屏蔽标准输出避免无关内容污染变量,调整后的代码如下:
dataChangedStr=$(git diff --exit-code $oldrev $newrev -- config/extensions/ > /dev/null || echo changed)
如果仍检测不到子文件夹变更,可做以下排查:
- 确认
config/extensions/路径末尾的斜杠正常,指向的是目录而非同名文件 - 检查子目录下的文件是否被
.gitignore规则命中,被忽略的文件变更不会被git diff识别 - 若仅需检测部分指定子目录,可直接在diff命令后追加多个目录路径,无需编写多条diff语句:
# 仅检测entity、typelist两个子目录的变更 dataChangedStr=$(git diff --exit-code $oldrev $newrev -- config/extensions/entity/ config/extensions/typelist/ > /dev/null || echo changed)
内容的提问来源于stack exchange,提问作者Noah Samuel
相关产品推荐
相关产品推荐

