【问题标题】:listing all contents of a folder in tfs列出 tfs 中文件夹的所有内容
【发布时间】:2023-03-21 22:30:02
【问题描述】:

给定 tfs 中的特定文件夹路径,我需要递归查找文件夹中给定变更集的所有文件和文件夹。换句话说,对于给定的变更集,我需要在 tfs 中获得路径的传递闭包。我这样做时面临的问题是列出 tfs 中特定文件夹的内容。 这在 C# 中怎么可能实现?

【问题讨论】:

    标签: c# tfs tfs-sdk


    【解决方案1】:

    我假设您想要“变更集 X 的文件夹内容”而不是“作为变更集 X 一部分的文件夹内容”

    GetItems 是正确的调用方式,只需传入您感兴趣的变更集的版本规范即可。

    http://msdn.microsoft.com/en-US/library/bb138911.aspx

    所以,假设您已经引用了 VersionControlServer 实例:

    var myFolderAtChangeset17 = versionControlServer.GetItems("$/MyFolder", new ChangesetVersionSpec(17), RecursionType.Full);
    

    如果我误解了,并且您碰巧想要“文件夹内容是变更集 X 的一部分”,有几种不同的方法可以做到这一点,但是使用 GetChangeset 获取变更集并仅过滤 Changes 非常简单.

    【讨论】:

      【解决方案2】:

      这样的东西可能更符合您的要求。这将获取变更集中的所有更改并遍历它们,识别给定路径中的更改。这可以通过 linq 查询来缩短,但我将把它扩大一点,以给出我想说的要点:

          TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");
          VersionControlServer vcs = tfs.GetService<VersionControlServer>();
      
          Changeset cs = vcs.GetChangeset(6284868);
      
          foreach (Change change in cs.Changes)
          {
              if (change.Item.ServerItem.StartsWith("$/Application Common/Dev/src"))
              {
                  System.Diagnostics.Debug.WriteLine(string.Format("Changeset {0}, file {1}, changes {2}",
                      cs.ChangesetId, change.Item.ServerItem, change.ChangeType.ToString()));
              }
          }
      

      【讨论】:

      • 谢谢.. 但我不需要特定变更集中的项目。我需要 tfs 中给定文件夹下的所有文件和文件夹。
      • 那么您可以使用 GetItems() ...不过,您的问题确实提到了变更集。
      【解决方案3】:

      我认为这样的事情会起作用..

      
          TeamFoundationServer tfs = new TeamFoundationServer("http://tfs:8080");   
          VersionControlServer vcs = tfs.GetService();   
          ItemSet items;
      
          items = vcs.GetItems(tfsPath, RecursionType.Full);
      

      如果您有任何其他想法,请发布它们..

      【讨论】:

      • 您的代码缺少定义 tfsPath 以传递给 GetItems 的部分
      【解决方案4】:

      您可以使用变更集 Web 服务来获取一个 XML 文档,其中包含特定变更集的所有更改项。然后只需遍历已更改项目的列表,看看它们是否在您要查找的路径中。

      这里是变更集网络服务的 URL:

      http://your_tfs_server/VersionControl/Changeset.aspx?artifactMoniker=your_changeset_number&webView=true

      【讨论】:

      • 我可以只做一个 VersionControlServer.getItems() 并循环遍历派生数组。我现在只是在尝试...
      • 投反对票(抱歉,大卫)。在任何(正常)情况下,您都不应该使用 Web 服务来执行此操作。这些是内部的,如有更改,恕不另行通知。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      相关资源
      最近更新 更多