Powershell 使用Rest API v2.0在TFS 2015中查询特定Git分支

Powershell 使用Rest API v2.0在TFS 2015中查询特定Git分支,powershell,tfs-2015,visual-studio-2019,Powershell,Tfs 2015,Visual Studio 2019,我有一个TFS 2015中的git存储库列表,我已经使用TFS Rest API v访问了这些存储库。Powershell中的2.0版本,我只想返回每个版本的最新版本分支,但是响应仍然返回“defaultBranch”分支属性(早期版本) 我已尝试将'versionDescriptor.version'uri参数的值设置为与此分支匹配的正则表达式。我们的发布分支采用通用模式“releases/x.x.xx”,因此我的正则表达式需要为每个“x”找到最高数字 $tfsUrl = 'http://tf

我有一个TFS 2015中的git存储库列表,我已经使用TFS Rest API v访问了这些存储库。Powershell中的2.0版本,我只想返回每个版本的最新版本分支,但是响应仍然返回“defaultBranch”分支属性(早期版本)

我已尝试将'versionDescriptor.version'uri参数的值设置为与此分支匹配的正则表达式。我们的发布分支采用通用模式“releases/x.x.xx”,因此我的正则表达式需要为每个“x”找到最高数字

$tfsUrl = 'http://tfs.infosys.com:8080/tfs/'
$collectionName = 'BCSA'
$collectionUrl =  "$($tfsUrl)$($collectionName)"
$getProjectsUrl = "$($collectionUrl)/BHBs/_apis/git/repositories/?api-version=2.0"
$getItemsURL = "$($collectionUrl)/BHBs/_apis/git/repositories/" 
[datetime]$dateTime = Get-Date -Format u
$refDate = $dateTime.AddYears(-2)
[regex]$branchName = "^releases/d[3].\d[0-9].\d[0-9]$"

$response = Invoke-RestMethod -UseDefaultCredentials -uri $getProjectsUrl

foreach ($repository in $response.value)
{
    $itemsURI = "$($getItemsURL)$($repository.id)" + "/items?                      
recursionLevel=full&versionDescriptor.versionType=branch&versionDescriptor.version=$branchName&latestProcessedChange=true&includeContent=true&api-version=2.0"
    $repoResponse = Invoke-RestMethod -UseDefaultCredentials -uri $itemsURI 
    $repoResponse = $repoResponse.value | Where-Object {$_.gitObjectType -eq 
    "blob" -and [datetime]$_.latestProcessedChange.author.date -gt $refDate} | 
    Select-Object -Property Path, latestProcessedChange 
}

[regex]$branchName=“^releases/d[3]。\d[0-9]。\d[0-9]$”
似乎您的代码只是基于特定的名称版本名
releases/x.x.xx
来拉分支

在我的情况下,我试图处理这个问题:

VssBasicCredential credintials = new VssBasicCredential(String.Empty, "YOUR SECRET CODE HERE");
VssConnection connection = new VssConnection(new Uri("https://yourserverurl.visualstudio.com/"), credintials);
GitHttpClient client = connection.GetClient<GitHttpClient>();

List<GitRepository> repositories = await client.GetRepositoriesAsync(true); // or use GetRepositoryAsync()
var repo = repositories.FirstOrDefault(r => r.Name == "Some.Repo.Name");

GitVersionDescriptor descriptor = new GitVersionDescriptor()
{
    VersionType = GitVersionType.Branch,
    Version = "develop",
    VersionOptions = GitVersionOptions.None
};

List<GitItem> items = await client.GetItemsAsync(repo.Id, scopePath: "/", recursionLevel: VersionControlRecursionType.Full, versionDescriptor: descriptor);
GitVersionDescriptor commitDescriptior = new GitVersionDescriptor()
{
    VersionType = GitVersionType.Commit,
    Version = item.CommitId,
    VersionOptions = GitVersionOptions.None
};

Stream stream = await client.GetItemTextAsync(repo.Id, item.Path, download: true, versionDescriptor: commitDescriptior)