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