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
或将文件从提交对象和树提取到磁盘。