如何获取 azure devops git 存储库的存储库创建日期? 我们有大量从 TFS 移出的存储库,但想知道添加 GIT 存储库的日期。 这些信息可以通过 API 获得吗?
我的第一次尝试是调用 repos api,然后将这些 ID 输入到 commits api 中。对于响应中的每个项目,计数减 1 应该是第一次提交的索引,对吧? 对于我的一些存储库,这似乎是其提交历史的一半。如果我使用索引为零,我只会看到最近的提交?
就我个人而言,我没有广泛利用审计 API,因此在 Microsoft 为 API 提供过滤器之前,我无法真正谈论数据量的挑战以及搜索数据的实用性。
话虽这么说,我可以利用 Query Audit Log 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
问题似乎在于分支命名和搜索条件被视为通配符。在 Commits 调用中使用 searchCriteria.itemVersion.version=master 会从包含 master 的任何分支返回提交,这使得在尝试使用更明显的索引值时这些提交看起来是无序的。
对于那些最终来到这里只是想在存储库上获得第一个提交日期的人,这对我有用:
您可以使用此 API 获取前 50,000 个提交,其中
组织:组织名称
project:可以使用
获取项目名称p_url = f"https://dev.azure.com/{organization}/_apis/projects?api-version=7.1-preview.4"
repository_id:可以使用
获取存储库IDr_url = f"https://dev.azure.com/{organization}/{project}/_apis/git/repositories?api-version=6.1-preview.1"
使用
获取提交数据url=f"https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repository_id}/commitsbatch?$top={50000}&api-version=7.1"
向 URL 发出 POST 请求并获取响应
response = requests.post(url, headers=headers)
if response.status_code == 200:
data = response.json()
if "value" in data and data["value"]:
# Extract the date of the first commit
return data["value"][-1]["committer"]["date"]
else:
return "No Commits"
else:
print(f"Failed to fetch commit date: {response.status_code} - {response.text}")
return None