Поделиться через


Ограничения Git

Azure DevOps Services

Мы налагаем ограничения ресурсов на репозитории Git в Azure Repos, чтобы обеспечить надежность и доступность для всех клиентов. Сохраняя размеры данных и количество отправки разумных, вы можете ожидать лучшего общего опыта работы с Git.

Git участвует в ограничении скорости вместе с остальной частью Azure DevOps Services. Кроме того, мы накладываем ограничения на общий размер репозиториев, отправки и длину путей к файлу и каталогу.

Размер репозитория

Репозитории не должны превышать 250 ГБ. Чтобы получить размер репозитория, выполните команду git count-objects -vH в командной строке и найдите запись с именем size-pack:

D:\my-repo>git count-objects -vH

count: 482
size: 551.67 KiB
in-pack: 100365
packs: 25
size-pack: 642.76 MiB   <-- size of repository
prune-packable: 83
garbage: 0
size-garbage: 0 bytes

Рекомендуется сохранить репозиторий ниже 10 ГБ для оптимальной производительности. Если репозиторий превышает этот размер, рассмотрите возможность использования артефактов разработки с помощью Git-LFS, Scalar или Azure Artifacts.

Azure Repos постоянно уменьшает общий размер и повышает эффективность репозиториев Git путем консолидации аналогичных файлов в пакеты. Для репозиториев около 250 ГБ внутренний предел файлов пакетов можно достичь до завершения процесса оптимизации. Когда это ограничение достигнуто, пользователи, пытающиеся записать в репозиторий, увидят следующее сообщение об ошибке: "Достигнуто ограничение файла пакета Git, операции записи временно недоступны во время обновления репозитория". Операции записи восстанавливаются сразу после завершения задания оптимизации.

Файлы не должны превышать 100 МБ. Это ограничение помогает обеспечить оптимальную производительность и надежность репозитория Git. Большие файлы могут значительно замедлить операции репозитория, такие как клонирование, получение и отправка изменений. Если вам нужно хранить большие файлы, рекомендуется использовать Git LFS (хранилище больших файлов), который предназначен для эффективной обработки больших файлов, сохраняя их за пределами основного репозитория и сохраняя ссылки только на них в репозитории. Этот подход помогает поддерживать производительность и управляемость репозитория Git.

Размер push-отправки

Крупные push-запросы используют значительные ресурсы, блокируя или замедляя другие части службы. Эти push-уведомления часто не соответствуют типичным действиям разработки программного обеспечения и могут включать такие элементы, как выходные данные сборки или образы виртуальных машин. Таким образом, принудительная передача ограничена 5 ГБ за раз.

Существует одно исключение, в котором большие push-отправки являются обычными: перенос репозитория из другой службы в Azure Repos. Такие миграции приходят в виде одной принудительной отправки, и мы не намерены блокировать импорт, даже для крупных репозиториев. Если репозиторий превышает 5 ГБ, необходимо использовать веб-сайт для импорта репозитория вместо командной строки.

Размер отправки для объектов LFS

Git LFS не учитывается в отношении ограничения репозитория в 5 ГБ. Ограничение в 5 ГБ применяется только к файлам в фактическом репозитории, а не к большим двоичным объектам, хранящимся с помощью LFS. Если вы столкнулись с ошибкой отправки из-за ограничения в 5 ГБ, убедитесь, что файл .gitattributes содержит расширения файлов, которые вы планируете отслеживать с помощью LFS. Убедитесь, что этот файл сохраняется и выполняется перед этапом отслеживания больших файлов.

Длина пути

Azure Repos применяет политику принудительной отправки, которая ограничивает длину путей в репозитории Git путем отклонения push-уведомлений, которые вводят чрезмерно длинные пути. В отличие от политики максимальной длины пути, ее нельзя отключить или переопределить, так как она применяет максимальные значения, поддерживаемые нашей платформой.

Применяются перечисленные ниже ограничения.

  • Общая длина пути: 32 766 символов
  • Длина компонента пути (имя папки или файла): 4096 символов

Эта политика влияет только на недавно введенные пути в push-отправке. Он не применяется, если изменить существующий файл, но он применяется при создании нового файла, переименовании или перемещении существующего файла.

Если при отправке каких-либо фиксаций вводятся пути, превышающие эти ограничения, отправка отклоняется одним из следующих сообщений об ошибке:

  • VS403729: The push was rejected because commit '6fbe8dc700fdb33ef512e2b9e35436faf555de76' contains a path, which exceeds the maximum length of 32766 characters.
  • VS403729: The push was rejected because commit 'd23277abfe2d8dcbb88456da880de631994dabb4' contains a path component, which exceeds the maximum length of 4096 characters.