6

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

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

编辑:由于一个推送可以包含多个提交,即使是一个带有大文件的提交也会将其卡在存储库中,我想防止包含 /any commit/ 的推送增长或添加 >=2MB 文件。

4

1 回答 1

5

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

这个钩子由远程存储库上的git-receive-pack调用,当在本地存储库上完成git push时会发生这种情况。就在开始更新远程存储库上的 refs 之前,调用了 pre-receive 钩子。它的退出状态决定了更新的成功或失败。

于 2012-07-18T20:09:07.093 回答