如何在不传递文件版本的情况下使用 Azure DevOps REST API 编辑文件

How to edit a file using Azure DevOps REST API without passing the file version

我正在尝试使用此处显示的示例在 TFS 上编辑文件的最新版本: https://docs.microsoft.com/en-us/rest/api/azure/devops/tfvc/changesets/create?view=azure-devops-rest-5.0

但是这个请求要求编辑文件的版本。

有没有办法在不传递实际文件版本的情况下编辑文件的最新版本?

提前致谢,

Is there a way to edit a file's last version without passing the actual file version?

根据我的测试,版本字段是必需的。

所以当您使用 Rest API 编辑 TFVC 仓库中的文件时,您需要输入最新版本。

但您可以使用 Rest API:Changesets - Create 获取最新版本号

这是一个 PowerShell 脚本示例:

$token = "PAT"

$url="https://dev.azure.com/{Organization Name}/{Project Name}/_apis/tfvc/changesets?$orderby=id des&api-version=5.0"

$token = [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($token)"))

$response = Invoke-RestMethod -Uri $url -Headers @{Authorization = "Basic $token"} -Method Get -ContentType application/json

$latestversion = $response.value.changesetId[0]

echo $latestversion

$url2="https://dev.azure.com/{Organization name}/_apis/tfvc/changesets?api-version=5.0"
   
$body = "{
    `"changes`": [
     {
      `"item`": {
        `"version`": `"$latestversion`",
        `"path`": `"$/TFVCTEST/test.txt`",
        `"contentMetadata`": {
          `"encoding`": 1200,
          `"contentType`": `"text/plain`"
        }
      },
      `"changeType`": `"edit`",
      `"newContent`": {
        `"content`": `"Initial coassdntentssss sas of 4/9/2019 11:21:13 PM\nEdited contents`"
      }
    }
  ],
  `"comment`": `"(sample) Editing the file via API`"
      }"

$response2 = Invoke-RestMethod -Uri $url2 -Headers @{Authorization = "Basic $token"} -Method Post -Body $body -ContentType application/json

解释:

第一个URL用于获取所有changestIDs,结果默认按降序排列。所以你只需要取第一个值即最新值即可。

然后你可以在第二个RestAPI的请求正文中将the latest value设置为version来编辑文件。

顺便说一句,考虑到您使用的是 TFS,您可能需要将 url 更改为以下内容:

Changesets - Get Changesets

Changesets - Create