问题究竟是什么时候发生的?他们最初提交文件的时间还是被推送到其他地方的时间?如果您有一个每个人都推送到的临时存储库,您可以实现一个更新挂钩来扫描更改的大文件的 refs,以及其他权限等检查。
非常粗略和现成的例子:
git --no-pager log --pretty=oneline --name-status $2..$3 -- | \
perl -MGit -lne 'if (/^[0-9a-f]{40}/) { ($rev, $message) = split(/\s+/, $_, 2) }
else { ($action, $file) = split(/\s+/, $_, 2); next unless $action eq "A";
$filesize = Git::command_oneline("cat-file", "-s", "$rev:$file");
print "$rev added $file ($filesize bytes)"; die "$file too big" if ($filesize > 1024*1024*1024) }';
(只是表明,一切都可以用 Perl 单线完成,尽管它可能需要多行;))
以调用 $GIT_DIR/hooks/update 的方式调用(参数是 ref-name、old-rev、new-rev;例如“refs/heads/master master~2 master”)这将显示添加的文件,如果一个是太大了。
请注意,我会说,如果您要对此类事情进行监管,则需要一个集中点来执行此操作。如果您相信您的团队只是相互交换更改,那么您应该相信他们知道添加巨大的二进制文件是一件坏事。