如何获取文件夹中所有文件的历史记录长度

时间:2016-11-17 10:31:57

标签: tfs

我想知道文件夹中每个文件的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获得长度,那也没关系。

2 个答案:

答案 0 :(得分:0)

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

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

@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行中的第一个文件名。因此第3行中B中的公式是

=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复制它们。打开一个新工作表并粘贴仅限值。过滤此新表,以便您只能看到包含非空字符串的行。按照您喜欢的方式对剩余的表格进行排序。

答案 1 :(得分:0)

如果你问题中的长度是指文件的第一个变换集的第一个变换集的日期。有两种方法可以实现你想要的:

  • 将您的TFS历史信息导出到Excel,在Excel中对历史记录进行排序 如你所愿。
  • 使用 TFS API 来实现此目的:获取文件列表,以及每个文件 file获取Changeset列表,然后你只需要比较第一个 最后一个变化集。

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

如果没有使用TFS API来实现这一点,你可以参考这个包含非常详细信息和样本的blog