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

如何在强制推送场景下触发git的post-receive钩子正常生效?

问题原因

首先排除钩子未触发的可能性:post-receive 钩子在强制推送场景下默认会正常执行,你遇到的文件未同步问题,是现有脚本的git checkout命令在分支提交历史被强制改写(amend后force push就属于这类场景)时,不会主动将工作树同步到改写后的最新分支HEAD导致的。

解决方法

第一步:确认钩子权限

先保证钩子文件有可执行权限,执行以下命令配置:
chmod +x /var/repo/test.git/hooks/post-receive

第二步:替换钩子脚本内容

将原脚本替换为以下内容,适配历史改写的强制推送场景:

#!/bin/sh
# 声明Git环境变量
export GIT_DIR=/var/repo/test.git/
export GIT_WORK_TREE=/var/www/

# 强制同步工作树到dev分支最新提交,无视历史变更
git checkout -f dev
git reset --hard refs/heads/dev

可选:钩子触发验证

如果想确认钩子是否正常被触发,可以在脚本开头加入日志打印逻辑:
echo "$(date) 收到push事件,钩子执行" >> /tmp/git_post_receive.log
强制推送后查看/tmp/git_post_receive.log文件是否有新增日志即可验证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:03