Git частичное / редкое / узкое извлечение и обновление в Azure Devops Hosted Agent
Мне интересно, возможно ли получить только один файл из репозитория GIT, чтобы зафиксировать новое изменение в нем. Мы хотим изменить файл в размещенном агенте Azure Devops, однако загрузка всего репо займет значительно больше времени.
Я читал об этих вариантах:
- - Опция фильтра [ https://askubuntu.com/questions/460885/how-to-clone-git-repository-only-some-directories]
- Git sparse checkout (я не уверен, доступен ли он только на GitHub) [ https://briancoyner.github.io/2013/06/05/git-sparse-checkout.html]
- Microsoft GVFS [ https://github.com/Microsoft/VFSForGit]
Попытка команды фильтра
git clone --depth 1 --filter=sparse:path=ReadMe.md
предупреждение: фильтрация не распознается сервером, игнорируется
Редкий заказ
git config core.sparsecheckout true
echo File.txt >>.git / info / sparse-checkout мастер создания git pull
Однако это все еще восстановило все.
Серверное хранилище работает под управлением GIT v2.18.
- Есть ли что-то, что нужно настроить на сервере, чтобы это работало?
- Опция --filter доступна только в определенных версиях?
- Может ли GVFS добиться этого и возможно ли настроить на размещенном агенте?
Спасибо.
2 ответа
Действительно, метод фильтра не будет работать. Как далее отмечено в вопросе, вы ссылаетесь:
Начиная с версии v2.19.0 сервер не поддерживается, но его уже можно локально протестировать.
Sparse checkout по-прежнему загружает все файлы, но не извлекает их на диск.
GVFS требует изменений на сервере и поддерживается только в Azure Repos. Это не часть акции (вы указываете, что ваш Git-сервер 2.18.)
Как отметил Шайки Абрамчик, использование REST API может быть вашим лучшим вариантом. Если ваш хостинг-провайдер поддерживает это, вы, вероятно, можете загрузить файл непосредственно у хостинг-провайдера. Многие хостинг-провайдеры также позволят вам зафиксировать эти изменения.
Лучший способ загрузить один файл из репозитория Git - это API-интерфейс Azure DevOps Rest - Предметы - Получить.
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/items?path={path}&api-version=5.0-preview.1
Если вы добавите параметр download
(например: ?path={path}&download=true
) файл будет загружен на агент.
Поэтому добавьте задачу с помощью простого сценария PowerShell (с Invoke-RestMethod
) и получите файл.