有没有办法在单个操作中通过 TFS 客户端 libraries/API 创建带有链接工作项的 git push/commit?

Is there a way to create git push/commit with linked workitems through TFS client libraries/API in a single operation?

我想使用包含指定工作项的 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);
}

推送已成功创建,但创建的提交上没有工作项 link。

我试过了

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

但是没有用。

我其实可以通过

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

不过,这两种解决方案都有我希望避免的小缺点(1 - 更改提交消息,2 - 可能与 CI 竞争条件等)。

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

不,没有任何方法可以做到这一点。即使您从 TFS Web UI 创建 commit/push,TFS 仍会先创建 commit/push,然后将工作项更新为 link 以推送。