Вы не можете сделать это.К тому времени, когда выполняются перехваты предварительного получения и обновления, пакет (все данные) уже получен.Все, что осталось сделать, это обновить ссылки, и это то, что ловушка позволяет вам прервать.Из man-страницы:
Непосредственно перед началом обновления ссылок в удаленном репозитории вызывается ловушка предварительного получения.
И есть аналогичное утверждение о ловушке обновления.
Я даже не уверен, что для общего транспортного механизма даже git receive-pack
знает окончательный размер всего, что он получит.
Какую проблему вы на самом деле пытаетесь решить, хоть?Спасать пользователей от трудоемких толчков?(Они могут отменить их сами; это очевидно со стороны пользователя.) Держать место на диске под контролем на пульте?В большинстве случаев вы, вероятно, можете просто ограничить доступ пользователям, которым вы можете доверять, чтобы не испортить это, и обращаться с исключениями вручную.
Если вам абсолютно необходимо сделать это, единственный способ, которым вы действительно сможетесделать это, обернув push на стороне пользователя, чтобы они запустили my-push
, который каким-то образом оценивает размер того, что они собираются нажать, и решает, действительно ли push - но тогда вы вернетесь к доверяющим пользователям,поскольку, если они не используют эту обертку, они могут нажать то, что им нравится.