如何防止在git中推送大型二进制blob?

Jos*_*vin 6 git binaryfiles githooks

我有一个中央git存储库,我自己和几个合作者经常推送和拉动.在过去,我偶然提交了一个大型的二进制blob,这需要重新设置才能完全删除,这对每个人来说都是一种痛苦,所以我想在将来防止这种情况发生.是否可以在远程存储库中设置一个钩子来检查正在推送的文件的文件大小(无论是添加新文件还是更新现有文件),并拒绝推送超过阈值大小的文件,比如2MB?

重要的是,我希望可以容忍已经大于2MB的未受影响的现有文件(因此,如果存储库中已有2MB文件,则只有当推送添加2MB文件或将现有文件增加到2MB时才不应拒绝推送).此外,我希望钩子在远程端执行,所以我不必担心客户端不必设置钩子.

编辑:由于推送可以包含多个提交,甚至一个带有大文件的提交会使其停留在repo中,我希望防止包含/任何提交/增长或增加> = 2MB文件的推送.

Gre*_*ill 5

这听起来像预接收钩子是这个检查的正确位置.此挂钩在推送的服务器端执行,并且可以访问足够的信息以实现文件大小检查.

此挂钩由远程存储库上的git-receive-pack调用,这在本地存储库上执行git push时会发生.在开始更新远程存储库上的refs之前,将调用预接收挂钩.其退出状态决定了更新的成功或失败.