使用TFS重置api获取变更集历史记录

时间:2018-01-09 16:15:36

标签: tfs tfs2017 tfvc

有没有办法使用TFS rest api来获取变更集的历史记录?我有项目路径及其当前的变更集ID,这实际上是一个合并ID,我想看到合并细节,以便我可以获得它来自的变更集的ID。 从网上我可以很容易地看到这一点,但我需要能够对此进行编码,因为我需要为内部审计目的生成报告。 Visual history of changeset

谢谢, 安东尼

3 个答案:

答案 0 :(得分:0)

您可以使用以下格式调用REST API以获取更改,包括合并更改的ID和更改的文件路径。假设您的变更集为736,然后使用

调用REST API
http://yourtfs:8080/tfs/collectionname/_apis/tfvc/changesets/736/changes

例如,在VSTS下面的作品

https://myacc.visualstudio.com/defaultcollection/_apis/tfvc/changesets/736/changes

我是如何找到它的?

使用VSTS测试场景,它应该可以正常使用TFS 2017,因为它使用的是REST api版本1.0

我的变更集736这里是分支发生的合并,它在其他分支中完成了两次更改。

enter image description here

当我使用changset id 736执行get时,我从REST api收到更改集详细信息。

https://myacc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/736?api-version=1.0

enter image description here

然后我可以调用在上面突出显示的返回结果中找到的更改api url,这将返回其他更改集ID,包括更改的文件路径

https://myacc.visualstudio.com/_apis/tfvc/changesets/736/changes

enter image description here

答案 1 :(得分:0)

因此,只需使用get changes REST API来检索特定变更集的合并详细信息:

GET http://SERVER:8080/tfs/DefaultCollection/_apis/tfvc/changesets/{changesetId}/changes

您可以简单地使用此PS示例来获取特定合并changset的合并详细信息:

Param(
   [string]$collectionUrl = "http://server:8080/tfs/DefaultCollection",  
   [string]$keepForever = "true",
   [string]$changesetId = "376",
   [string]$user = "username",
   [string]$token = "password"
)

# Base64-encodes the Personal Access Token (PAT) appropriately
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user,$token)))

$uri = "$collectionUrl/_apis/tfvc/changesets/$changesetId/changes"

$result = Invoke-RestMethod -Uri $uri -Method Get -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)}

$customObject = new-object PSObject -property @{
          "MergeChangesetId" = $changesetId
          "ServerItem" = $result.value.mergeSources.serverItem
          "versionFrom" = $result.value.mergeSources.versionFrom
          "versionTo" = $result.value.mergeSources.versionTo
          "changeType" = $result.value.changeType
        } 

$customObject | Select `
                MergeChangesetId, 
                ServerItem, 
                versionFrom,
                versionTo,
                changeType

您还可以循环获取每个合并变更集详细信息,还可以将结果导出到 .csv 文件:(注意:如果您的变更集太多,运行可能会非常慢,可以在限制条件下根据需要切断。)

#Get the work items associated to Release

$collectionurl = "http://server:8080/tfs/DefaultCollection"

$ErrorActionPreference = 'SilentlyContinue'

#Get changesets
$changesetsUrl = "$collectionurl/_apis/tfvc/changesets"
$changesets = Invoke-RestMethod -Uri $changesetsUrl -Method Get -UseDefaultCredential

#Get the changeset history.
$changesetResults = @()

foreach ($changeset in $changesets.value){
$changesetId = $changeset.changesetId
$baseUrl = "$collectionurl/_apis/tfvc/changesets/$changesetId/changes"            
$response = Invoke-RestMethod -Uri $baseUrl -Method Get -UseDefaultCredential

$customObject = new-object PSObject -property @{
          "MergeChangesetId" = $changesetId 
          "ServerItem" = $response.value.mergeSources.serverItem
          "versionFrom" = $response.value.mergeSources.versionFrom
          "versionTo" = $response.value.mergeSources.versionTo
          "changeType" = $response.value.changeType
        } 

$changesetResults += $customObject  

}

$changesetResults | Select `
                MergeChangesetId, 
                ServerItem, 
                versionFrom,
                versionTo,
                changeType | Where-Object {$_.changeType -like '*merge*'} #|export-csv -Path C:\LC\MergeChangesetsDetails.csv -NoTypeInformation

enter image description here

答案 2 :(得分:0)

感谢您的反馈。我继续调查自己,发现了一种类似的方法来查找信息。

$uri = $collection + "/_apis/tfvc/items?api-version=3.0&scopePath=" + $sourcePath + "&recursionLevel=Full"
$response = Invoke-RestMethod -Method Get -Credential $credential -ContentType application/json -Uri $uri
foreach ( $value in $response.value )
{
         $uri = $collection + "/_apis/tfvc/items?api-version=3.0&scopePath=" + $value.path + "&versionType=MergeSource&version=" + $value.version
         $mergeResponse = Invoke-RestMethod -Method Get -Credential $credential -ContentType application/json -Uri $uri
}