#git #azure-devops
#git #azure-devops
Вопрос:
Как бы вы поступили, чтобы получить дату создания репозитория git-репозитория Azure devops? У нас есть множество репозиториев, которые были перемещены из TFS, но мы хотим знать дату добавления репозитория GIT. Доступна ли эта информация через API?
Моя первая попытка — вызвать api репозиториев, а затем передать эти идентификаторы в API коммитов. Для каждого элемента в ответе количество минус 1 должно быть индексом первого коммита, верно? Для некоторых из моих репозиториев это примерно на полпути к их истории фиксации. Если я использую нулевой индекс, мне просто будет представлен самый последний коммит?
Ответ №1:
Лично я не использовал API аудита широко, поэтому я не могу говорить о проблемах с объемом данных и практичностью поиска в нем, пока Microsoft не предложит фильтры для API.
При этом я смог получить информацию, используя API журнала аудита запросов. Существует некоторое предположение, что ваша версия Azure DevOps при создании репозитория регистрировала записи аудита в то время. Некоторые записи аудита были сделаны довольно недавно.
Пример в PowerShell:
$AzureDevOpsAuthenicationHeader = @{Authorization = 'Basic ' [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(":$($AzureDevOpsPAT)")) }
$uri = "https://auditservice.dev.azure.com/{organization}/_apis/audit/auditlog?api-version=6.0-preview.1"
Invoke-RestMethod -Method Get -Uri $uri -Headers $AzureDevOpsAuthenicationHeader |
Select-Object -ExpandProperty decoratedAuditLogEntries |
Where-Object { $_.actionId -eq 'Git.RepositoryCreated' } |
Select-Object actionId, details, timestamp
Предоставляет:
actionId details timestamp
-------- ------- ---------
Git.RepositoryCreated Created Git repository "Temp" in project Basic 2020-09-11T23:19:19.4007876Z
Git.RepositoryCreated Created Git repository "Testing" in project Basic 2020-09-09T21:10:56.1738383Z
Git.RepositoryCreated Created Git repository "CMMI" in project CMMI 2020-08-24T14:33:43.6040892Z
Git.RepositoryCreated Created Git repository "Basic" in project Basic 2020-08-24T14:33:05.3245162Z
Ответ №2:
Похоже, проблема заключалась в том, что название ветки и критерии поиска рассматривались как подстановочный знак. Использование SearchCriteria.itemVersion.version=master в вызове Commits возвращало коммиты из любой ветви, содержащей master, что создавало впечатление, что они были не в порядке при попытке использовать более очевидные значения индекса.
Для тех, кто оказался здесь, просто пытаясь получить дату вашей первой фиксации в репозитории, это то, что сработало для меня:
- получить список всех идентификаторов репозитория (работает список репозиториев).
- для каждого идентификатора репозитория получите все коммиты в репозитории.
- Получите индекс последнего коммита (количество коммитов текущего репозитория — 1).
- первым коммитом будет ваш текущий коммит [индекс].
Комментарии:
1. Поскольку вопрос представлен, я не думаю, что это обязательно всегда будет точным в качестве даты добавления репозитория в проект. Я перенес репозитории между проектами, и дата фиксации при инициализации не обновляется. Я думаю, это точно только при условии, что репозиторий был изначально создан как часть проекта?