【问题标题】:How to get length of history for all files in a folder如何获取文件夹中所有文件的历史长度
【发布时间】:2016-11-18 17:56:13
【问题描述】:

我想知道文件夹中每个文件的 TFS 历史记录有多长。我认为将每个文件的历史记录在一个文本文件中就足够了。命令

tf hist * /noprompt

在这样的平面列表中列出所有文件的所有变更集

Changeset User              Date       Comment
--------- ----------------- ---------- -------------------
45788     thu               16.11.2016 Bugfix 8172
45087     thu               11.10.2016 Refactor
44621     thu               15.09.2016 Refactor
... (a lot more lines)
44179     thu               22.08.2016 Bugfix 123
43537     thu               13.07.2016 Feature X finished
43383     thu               04.07.2016 Feature Y removed
42347     thu               17.05.2016 Refactor

但我正在寻找类似的东西

File: A.cpp
Changeset User              Date       Comment
--------- ----------------- ---------- -------------------
45788     thu               16.11.2016 Bugfix 8172
44179     thu               22.08.2016 Bugfix 123
43383     thu               04.07.2016 Feature Y removed
42347     thu               17.05.2016 Refactor

File: B.cpp
Changeset User              Date       Comment
--------- ----------------- ---------- -------------------
45788     thu               16.11.2016 Bugfix 8172
44621     thu               15.09.2016 Refactor
43537     thu               13.07.2016 Feature X finished
43383     thu               04.07.2016 Feature Y removed

... (a lot more tables)

有了这些信息(以及对 MS Excel 的一些善用),我可以计算出各种历史长度。

但是,如果有更好的方法可以直接从 TFS 获取长度,那也很好。

【问题讨论】:

    标签: tfs


    【解决方案1】:

    如果您问题中的长度表示从文件的第一个变更集到最后一个变更集的日期。有两种方法可以实现您想要的:

    • 将您的 TFS 历史信息导出到 Excel,在 Excel 中对历史进行排序 随你喜欢。
    • 使用 TFS API 来实现:获取文件列表,并为每个 文件获取变更集列表,然后您只需要比较第一个 最后一个变更集。

    关于如何将 TFS 历史信息导出到 Excel,您可以参考 SO 中的类似问题:Export TFS 2010 History to Excel or Text Document

    关于如何使用 TFS API 来实现这一点,你可以参考这个blog,其中包含非常详细的信息和示例。

    【讨论】:

    • “历史长度”是指“历史中的条目数”。然后我想为文件夹中的每个文件提供所有这些数字 - 而不仅仅是单个文件。
    【解决方案2】:

    获取文件夹中每个文件的历史记录

    这个小批处理脚本可以解决问题

    @echo off
    rem listAllTFSHistories.bat
    
    for /R %%f in (*.*) do (
        echo %%f
        "c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\ide\tf.exe" hist %%f /noprompt /itemmode
        echo .
    )
    

    然后执行

    listAllTFSHistories.bat > output.txt

    并在output.txt 中观察结果。小心,这个文件很容易变大。

    创建适当的 Excel 工作表

    打开一个新工作表并将output.txt 的内容复制到第一列A(因为文本不包含选项卡,所以它适合所有内容)。现在我们需要 4 个辅助列 BE

    BA中历史记录的文件名

    第一行包含列名,在列 B 中,我们需要初始化第 2 行中的第一个文件名。因此,B 从第 3 行开始的公式是

    =IF(A2 =".";A3;B2)
    =IF(A3 =".";A4;B2)
    (etc.)
    

    C,如果当前行是变更集,则为 1

    从第 2 行开始

    =IF(ISNUMBER(INT(LEFT(A2;7)));1;0)
    =IF(ISNUMBER(INT(LEFT(A3;7)));1;0)
    (etc.)
    

    D,汇总列C每个历史记录

    因此有效地计算了每个历史记录中的变更集

    =IF(C2 = 0;0;D1 +C2)
    =IF(C3 = 0;0;D2 +C3)
    (etc.)
    

    E,文件名 - 再次 - 但仅限于最高变更集计数

    我们已经接近我们需要的信息

    =IF(AND(D2>0;D3=0);B2;"")
    =IF(AND(D3>0;D4=0);B3;"")
    (etc.)
    

    最后一步

    选择最后两列 DE 并按 Ctrl+C 复制它们。打开一个新工作表并粘贴。过滤这个新表,以便您只看到那些包含非空字符串的行。以您喜欢的方式对剩余的表格进行排序。

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 2017-04-17
      • 2012-10-07
      • 1970-01-01
      • 2021-11-29
      • 2017-06-03
      • 1970-01-01
      • 2020-11-07
      • 2013-11-26
      相关资源
      最近更新 更多