首页 > 解决方案 > 使用 PRid 使用 Cherry-pick api 时出现问题

问题描述

我正在尝试在 power shell 中使用 Git-Cherry API 来自动化通过 PRid 挑选 PR 的过程。

$Body = @{
"generatedRefName" = "refs/test";
"ontoRefName" = $BranhcName;
"repository" = $RepoName;
"source" = $PRid #Prid is an integer value
}
#Cherr-Pick: https://docs.microsoft.com/en-us/rest/api/azure/devops/git/cherry%20picks/create?view=azure-devops-rest-6.0#gitasyncrefoperationsource
Invoke-WebRequest @req -Method POST -Uri "${baseuri}/git/repositories/${RepoName}/cherryPicks?${api}" -Body ($Body|ConvertTo-Json)

当我尝试以这种方式挑选时,我遇到了如下问题,

Invoke-WebRequest : {"$id":"1","innerException":null,"message":"必须指定一个樱桃选择的确切来源。","typeName":"Microsoft.TeamFoundation.Git. Server.GitAsyncRefOperationInvalidSourceException, Microsoft.TeamFo undation.Git.Server","typeKey":"GitAsyncRefOperationInvalidSourceException","errorCode":0,"eventId":3000} At line:99 char:1 + Invoke-WebRequest @req -Method POST -Uri "${baseuri}/git/repositories ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [调用-WebRequest],WebExce ption + FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands。调用WebRequestCommand

这是什么错误?- 根据我的理解,我只给出了一个来源。

标签: gitgithubazure-devopsazure-devops-rest-apicherry-pick

解决方案


请求正文中的repositorysource参数是对象类型。但是我看到您为它们分配了字符串和整数。请在此处查看其余 api (单击下面屏幕截图中突出显示的内容以查看对象类型的详细信息)。

在此处输入图像描述

您应该将repositoryand定义source为对象类型。请参见下面的示例:

$Body = @{
"generatedRefName" = "refs/heads/dev-on-master";
"ontoRefName" = "refs/heads/master";
"repository" = @{
                  "name"= $RepoName
                };
"source" = @{
               "pullRequestId"= $PRid
             } 
}

更新:

我使用以下单个 commitId 进行了测试。它工作得很好。

$Body= @{
"generatedRefName" = "refs/heads/commit-on-master";
"ontoRefName" = "refs/heads/master";
"repository" = @{
                  "name"= $RepoName
                };
"source" = @{
               "commitList"= @(
               @{
               "commitId" = "5cedf148826ed783786e5b9b6932cc07ec9d745e"
               }
               )
             } 
}

上述请求体需要转换为更深层次的 json:-Body ($Body|ConvertTo-Json -Depth 100)

Invoke-WebRequest @req -Method POST -Uri "${baseuri}/git/repositories/${RepoName}/cherryPicks?${api}" -Body ($Body|ConvertTo-Json -Depth 100)


推荐阅读