提交挂钩上没有此类文件或目录错误

时间:2018-10-06 14:38:41

标签: git githooks

这是我的pre-commit钩子

#!/bin/sh

echo "pre-commit started"

filename="$1"
lineno=0

error() {
    echo "$1"
    exit 1
}

while read -r line
do
    [[ "$line" =~ ^#.* ]] && continue

    let lineno+=1
    length=${#line}

    if [[ $lineno -eq 1 ]]; then
        [[ $length -gt 50 ]] && error "Limit the subject line to 50 characters"
        [[ ! "$line" =~ ^[A-Z].*$ ]] && error "Capitalise the subject line"
        [[ "$line" == *. ]] && error "Do not end the subject line with a period"
    fi

    [[ $lineno -eq 2 ]] && [[ -n $line ]] && error "Separate subject from body with a blank line"
    [[ $lineno -gt 1 ]] && [[ $length -gt 72 ]] && error "Wrap the body at 72 characters"
done < "$filename"
exit 0

运行时出现此错误

› git commit -m "sfrewr"
pre-commit started
/Users/me/.git-templates/hooks/pre-commit: line 28: : No such file or directory
[master 6950a43] sfrewr
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 89

28行显示

done < "$filename"

2 个答案:

答案 0 :(得分:2)

Git的Object.keys(this)钩子不接受任何参数,但是您的shell脚本需要一个参数。尝试从空文件名读取时,会看到错误。

由于您似乎正在尝试对提交消息进行理智检查(一个值得称赞的目标),因此您可能想要使用JSON.stringify钩子。如果您想这样做,它既可以拒绝您的消息也可以对其进行编辑。您可以通过运行pre-commit了解更多有关哪些钩子做什么的信息。

答案 1 :(得分:0)

我遇到了同样的错误。然后我意识到我在项目文件夹的名称中使用了非英文字符。 :/