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

Git pre-receive钩子无法获取传入参数,生成文件为空如何解决?

问题原因

pre-receive 钩子的参数传递逻辑和你理解的不一致,这类服务端接收钩子不会通过命令行位置参数($1、$2、$3)传递提交数据,所有推送的引用更新信息都是通过标准输入流传入的。
一次推送可能包含多个分支、标签的更新,每个更新对应标准输入中的一行,每行按空格分割后依次对应:旧版本哈希、新版本哈希、引用的完整路径。

修复后的钩子代码

把你的pre-receive脚本内容替换为以下内容即可:

#!/bin/bash -p

# 逐行读取标准输入的引用更新数据
while read old_hash new_hash ref; do
    echo "$old_hash" > pre-receive-old-hash.txt
    echo "$new_hash" > pre-receive-new-hash.txt
    echo "$ref" > pre-receive-ref.txt
done

exit 1

额外注意事项

  • 若你单次推送包含多个分支/标签的更新,上述写法只会保留最后一个更新的信息,有存储全量数据需求可以调整逻辑写入多份文件或者拼接内容。
  • 裸仓库没有工作目录,生成的pre-receive-*.txt默认会存储在裸仓库的根目录,而非hooks子目录中,找不到文件可优先去根目录查找。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:54:05