导出特定日期范围内 Azure Repos 中特定文件夹中所有文件的 git 历史记录
Export git history of all files in a specific folder in Azure Repos for a specific date range
Salesforce 文件夹结构如下,包含大量 classes 和元 xml:
Project
--src
--classes
-- Class A
-- Class A-Meta.xml
-- Class B
-- Class B-Meta.xml
-- Class N
问题陈述:
对于每个 class,我需要
- 日期范围内的历史记录
- 输出应包含在此日期范围内在此文件中提交的文件名、提交 ID 和作者姓名。
- 在 excel/csv/word
中导出此信息
示例输出
Classname Author commit
Class A Dev1 abcd
Class A Dev2 pqrs
Class A Dev3 uvwz
Class B Dev9 yuot
Class B Dev1 qwew
我正在使用 VSTS Azure Repos。打开以使用 git 日志或任何其他快速完成此操作的方式。
获取数据的方法如下...
git log \
--after=<date> --before=<date> \
--format='%an %H' \
--name-only
这将 return 行如下:
f76b3d9e85e511879098c899efbcddb5c55e69cd Crow T. Robot
Project/src/classes/ClassA
Project/src/classes/ClassC
1d4ef40149d9c04d7bc6ea7c9bd9424e939af56f Bob A. Fette
Project/src/classes/ClassB
Crow T.Robot 在提交 f76b3d9e85e511879098c899efbcddb5c55e69cd 中指出他们更改了 Project/src/classes/ClassA 和 Project/src/classes/ClassC.
然后你可以编写一个小程序来吸收这些数据并按你喜欢的方式处理它。
- 日期范围内的历史记录
我们可以使用这个 REST API 检索某个日期范围内项目的 git 次提交,我们可以获得提交 ID、作者和提交者信息。
样本:
GET https://dev.azure.com/{Org name}/_apis/git/repositories/{repositoryId}/commits?searchCriteria.toDate=6/16/2018 12:00:00 AM&searchCriteria.fromDate=6/14/2018 12:00:00 AM&api-version=5.0
我们可以通过commit ID获取commit文件夹名称
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/changes?api-version=6.0-preview.1
并获取详细的提交信息 API
Get https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?api-version=6.0-preview.1
功率shell样本:
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$Commits = "https://dev.azure.com/{org name}/_apis/git/repositories/{repo id}/commits?searchCriteria.toDate=9/15/2020 12:00:00 AM&searchCriteria.fromDate=9/1/2020 12:00:00 AM&api-version=5.0"
$CommitInfo = Invoke-RestMethod -Uri $Commits -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
ForEach ($ID in $CommitInfo.value.commitId)
{
Write-Host $ID
$url = "https://dev.azure.com/{org name}/{project name}/_apis/git/repositories/{repo id}/commits/$($ID)?api-version=6.0-preview.1"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$CommitDetail = Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
Write-Host "commit ID is" $CommitDetail.commitId "author is" $CommitDetail.author.name "committer is" $CommitDetail.committer.name
}
结果:
Salesforce 文件夹结构如下,包含大量 classes 和元 xml:
Project
--src
--classes
-- Class A
-- Class A-Meta.xml
-- Class B
-- Class B-Meta.xml
-- Class N
问题陈述: 对于每个 class,我需要
- 日期范围内的历史记录
- 输出应包含在此日期范围内在此文件中提交的文件名、提交 ID 和作者姓名。
- 在 excel/csv/word 中导出此信息
示例输出
Classname Author commit
Class A Dev1 abcd
Class A Dev2 pqrs
Class A Dev3 uvwz
Class B Dev9 yuot
Class B Dev1 qwew
我正在使用 VSTS Azure Repos。打开以使用 git 日志或任何其他快速完成此操作的方式。
获取数据的方法如下...
git log \
--after=<date> --before=<date> \
--format='%an %H' \
--name-only
这将 return 行如下:
f76b3d9e85e511879098c899efbcddb5c55e69cd Crow T. Robot
Project/src/classes/ClassA
Project/src/classes/ClassC
1d4ef40149d9c04d7bc6ea7c9bd9424e939af56f Bob A. Fette
Project/src/classes/ClassB
Crow T.Robot 在提交 f76b3d9e85e511879098c899efbcddb5c55e69cd 中指出他们更改了 Project/src/classes/ClassA 和 Project/src/classes/ClassC.
然后你可以编写一个小程序来吸收这些数据并按你喜欢的方式处理它。
- 日期范围内的历史记录
我们可以使用这个 REST API 检索某个日期范围内项目的 git 次提交,我们可以获得提交 ID、作者和提交者信息。
样本:
GET https://dev.azure.com/{Org name}/_apis/git/repositories/{repositoryId}/commits?searchCriteria.toDate=6/16/2018 12:00:00 AM&searchCriteria.fromDate=6/14/2018 12:00:00 AM&api-version=5.0
我们可以通过commit ID获取commit文件夹名称
GET https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}/changes?api-version=6.0-preview.1
并获取详细的提交信息 API
Get https://dev.azure.com/{organization}/{project}/_apis/git/repositories/{repositoryId}/commits/{commitId}?api-version=6.0-preview.1
功率shell样本:
$connectionToken="{pat}"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$Commits = "https://dev.azure.com/{org name}/_apis/git/repositories/{repo id}/commits?searchCriteria.toDate=9/15/2020 12:00:00 AM&searchCriteria.fromDate=9/1/2020 12:00:00 AM&api-version=5.0"
$CommitInfo = Invoke-RestMethod -Uri $Commits -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
ForEach ($ID in $CommitInfo.value.commitId)
{
Write-Host $ID
$url = "https://dev.azure.com/{org name}/{project name}/_apis/git/repositories/{repo id}/commits/$($ID)?api-version=6.0-preview.1"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$CommitDetail = Invoke-RestMethod -Uri $url -Headers @{authorization = "Basic $base64AuthInfo"} -Method Get
Write-Host "commit ID is" $CommitDetail.commitId "author is" $CommitDetail.author.name "committer is" $CommitDetail.committer.name
}
结果: