問題が発生したのはいつですか?彼らが最初にファイルをコミットしたとき、またはそれが他の場所にプッシュされたとき?誰もがプッシュするステージングリポジトリがある場合は、更新フックを実装して、他のアクセス許可などのチェックとともに、大きなファイルの変更された参照をスキャンできます。
非常に大まかな準備ができた例:
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」)。これにより、追加されたファイルが表示され、次の場合に中止されます。大きすぎるものが追加されます。
この種のことを取り締まるつもりなら、それを行うための集中化されたポイントが必要であることに注意してください。チームがお互いに変更を交換することだけを信頼している場合は、巨大なバイナリファイルを追加することは悪いことであることを学ぶためにチームを信頼する必要があります。