2012-07-18 51 views
6

我有一箇中央git倉庫,我自己和幾個合作者經常推動和拉動。在過去,我犯了一個大的二進制blob意外,這需要rebasing完全刪除,併爲每個人都痛苦,所以我想在未來防止這種情況發生。是否可以在遠程存儲庫中設置一個掛鉤來檢查被推送文件的文件大小(不管它們是否被添加新文件或更新現有文件)並拒絕超過閾值大小(例如2MB)的文件?如何防止在git中推入大的二進制blob?

重要的是,我希望現有的文件已經大於2MB,而且不會受到影響(因此,如果2MB文件已存在於存儲庫中,則推送不應被拒絕,只有推送添加2MB文件或增加現有文件文件爲2MB)。另外,我希望鉤子在遠程端執行,所以我不必擔心客戶端不必設置鉤子。

編輯:由於一個推式可以包含多個提交,甚至一個大文件的提交將其卡在回購協議中,我想要防止包含/任何提交/推動增加或增加> = 2MB文件。

回答

5

聽起來像pre-receive hook將是這個檢查的正確位置。該鉤子在推送的服務器端執行,並且可以訪問足夠的信息來實現文件大小檢查。

該鉤子被調用混帳收到包的遠程倉庫,當混帳推是在當地的倉庫中進行的恰好。在開始更新遠程倉庫中的refs之前,調用預接收鉤子。其退出狀態決定了更新的成敗。

+0

對不起,看起來像我打算預先接收。我會更新。 – 2012-07-18 20:12:27

+0

預接收掛鉤發生在「更新引用」之前,是否意味着它已經足夠早地完成了,如果我有非零的退出,回購的大小不會增長,或者只是它不適用提交, blob還在那裏被克隆?我想我讀了後者,但是我找不到鏈接了:/ – 2012-07-18 20:21:26

+0

如果你沒有通過預提交鉤子,blob仍然會出現在服務器上,但這並不意味着它會被克隆。它不能從任何服務器的引用中獲得,所以Git幾乎不會理睬它。最終,Git的垃圾收集將刪除未引用的blob。 – 2012-07-18 20:34:14