我正在尝试在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,微软团队undation.Git.Server“,” typeKey“:” GitAsyncRefOperationInvalidSourceException“,” errorCode“:0,” eventId“:3000}在线:99字符:1+调用WebRequest @req-方法POST -Uri“ $ {baseuri} / git / repositories ...+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~+ CategoryInfo:InvalidOperation:(System.Net.HttpWebRequest:HttpWebRequest)[Invoke-WebRequest],WebException+ FullyQualifiedErrorId:WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand
这是什么错误? -根据我的理解,我只提供一个来源。
请求正文中的repository
和source
参数是对象类型。但是我看到你给他们分配了字符串和整数。请参阅其余api here(单击下面的屏幕快照中突出显示的内容以查看对象类型的详细信息)。
您应将repository
和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)