首先,挂钩必须在
.git/hook
文件夹和名称
pre-commit
(具有执行权:
chmod +x .git/hooks/pre-commit
)
这个
OP jesusjjf
确认
in the comments
这就是问题所在:
我复制了
pre-commit.sample
文件转换为纯文本文件,而不仅仅是重命名。
其次,下面是一些脚本示例:
You have another example
使用类似的技术,使用
git rev-parse
和
git diff-index
,以及
empty tree I mentioned before
:
#!/bin/sh
if git rev-parse --verify HEAD >/dev/null 2>&1; then
against=HEAD
else
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
for FILE in `git diff-index --name-status $against -- | cut -c3-` ; do
# Check if the file contains 'debugger'
if [ "grep 'debugger' $FILE" ]
then
echo $FILE ' contains debugger!'
exit 1
fi
done
exit
The comments on this gist
提及:
在我的系统中,
if [ "grep 'debugger' $FILE" ]
始终计算为
true
.
将其更改为
if grep -q 'debugger' "$FILE"
修复了这个问题。
A.
more recent example
:
#!/bin/bash
# Pre commit hook that prevents FORBIDDEN code from being commited.
# Add unwanted code to the FORBIDDEN array as necessary
FILES_PATTERN='\.(rb|js|coffee)(\..+)?$'
FORBIDDEN=( debugger ruby-debug )
for i in "${FORBIDDEN[@]}"
do
git diff --cached --name-only| grep ".js" |xargs sed 's/ //g'|grep "ha_mobile.debug=true" && \
echo 'COMMIT REJECTED Found ha_mobile.debug=true references. Please remove them before commiting' && exit 1
git diff --cached --name-only | \
grep -E $FILES_PATTERN | \
GREP_COLOR='4;5;37;41' xargs grep --color --with-filename -n $i && \
echo 'COMMIT REJECTED Found' $i 'references. Please remove them before commiting' && exit 1
done
exit 0