Git pre-commit 挂钩:防止包含可执行文件的提交

Git pre-commit hook: Prevent commits that contain executable files

我正在努力避免不小心将二进制文件提交到我的存储库中。我考虑过一个检测文件大小超过某个阈值的挂钩,但我认为每当我的提交更改具有可执行权限位的文件时,让预提交挂钩失败会更有用。

我知道如何使用 python/ruby/other 脚本语言来解决这个问题,但理想情况下我可以只使用 bash 来解决这个问题。有什么想法吗?

我结束了这个。它列出了相对于 REPO_ROOT 提交的文件名。它将那些传递给 ls,每行一个带有 -1 标志,-F 标志将 * 附加到可执行文件。它会搜索尾随 *。任何匹配的 grep 都会失败。

cd $REPO_ROOT
STAGED_EXECUTABLES=$(git diff --diff-filter=ACMRTUXB --cached HEAD --name-only | xargs ls -1F | egrep '\*$')
EXECUTABLES_MISSING=$?
if [ $EXECUTABLES_MISSING -eq 0 ]; then
    echo "You tried to commit an executable file. Override with \`git commit --no-verify\` if required." > /dev/stderr
    exit 1
fi