Git частичное / редкое / узкое извлечение и обновление в Azure Devops Hosted Agent

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

Я читал об этих вариантах:

  1. - Опция фильтра [ https://askubuntu.com/questions/460885/how-to-clone-git-repository-only-some-directories]
  2. Git sparse checkout (я не уверен, доступен ли он только на GitHub) [ https://briancoyner.github.io/2013/06/05/git-sparse-checkout.html]
  3. 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 ответа

  1. Действительно, метод фильтра не будет работать. Как далее отмечено в вопросе, вы ссылаетесь:

    Начиная с версии v2.19.0 сервер не поддерживается, но его уже можно локально протестировать.

  2. Sparse checkout по-прежнему загружает все файлы, но не извлекает их на диск.

  3. 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) и получите файл.

Другие вопросы по тегам