git-hooks pre-push documentation表示 stdin 的第一行将填充本地ref和sha,而远程ref和sha将填充:
<local ref> SP <local sha1> SP <remote ref> SP <remote sha1> LF
但是,我的简单预推脚本:
#!/bin/bash
echo "params=[$@]"
read line
echo "stdin=[$line]"
exit 1
在运行$git push
时返回以下输出:
params=[origin [url]:[branch].git]
stdin=[]
error: failed to push some refs to '[remote]'
脚本的参数如文档中所指定(远程的名称和路径)。错误是预期的,因为我的脚本以状态1退出。但是,我似乎无法弄清楚为什么我没有按照指定在 stdin 上接收本地和远程引用通过文件。
这是 git 中的错误吗?或者,我错过了什么?
答案 0 :(得分:7)
道歉,如果这说明显而易见,但如果没有什么可以推动,你就不会在stdin上得到任何线条。样本.git/hooks/pre-push.sample
有一个while循环:
IFS=' '
while read local_ref local_sha remote_ref remote_sha
do
...
done
当我在这里尝试使用循环内部的回声而没有别的东西时,这似乎有效 - 当我没有任何东西可以推动时,我什么也得不到,当我这样做时输出。