n1ro°
RU

Компьютеры · Инструкция

GitHub ruleset: как ограничить размер файла при push

GitHub ruleset: как ограничить размер файла при push — в push ruleset доступно правило Restrict file size с максимальным размером в МБ.

Редакция N1RO · Проверено

Короткий ответ

В push ruleset включите `Restrict file size`, задайте предел и при необходимости allowed exceptions по пути. GitHub применяет push protections ко всему fork network; функция push rulesets предназначена для private/internal репозиториев и зависит от доступности rulesets на вашем плане.

Как работает ограничение размера

Push ruleset анализирует commits, которые пытаются отправить в репозиторий, и блокирует изменения, содержащие файл сверх заданного лимита. В отличие от branch ruleset, push protection применяется к каждому push репозитория и его fork network, поэтому обход через fork не решает проблему. GitHub допускает allowed exceptions для file-size rule с `fnmatch`-путями — например, можно разрешить один необходимый wrapper-файл, сохранив общий лимит.

Совет: Сделайте понятное сообщение в CONTRIBUTING о том, куда класть большие артефакты.

Как создать правило без неожиданной блокировки

  1. Откройте Settings → Rules → Rulesets и создайте push ruleset для подходящего private/internal репозитория.
  2. Задайте понятное имя и сначала используйте небоевой/evaluate режим, если он доступен в вашей конфигурации.
  3. В Push protections включите `Restrict file size` и укажите предел согласно политике команды.
  4. Добавьте только обоснованные Allowed exceptions по конкретным путям, а не широкий `**/*`.
  5. Проверьте тестовый push файла чуть ниже и чуть выше лимита, затем переведите правило в Active.

Чем это отличается от Git LFS и лимитов хостинга

Ruleset предотвращает конкретный push по вашей политике, но не переносит большие файлы автоматически в Git LFS. Если команде действительно нужны большие бинарные артефакты, сначала выберите подходящее хранилище или LFS, затем настройте предел как защиту от случайного обычного commit. Также это не отменяет системные лимиты GitHub: ваш ruleset может быть строже, но не расширяет возможности платформы.

Предупреждение: Не добавляйте широкие allowed exceptions: они фактически обнуляют смысл правила.

До включения проверьте

  • есть ли большие файлы в текущей истории;
  • какие пути действительно требуют исключений;
  • использует ли команда Git LFS;
  • понимают ли участники, как исправлять rejected push.

Что происходит в fork network

Push ruleset для размера файла может распространяться на всю сеть форков, поэтому изменение политики основного репозитория способно затронуть разработчиков, работающих в форках. Перед жёстким лимитом проверьте реальные крупные файлы и предусмотрите bypass только для обоснованных ролей. Для бинарных артефактов лучше заранее решить, должны ли они жить в Git LFS, Releases или внешнем хранилище.

Пример защиты от случайного видеофайла

Команда хранит исходный код и хочет запретить обычные blobs крупнее внутреннего порога. После включения rule разработчик случайно добавляет видео и push отклоняется до попадания файла на сервер. Он удаляет blob из commit и помещает артефакт в предназначенное хранилище. Исключение можно оставить только для строго определённого пути, если он действительно нужен.

Важно: Push ruleset не очищает старую историю и не заменяет Git LFS.

Что учитывать

Push ruleset анализирует commits, которые пытаются отправить в репозиторий, и блокирует изменения, содержащие файл сверх заданного лимита. В отличие от branch ruleset, push protection применяется к каждому push репозитория и его fork network, поэтому обход через fork не решает проблему. GitHub допускает allowed exceptions для file-size rule с `fnmatch`-путями — например, можно разрешить один необходимый wrapper-файл, сохранив общий лимит.

Источники и проверка

Фактическая часть сверена по первичным источникам (в т.ч. Available rules for rulesets). Пример и формулировки — редакция N1RO на 2026-09-23.