2016-12-14 52 views
2

我倒是希望更新施加到分支编程的标签。在寻找可以做到这一点的方法时,我找到了VersionControlServer.CreateLabel() - Method。 https://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.versioncontrol.client.versioncontrolserver.createlabel(v=vs.120).aspx如何通过使用VersionControlServer.CreateLabel()[C#]来更新TFS标签[TFS]

我试了一下这样的,但它似乎doesn't工作:

TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri(tfsuri)); 

    var vcs = tfs.GetService<VersionControlServer>(); 

    string labelscope = "$/MyProjects/" + machinenumber; 

    var specifiedBranch = vcs.QueryLabels(label, labelscope, null, true); 

    string branch = specifiedBranch[0].Items[0].ServerItem; 

    ItemSpec newItemSpec = new ItemSpec(branch, RecursionType.Full); 

    string newItem = specifiedBranch[0].Items[0].ServerItem; 

    newItemSpec.Item = newItem; 

    VersionSpec versSpec = new LabelVersionSpec(label); 

    LabelItemSpec newLabelItemSpec = new LabelItemSpec(newItemSpec, versSpec, false); 

    LabelItemSpec[] newLabelItemSpecList = new LabelItemSpec[1] { newLabelItemSpec }; 

    string labelOwner = vcs.AuthenticatedUser; 

    string labelName = label.Insert(6, "ed"); 

    VersionControlLabel labelToUpdate = new VersionControlLabel(vcs, labelName, labelOwner, branch, null); 

    vcs.CreateLabel(labelToUpdate, newLabelItemSpecList, LabelChildOption.Replace); 

我究竟想要做的是从“部署”到“部署”更新旧标签名称。我知道如何使用TF.exe执行此操作,但它应该在没有TF.exe的情况下运行。

有没有人有代码示例如何使用CreateLabel() - Methode更新现有标签?

- 更新 -

我改变

LabelItemSpec newLabelItemSpec = new LabelItemSpec(newItemSpec, versSpec, true); 

现在针对同一分支建立的新标签。我不能用VersionControlServer.DeleteLabel删除旧标签。然后我得到我正在寻找的结果,但我仍然想知道如何正确更新。

回答

2

重命名标签不TFS支持。您只能根据要删除的旧标签创建新标签。详情请参阅此链接:Rename Label in Team Foundation Server

您也可以在VersionControlLabel Class进行验证。

名称获取此标签的名称。

它只能够得到名称没有设置名称。


更新

对于VersionControlServer::CreateLabel MethodLabelChildOption options,有三种选择:

  • 替换:您在申请中指定的任何项目这已在标签中将被你所拥有的东西取代指定。 凡是不是在标签已经将被添加到 标签,而不是由您的要求修改现有的项目将 保持原样。
  • 合并:请留下您的请求中但已存在于标签中的未修改项目。您的请求中不是
    中的任何项目将被添加到标签中,标签中未指定的现有项目
    将保持
    不变。
  • 失败:标签具有范围的概念。 “失败”选项表示,如果
    至少有一个名称相同的名称存在于范围内,并且 低于新标签的范围,则创建或更新标签的呼叫应该失败。

更新标签只意味着更新的itemSpecs参数,这意味着包括在标签中的项目规格。所以它用于更新 ItemSpec为标签 - 哪些文件,我们要标记的文件夹。

+0

谢谢您的回复。我之前和之前曾经写过这篇文章,我发现了一种通过删除旧标签并设置新标签来解决问题的方法。所以对我来说没问题。但是“创建或更新”是什么意思?正如在描述行中所写:https://msdn.microsoft.com/en-us/library/bb138611(v=vs.120).aspx。我会认为“更新”意味着我可以更新标签名称。 – L4c0573

+1

已更新我的回答供您参考。 –

+0

好的非常感谢你!现在对我来说很清楚。 – L4c0573