无法成功调用CreatePushAsync

时间:2018-04-19 18:06:49

标签: tfs2017

我正在尝试以编程方式更新现有分支中的文件,但是我得到了这个例外。

参数组合无效或不完整。 参数名称: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对象做错了。我已经尝试了几个不同的OldObjectId,NewObjectId和从最后一次提交文件的SHA到分支本身的SHA的组合,没有什么能满足对CreatePushAsync的调用。

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

我没有想法。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用TFS REST API,如下所示:

  1. 获取提交ID值:请求方法:GET; URL [collection url] / [team project name] / _ apis / git / repositories / [repository name] /commits?api-version=1.0&branch=master&$top=1
  2. 更新文件内容:请求方法:发布; URL:[collection url] / [team project name] / _ apis / git / repositories / [repository name] /pushes?api-version=3.0-preview.2;内容类型:application / json;
  3. 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
                }
            }]
        }]
    }
    

    有关详细信息,请参阅此案例:Updating a file using REST Api Visual Studio Team Services