Git 禁止提交指定后缀文件

利用 Git 的 pre-commit hook,可以在提交前检测当前提交的文件是否包含指定后缀,从而进行过滤。

编辑 hook 文件

打工 Git 工程目录下的.git/hooks 文件夹,复制一份 pre-commit.sample 并改名为 pre-commit,输入以下脚本,比如我要过滤.bak 后缀的文件,禁止提交:

1
2
3
4
5
6
7
8
9
#!/bin/sh

git diff --cached --name-status | while read status file; do
# do a check only on the .bak files
if [[ ${file##*.} =~ \.bak$ ]] ; then
echo "Please remove *.bak files before committing"
exit 1
fi
done

注意:这里的判断是区分大小写的,即 bak 和 BAK 是不一样的。 不允许提交大写 JPG 后缀:

1
2
3
4
5
6
7
8
9
#!/bin/sh

git diff --cached --name-status | while read status file; do
# do a check only on the .jpg files
if [[ ${file##*.} =~ \J|P|G$ ]] ; then
echo "请删除大写后缀的jpg文件后再提交"
exit 1
fi
done

参考资料