无法成功调用 CreatePushAsync

Cannot successfully call CreatePushAsync

我正在尝试以编程方式更新现有分支中的文件,但出现此异常。

The combination of parameters is either not valid or not complete. Parameter name: refUpdate

这是我的代码:

GitRefUpdate desiredBranch = new GitRefUpdate()
{
    RepositoryId = sourceRepoGuid,
    OldObjectId = branch.ObjectId
};

GitCommitRef newCommit = new GitCommitRef()
{
    Comment = $"Update config to match new branch ",
    Changes = new GitChange[]
    {
        new GitChange()
        {
            ChangeType = VersionControlChangeType.Edit,
            Item = new GitItem() { Path = $"/{fileName}" },
            NewContent = new ItemContent()
            {
                Content = fileContent,
                ContentType = ItemContentType.RawText,
            },
        }
    },
};
        
GitPush push = gitClient.CreatePushAsync(new GitPush()
{
    RefUpdates = new GitRefUpdate[] { desiredBranch },
        Commits = new GitCommitRef[] { newCommit }
}, sourceRepoGuid).Result;

我会从错误消息中想象我对 GitRefUpdate 对象做错了什么。我已经尝试了 OldObjectIdNewObjectId 与 SHA 的几种不同组合,从文件的最后一次提交到分支本身的 SHA,没有什么能满足对 CreatePushAsync.[= 的调用16=]

我找到的唯一示例是在 MS 示例中,它创建了一个新分支并添加了一个新文件。我想更新现有分支中的现有文件。

我没主意了。

您可以按照以下步骤尝试 TFS REST API:

  1. 获取commit ID值:请求方法:GET; URL [集合url]/[团队项目名称]/_apis/git/repositories/[存储库名称]/commits?api-version=1.0 &branch=master&$top=1
  2. 更新文件内容:请求方式:Post; URL: [集合url]/[团队项目名称]/_apis/git/repositories/[存储库名称]/pushes?api-version= 3.0-预览.2;内容类型:application/json;

JSON数据:

{
    "refUpdates": [{
        "name": "refs/heads/master",
        "oldObjectId": "[step 1 commit ID]"
    }],
    "commits": [{
        "comment": "Updated BuildLog.cs",
        "changes": [{
            "changeType": 2,
            "item": {"path": "/BuildLog.cs"},
            "newContent": {
                "content": "using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    public class BuildLog
    {
        public int count;
        public string[] value6;
    }
}
",
                "contentType": 0
            }
        }]
    }]
}

详情请参考本案例: