bash - Git 预提交钩子(Hook)检查字符串,如果字符串存在则退出代码 1

标签 bash git pre-commit-hook

我正在尝试使预提交 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 --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

关于bash - Git 预提交钩子(Hook)检查字符串,如果字符串存在则退出代码 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53416905/

相关文章:

bash - 在集群范围的初始化脚本中从 dbfs 复制文件

git - 由于解析器错误,将更复杂的脚本添加为 Git 别名不起作用

git - Araxis 与 Git merge 三路文件比较

linux - checkpatch.pl 是如何工作的,以及通过在补丁上运行它究竟能得到什么?

githooks - 指定在 git commit --no-verify 上跳过哪个钩子(Hook)

shell - 一行中的多个字符串的 grep

c - bash 使用什么来打开/执行 argv[0]?

bash - 如何打印管道分隔文件中的字段?

git - 如何使用 Git 跟踪新提交?

windows - CollabNet SVN Edge 的代码审查工具