Bash Git pre-commit钩子检查字符串,如果该字符串存在,则退出代码1

Bash Git pre-commit钩子检查字符串,如果该字符串存在,则退出代码1,bash,git,pre-commit-hook,Bash,Git,Pre Commit Hook,我正在尝试使用一个预提交钩子来检查分段文件,并读取差异来检查几个字符串。如果字符串存在,则提交必须失败 #!/bin/bash #import os echo "Running pre-commit hook" checks=os.environ["APPSETTING_DEVPASSWORD"],os.environ["APPSETTING_DEVUSER"],os.environ["APPSETTING_DEVPASS_ELMAH"] git diff --cached --nam

我正在尝试使用一个预提交钩子来检查分段文件,并读取差异来检查几个字符串。如果字符串存在,则提交必须失败

#!/bin/bash
#import os

echo "Running pre-commit hook" 
checks=os.environ["APPSETTING_DEVPASSWORD"],os.environ["APPSETTING_DEVUSER"],os.environ["APPSETTING_DEVPASS_ELMAH"]



git diff --cached --name-status | while read x file; do

      if [ "$x" == 'D' ]; then continue; fi
    for word in $checks
    do
        if egrep $word $file ; then
            echo "ERROR: Disallowed expression \"${word}\" in file: ${file}"
            exit 1
        fi
    done
done || exit $? 

即使文件中存在字符串,它仍然提交文件。任何指导都将不胜感激。我是bash的新手。

它一定是这样的:

#!/bin/bash

echo "Running pre-commit hook" 
checks=($APPSETTING_DEVPASSWORD $APPSETTING_DEVUSER $APPSETTING_DEVPASS_ELMAH) # create an array

git diff --cached --name-status | while read flag file; do
    if [ "$flag" == 'D' ]; then continue; fi

    for word in ${checks[@]}
    do
        if egrep -q "$word" "$file"; then
            echo "ERROR: Disallowed expression \"${word}\" in file: ${file}" >&2
            exit 1
        fi
    done
done

我可以在服务器端添加相同的钩子来强制所有开发人员机器吗?您不能强制对开发人员主机执行
预提交
钩子,但可以设置停止推送<代码>预接收或
更新
挂钩,我想。请小心-每个钩子都有一组不同的参数和stdin数据,服务器端钩子通常无法访问文件(裸存储库),因此您需要使用
git grep
或将文件从提交对象和树提取到磁盘。