我想防止提交具有特定字符串的文件,例如:
// TODO foo bar baz
所以我使用 git pre-commit hook:
#!/bin/sh
EXTENSIONS='\.(cs|cshtml|csproj|css|js|scss|sh|ts|xml|yml|md)?$'
FORBIDDEN='TODO'
git diff --cached --name-only | \
sed -n -E "/$EXTENSIONS/p" | \
GREP_COLORS='4;5;37;41' xargs grep --color --with-filename -n "$FORBIDDEN" \
&& echo 'ERROR: Found forbidden texts; remove them then retry' && exit 1 \
|| exit 0
这可行。不过有一个缺陷。
它会在整个文件中搜索grep
禁用文本,而不仅仅是暂存的块。因此,如果某个文件包含我暂存的块,以及一个包含禁用文本的块(我未暂存),那么它将取消提交。
是否可以仅在暂存块中搜索模式,而不是整个文件?
(我希望该脚本可以在 dash 中运行。)