Git pre-commit钩子语法错误排查及VS2019提交限制代码求助
问题解决:pre-commit钩子语法错误修复
错误原因
你遇到的unexpected end of file错误,核心是if-else结构未闭合——原脚本的else块写完echo "....OK"后,缺少了闭合整个if语句的fi。此外还有两处小语法问题:
- 重复的shebang(
#!/bin/sh和#!/usr/bin/env bash只需保留一个,推荐后者) fname= $filename中等号两侧多了空格,会导致变量赋值失败
修复后的完整钩子代码
#!/usr/bin/env bash listchange=$(git diff --name-only) echo "Check filenames:" wrongfilenames=$( for filename in $listchange do fname="$filename" if [[ $fname = 'strings.exe' ]]; then echo "$fname" echo "has strings.exe" fi done ) if [ -n "$wrongfilenames" ] ; then echo "The following files must not be committed:" echo "$wrongfilenames" echo "Commit rejected, fix it and try again." exit 1 else echo "....OK" fi
关键修复点说明
- 移除重复的shebang,保留
#!/usr/bin/env bash确保bash环境执行 - 修正变量赋值:
fname="$filename"(等号两侧无空格,加引号避免文件名含空格时出错) - 在else块末尾添加
fi,闭合整个if-else语句结构 - 给echo输出的变量加双引号,避免文件名含空格时拆分问题
使用步骤
- 替换
.git/hooks/pre-commit中的原代码为修复后的版本 - 确保钩子文件有执行权限:在Git Bash或终端中运行
chmod +x .git/hooks/pre-commit - 再次尝试提交即可验证效果
内容的提问来源于stack exchange,提问作者Hemant Pawar
相关产品推荐
相关产品推荐

