【问题标题】:TFS API Changeset branchTFS API 变更集分支
【发布时间】:2012-04-24 00:39:13
【问题描述】:

我正在尝试从变更集中提取分支历史记录,遵循 this 文章。但是,我注意到 Changeset 有一个名为 IsBranch 的属性,这不是文章描述的检查 changeset 是否为分支的方式。

以下检查有什么区别:

VersionControlServer vcs = tpc.GetService<VersionControlServer>();
Changeset cs = vcs.GetChangeset(changeset.ChangesetId);

Console.WriteLine("Changeset: {0}", cs.ChangesetId);

// Get History
foreach (var change in cs.Changes)
{
     if (change.Item.IsBranch)
     {
     }

还有

VersionControlServer vcs = tpc.GetService<VersionControlServer>();
Changeset cs = vcs.GetChangeset(changeset.ChangesetId);

Console.WriteLine("Changeset: {0}", cs.ChangesetId);

// Get History
foreach (var change in cs.Changes)
{
     if ((change.ChangeType & ChangeType.Branch) == ChangeType.Branch)                    
     {
     }

【问题讨论】:

    标签: c# tfs tfs-sdk


    【解决方案1】:

    Item 类的 IsBranch 属性是 2010 年新增的,因此第二种方式是您在以前版本的 TFS 中使用的方式。

    2010 Class Members

    2008 Class Members

    【讨论】:

    • 如果是这样,那我怎么会出现两次检查不匹配的情况?
    • 我不知道,也许 IsBranch 或 ChangeType 的代码中存在错误,它们使用不同的标准来设置属性。哪一个给了您预期的结果?
    • IsBranch 似乎总是 False
    • 我自己测试了它,你是对的,它似乎总是错误的,至少在从 Change 对象访问 Item 类时是这样。所以我会使用第二种方法。
    【解决方案2】:

    要让 TFS 设置 item.IsBranch 属性的值,您需要在调用 GetItem() 时通过传递 GetItemsOptions.IncludeBranchInfo 标志来告诉 VersionControlServer 您需要项目的分支信息。

    示例:

    using (var tfs = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(uri))
    {
        tfs.EnsureAuthenticated();
        var vcs = tfs.GetService<VersionControlServer>();
        var item = vcs.GetItem("$/Proj/Main/", VersionSpec.Latest, DeletedState.Any, GetItemsOptions.IncludeBranchInfo);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-01
      • 2012-06-20
      • 1970-01-01
      • 2018-10-10
      • 2019-01-16
      • 2015-11-12
      • 2012-10-01
      • 2010-11-22
      相关资源
      最近更新 更多