【问题标题】:Git-hooks pre-push script does not receive input via STDINGit-hooks pre-push 脚本不通过 STDIN 接收输入
【发布时间】:2014-04-30 08:59:32
【问题描述】:

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 中的错误吗?或者,我错过了什么?

【问题讨论】:

    标签: git bash githooks


    【解决方案1】:

    抱歉,如果这是显而易见的,但如果没有什么可推动的,您将不会在标准输入上看到任何行。示例 .git/hooks/pre-push.sample 有一个 while 循环:

    IFS=' '
    while read local_ref local_sha remote_ref remote_sha
    do
        ...
    done
    

    当我在这里尝试它时,它似乎可以工作,在该循环中使用 echo 而没有其他任何东西 - 当我没有什么要推送时,我什么也得不到,而当我这样做时输出。

    【讨论】:

    • 我还没有检查过,但我确信这正是正在发生的事情。问题是我误解了您上面概述的约定。感谢您清除它!
    • @dcow 这表明需要一个小的文档补丁来澄清问题;-) github.com/git/git/blob/master/Documentation/SubmittingPatches
    • @PhilipOakley 已发布到邮件列表。你愿意看看吗?
    • @dcow 我觉得它看起来不错,除了一个拼写“believe”之外,不知何故生成了三个副本(有什么想法吗?)。我看到 Junio(维护者)已经做了他惯常的事情,试图确保澄清涵盖其他可能没有考虑过的领域。
    • @PhilipOakley 这三个副本来自我试图更新初始补丁。注释中链接到这个问题的 url 是错误的,所以我修复了它并回复了。该消息显示在 gmail 中已损坏,因此我仔细检查了所有内容并再次尝试。它看起来仍然一样,所以我想这只是 gmail 的怪癖。感谢您的 cmets!
    猜你喜欢
    • 2018-02-26
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多