有没有一种方法可以通过TFS客户端库/ API在单个操作中创建带有链接工作项的git push / commit?

时间:2018-09-11 12:51:40

标签: c# git tfs git-commit tfs-sdk

我想使用包含指定工作项的TFS git client libraries创建推送。

代码基本上是:

public static async Task<GitPush> CreatePush(
    this GitHttpClient git,
    GitRepository repo,
    GitRefUpdate branchUpdateRef,
    GitChange change,
    String comment,  
    IEnumerable<Int32> workitems = null)
{
    workitems = (workitems ?? Enumerable.Empty<Int32>()).ToList();
    var commit = new GitCommitRef
    {
        Comment = comment,
        Changes = new[]
        {
            change
        },
        WorkItems = workitems
            .Select(wi => new ResourceRef
            {
                Id = wi.ToString() 
                // Perhaps one should also set an URL of some kind
            })
            .ToList()
    };
    var push = new GitPush
    {
        Commits = new[]
        {
            commit
        },
        RefUpdates = new[]
        {
            branchUpdateRef
        },
        Repository = repo
    };
    return await git.CreatePushAsync(
        push, 
        project: repo.ProjectReference.Id,
        repositoryId: repo.Id);
}

尽管创建的提交上没有工作项链接,但推送创建成功。

我尝试过

  1. 将网址设置为https://docs.microsoft.com/en-us/rest/api/vsts/wit/work%20items/get%20work%20item?view=vsts-rest-4.1#workitem中的网址。
  2. 将其设置为与具有相关工作项的提交实际在GitCommitRef.WorkItems ResourceRef中返回的工作项URL稍有不同。

但无济于事。

我实际上可以通过

达到预期的最终结果
  1. $"#{workitemId}"附加到提交注释字符串
  2. 或者通过将提交链接添加到有问题的工作项中

尽管如此,这两种解决方案都有一些我想避免的小缺点(1-更改提交消息,2-可能与CI发生竞争等)。

基本上,有没有一种方法可以在单个操作中创建带有关联工作项的GitPush,还是我必须使用上述解决方法?

1 个答案:

答案 0 :(得分:1)

不,没有任何方法可以实现这一目标。即使从TFS Web UI创建提交/推送,TFS仍会先创建提交/推送,然后更新工作项以链接到推送。