我想知道文件夹中每个文件的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获得长度,那也没关系。
答案 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
中观察结果。注意,这个文件很容易变大。
打开一个新工作表并将output.txt
的内容复制到第一列A
(因为该文本不包含适合所有一列的选项卡)。现在我们需要4个辅助列B
到E
。
列B
,A
第一行包含列名,在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.)
最后一步
选择最后两列D
和E
,然后按Ctrl + C复制它们。打开一个新工作表并粘贴仅限值。过滤此新表,以便您只能看到包含非空字符串的行。按照您喜欢的方式对剩余的表格进行排序。
答案 1 :(得分:0)
如果你问题中的长度是指文件的第一个变换集的第一个变换集的日期。有两种方法可以实现你想要的:
关于如何将TFS历史信息导出到Excel,您可以在SO中引用类似的问题:Export TFS 2010 History to Excel or Text Document
如果没有使用TFS API来实现这一点,你可以参考这个包含非常详细信息和样本的blog。