У нас есть GIT с монорепозиторием GIT-LFS, где отображается весь размер кодовой базы в GIT (с использованием git-sizer) (см. таблицу ниже, обратите внимание, что git-sizer не отображает объекты git-lfs).
| Name | Value | Level of concern |
| ---------------------------- | --------- | ------------------------------ |
| Biggest objects | | |
| * Trees | | |
| * Maximum entries [1] | 1.23 k | * |
| * Blobs | | |
| * Maximum size [2] | 900 MiB | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!! |
| | | |
| Biggest checkouts | | |
| * Number of directories [3] | 5.00 k | ** |
| * Maximum path depth [4] | 19 | * |
| * Maximum path length [5] | 222 B | ** |
| * Number of files [3] | 102 k | ** |
| * Total size of files [6] | 2.42 GiB | ** |
Проблема в том, что у нас есть очень большие наборы данных для интеграции и тестирования данных, а также модульных тестов, где данные модульного теста могут начинаться от нескольких килобайт до, возможно, 1 ГБ.
В настоящее время мы размещаем эти данные на отдельном сетевом диске, что требует, чтобы наши агенты сборки имели доступ к этому внутреннему сетевому диску. Это не позволяет нам использовать агенты сборки, размещенные в AzureDevOps.
Кроме того, проблема в том, что сетевой диск не синхронизирован с git-repo, поэтому нам нужно было установить какое-то управление версиями файлов, что время от времени дает сбой.
Теперь идея состоит в том, чтобы поместить данные в наш репозиторий git, где двоичные файлы находятся в GIT-LFS. Проблема в том, что если данные находятся в GIT-LFS, клонирование может занять вечность, и у меня нет опыта, что это означает для выборки/вытягивания/отправки в целом.
Мы также рассмотрели GIT-scalar, но я не выяснил, что именно делает git-scalar и как он может нам помочь. Я рассматривал GIT-скаляр скорее как решение OneDrive, где данные загружаются по требованию.
Другой вопрос: может ли репозиторий Azure расти неограниченно. Я читал что-то около 250 ГБ.
Есть ли какой-нибудь опыт того, как это можно сделать?
В репозитории Azure существует ограничение в 250 ГБ. Согласно ограничениям Git,
Размер репозитория не должен превышать 250 ГБ.
Если вам необходимо хранить большие файлы, рассмотрите возможность использования Git LFS (хранилище больших файлов), которое предназначено для эффективной обработки больших файлов, сохраняя их вне основного репозитория и сохраняя только ссылки на них внутри репозитория. Такой подход помогает поддерживать производительность и управляемость вашего репозитория Git.
Для «Проблема в том, что если данные находятся в GIT-LFS, клонирование может занять вечность»,
Если вы используете агенты, размещенные на MS, вы будете получать новый агент при каждом запуске конвейера. Если ваши файлы большие, независимо от того, находятся они в GIT-LFS или нет, время оформления заказа будет увеличиваться по мере увеличения размера файлов. В конвейере Azure вы можете использовать задачу checkout для извлечения большого файла с помощью параметра lfs
.
steps:
- checkout: string # Required as first property. Configures checkout for the specified repository.
clean: true | false # If true, run git clean -ffdx followed by git reset --hard HEAD before fetching.
fetchDepth: string # Depth of Git graph to fetch.
fetchFilter: string # Filter Git history.
fetchTags: string # Set to 'true' to sync tags when fetching the repo, or 'false' to not sync tags. See remarks for the default behavior.
lfs: string # Set to 'true' to download Git-LFS files. Default is not to download them.
persistCredentials: string # Set to 'true' to leave the OAuth token in the Git config after the initial fetch. The default is not to leave it.
submodules: string # Set to 'true' for a single level of submodules or 'recursive' to get submodules of submodules. Default is not to fetch submodules.
path: string # Where to put the repository. The root directory is $(Pipeline.Workspace).
workspaceRepo: true | false # When true, use the repository root directory as the default working directory for the pipeline. The default is false.
condition: string # Evaluate this condition expression to determine whether to run this task.
continueOnError: boolean # Continue running even on failure?
displayName: string # Human-readable name for the task.
target: string | target # Environment in which to run this task.
enabled: boolean # Run this task when the job runs?
env: # Variables to map into the process's environment.
string: string # Name/value pairs
name: string # ID of the step.
timeoutInMinutes: string # Time to wait for this task to complete before the server kills it.
retryCountOnTaskFailure: string # Number of retries if the task fails.
lfs
: установите значение «true», чтобы загружать файлы Git-LFS. По умолчанию их не скачивать.
Ибо «и у меня нет опыта, что это означает для извлечения/вытягивания/нажатия в целом».
Рекомендуется просмотреть git-lfs и эту вики, чтобы понять GIT-LFS.
Кроме того, см. Управление большими файлами и их хранение в Git для получения дополнительной информации об управлении большими файлами в репозитории Azure.