2012-07-18 12 views
6

私は自分自身といくつかの協力者が定期的にプッシュして引っ張る中央のgitリポジトリを持っています。過去に私は大量のバイナリBLOBを偶然にコミットしました。完全に削除するにはリベースが必要であり、誰にとっても痛みです。今後これを防ぐつもりです。リモートリポジトリにプッシュされるファイルのサイズをチェックするフックを設定することができますか(新規に追加されているか既存のファイルが更新されているかに関係なく)、しきい値サイズを超えるファイル、たとえば2MBをプッシュしますか?大きなバイナリブロブをgitでプッシュするのを防ぐには?

重要なことに、2MB以上の既存ファイルが許容されないようにしたい(2MBファイルが既にリポジトリにある場合は、プッシュを拒否しないでください。プッシュが2MBファイルを追加するか、ファイルは2MBになります)。また、リモート側でフックを実行したいので、クライアントがフックの設定をする必要がないことを心配する必要はありません。

編集:プッシュには複数のコミットが含まれている可能性があるため、大きいファイルを使った1つのコミットでもリポジトリにスタックされてしまい、/ 2MB以上になる/コミットを含むプッシュから保護したいファイル。

答えて

5

pre-receive hookのように聞こえるのは、このチェックの正しい場所です。このフックは、プッシュのサーバー側で実行され、ファイルサイズチェックを実装するのに十分な情報にアクセスできます。

このフックは、Gitのプッシュがローカルリポジトリ上で行われたときに発生し、リモートリポジトリにのgit - 受信パックによって呼び出されます。リモートリポジトリの参照を更新する直前に、事前受信フックが呼び出されます。その終了ステータスは、更新の成功または失敗を決定します。

+0

申し訳ありません、私はpre-receiveを入力するように見えます。私は更新します。 –

+0

pre-receiveフックは、 "refsを更新する"の前に起こります。つまり、私が0以外の出口を持っていれば、レポのサイズが大きくならない、あるいはコミットが適用されないということです。それでもまだクローン化されているのか?私は後者を読むと思いますが、私はもうリンクを見つけることができません:/ –

+0

pre-commitフックに失敗した場合でも、blobはサーバー上に残っていますが、それは自動的に複製されることを意味しません。それはサーバーの参考文献からは到達できないので、Gitはそれを無視します。最終的にGitのガベージコレクションは、参照されていないブロブを削除します。 –

関連する問題