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

Azure DevOps Services

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

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

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

Размер репозиториев не должен превышать 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 pack, операции записи временно недоступны, пока репозиторий обновляется". Операции записи восстанавливаются сразу после завершения задания оптимизации.

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

Размер нажатия

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

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

Размер push-уведомлений для объектов LFS

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

Длина пути

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

Применяются следующие ограничения:

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

Эта политика влияет только на новые пути, введенные в 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.