gpt4 book ai didi

git - 是否有一个 git hook 可以防止二进制 checkin

转载 作者:太空狗 更新时间:2023-10-29 12:52:14 25 4
gpt4 key购买 nike

有没有人知道一个好的 git hook 可以在提交时检查二进制文件并抛出错误?我试图阻止二进制文件提交到我的存储库,但有时人们会犯错误。

谢谢!

最佳答案

我不知道现有的钩子(Hook),但 git 已经带有一个钩子(Hook)来检查是否添加“非 ascii 名称”,作为示例预提交钩子(Hook)。这可能已经作为 .git/hooks/pre-commit.sample 在您现有的 git 存储库中。

使用该钩子(Hook)作为模板并考虑 "How to determine if Git handles a file as binary or as text?" 的答案,你可以做这样的事情(参见 "git's semi-secret empty tree" 了解 EMPTY_TREE 的来源):

#! /bin/sh

stop_binaries=$(git config --get hooks.stop_binaries)

exec 1>&2

if [ "$stop_binaries" = true ]; then
EMPTY_TREE=$(git hash-object -t tree /dev/null)
# or: EMPTY_TREE=4b825dc642cb6eb9a060e54bf8d69288fbee4904
if git diff --cached --numstat $EMPTY_TREE | grep -e '^-' >/dev/null; then
echo Error: commit would add binary files:
git diff --cached --numstat $EMPTY_TREE | grep -e '^-' | cut -f3-
exit 1
fi
fi

这使用 git diff --cached 查看将提交的内容,并将其与初始空树进行比较。请注意,它将拒绝提交已经存在(但未更改)的二进制文件;要使其仅拒绝新的或更改的 二进制文件,请从非 ascii 名称 Hook 中添加 against= 逻辑。要仅拒绝 二进制文件,还要添加--diff-filter=A 参数。

如果您愿意,可以添加额外的错误消息文本。您可以反转测试(而不是必须断言“停止二进制文件”,使其默认停止并且您必须设置“allowbinaries”以添加二进制文件)等。当然您可以允许特定目录充满二进制文件,或其他任何方式,也可以通过对 diff-index 输出进行额外的过滤。

关于git - 是否有一个 git hook 可以防止二进制 checkin ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20226132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com