导出特定日期范围内Azure Repos特定文件夹中所有文件的git历史记录

问题描述

Salesforce文件夹结构如下,其中包含许多类和元xml:

Project
 --src
   --classes
       -- Class A
       -- Class A-Meta.xml
       -- Class B
       -- Class B-Meta.xml
       -- Class N

问题陈述: 对于每堂课,我需要

  1. 日期范围内的历史记录
  2. 输出应包含在此日期范围内对此文件进行过提交的文件名,提交ID和作者名。
  3. 以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 log或其他快速完成此操作的方法

解决方法

这里是获取数据的方法...

git log \
  --after=<date> --before=<date> \
  --format='%an %H' \
  --name-only

这将返回如下行:

f76b3d9e85e511879098c899efbcddb5c55e69cd Crow T. Robot
Project/src/classes/ClassA
Project/src/classes/ClassC

1d4ef40149d9c04d7bc6ea7c9bd9424e939af56f Bob A. Fette
Project/src/classes/ClassB

由Crow T表示在提交f76b3d9e85e511e098098c899efbcddb5c55e69cd中。机器人他们更改了Project / src / classes / ClassA和Project / src / classes / ClassC。

然后,您可以编写一个小程序来吸收数据并根据需要进行处理。

,
  1. 日期范围内的历史记录

我们可以使用此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

我们可以通过提交ID获取提交文件夹名称

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 

电源外壳示例:

$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

}

结果:

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...