Ограничения 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, операции записи временно недоступны во время обновления репозитория". Операции записи будут восстановлены сразу после завершения задания.

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

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

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

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

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

Длина пути

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

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

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

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

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

  • 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.