TFS rest api是否有办法获取变更集的历史?我有项目路径及其当前的变更集ID,这实际上是一个合并ID,并且我想查看合并详细信息,以便获取其来源的变更集的ID。从网络上我可以很容易地看到这一点,但是我需要能够对此进行编码,因为我需要生成用于内部审计目的的报告。Visual history of changeset
谢谢,安东尼
因此,只需使用获取更改REST API来检索特定更改集的合并详细信息:
GET http://SERVER:8080/tfs/DefaultCollection/_apis/tfvc/changesets/{changesetId}/changes
您可以简单地使用此PS示例来获取特定合并变更集的合并详细信息:
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
您可以按照以下格式调用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测试了该方案,并且由于它正在使用REST api版本1.0,所以它在TFS 2017上应该可以正常工作
我的变更集736是分支的合并,它在其他分支中有两个更改。
当我执行changset ID 736时,我从REST API接收了变更集的详细信息。
https://myacc.visualstudio.com/DefaultCollection/_apis/tfvc/changesets/736?api-version=1.0
然后,我可以调用在上面突出显示的返回结果中找到的更改api url,它将返回其他更改集ID,包括更改的文件路径
https://myacc.visualstudio.com/_apis/tfvc/changesets/736/changes
感谢您的宝贵意见。我继续调查自己,发现了一种类似的方式来查找信息。