如何用Git post-merge钩子检测pull后指定目录的变更?
实现Git Pull后检测特定目录变更的钩子
你猜的没错,post-merge钩子就是正确的选择——因为git pull本质是git fetch + git merge,merge操作完成后post-merge钩子会自动触发。以下是具体实现步骤:
步骤1:创建post-merge钩子文件
进入你的Git仓库根目录,打开.git/hooks文件夹,创建一个名为post-merge的文件(不要加任何后缀)。
步骤2:编写检测脚本
将以下bash脚本写入post-merge文件:
#!/bin/bash # 定义需要检测的目标目录 TARGET_DIR="/public" # 获取本次合并中目标目录的变更文件列表 CHANGED_FILES=$(git diff --name-only HEAD@{1} HEAD -- "$TARGET_DIR") # 如果存在变更,打印提示信息 if [ -n "$CHANGED_FILES" ]; then echo "⚠️ 提示:$TARGET_DIR 目录在本次操作后有更新,变更文件如下:" echo "$CHANGED_FILES" fi
步骤3:赋予脚本执行权限
在终端中执行命令,给钩子文件加上可执行权限:
chmod +x .git/hooks/post-merge
关键说明
HEAD@{1}代表合并前的仓库HEAD状态,不管是快进合并还是三方合并,都能准确对比出本次merge带来的变更- 用
--name-only参数只会输出变更的文件名,如果你需要更详细的变更差异,可以换成--stat(显示变更统计)或者直接去掉该参数(显示完整diff内容) - 这个钩子不仅在
git pull时触发,手动执行git merge时也会生效——如果只想针对git pull场景,可以额外添加判断,但多数情况下没必要,因为merge导致的目录变更同样值得关注
内容的提问来源于stack exchange,提问作者raquelhortab
相关产品推荐
相关产品推荐

