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

Git pre-commit钩子语法错误排查及VS2019提交限制代码求助

问题解决:pre-commit钩子语法错误修复

错误原因

你遇到的unexpected end of file错误,核心是if-else结构未闭合——原脚本的else块写完echo "....OK"后,缺少了闭合整个if语句的fi。此外还有两处小语法问题:

  1. 重复的shebang(#!/bin/sh和#!/usr/bin/env bash只需保留一个,推荐后者)
  2. 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输出的变量加双引号,避免文件名含空格时拆分问题

使用步骤

  1. 替换.git/hooks/pre-commit中的原代码为修复后的版本
  2. 确保钩子文件有执行权限:在Git Bash或终端中运行chmod +x .git/hooks/pre-commit
  3. 再次尝试提交即可验证效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 16:10:29