cloc
使人们能够计算每种语言每种类型(空白、注释或代码)存储在目录中的代码行数。
git blame
使人们能够看到文件的哪一部分属于谁。
我正在寻找一种将两者结合起来的方法,以便获得一个(三维)矩阵,该矩阵列出每个用户每种语言每种类型的代码行。
是否有优雅的内置方法可以做到这一点,或者应该“废弃”每个用户的“责备”部分(通过运行grep
after git blame
)并cloc
在它们上运行以计算每个用户的表?
编辑:
天真的方法(基于@Jubobs 的评论):
- 首先为目录中的每个文件生成一个责备文件(不必显式)。
- 运行 grep
grep "^[^(]*([^)]*)"
以捕获所有用户的列表并使用 和 检索唯一sort
性uniq
。 - 对于每个用户:生成文件夹的卷影副本并使用 grep 进行 grep,
grep "^[^(]*($user)"
以便仅保留该用户的行。 - 在卷影副本上运行 cloc。
- 为每个用户执行此操作,存储结果并将它们一起输出。
这或多或少是如何生成所需的输出。但是正如人们所看到的,这种方法会进行大量复制(或至少存储在内存中),并且实际上可以通过运行文件一次而不是多次来计算每个用户的行数。
期望的输出:
就像是:
+--------+--------------------------------+--------------------------------+
|User | C# | XML |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| | files | blank | comment | code | files | blank | comment | code |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Foo | 12 | 75 | 148 | 2711 | 2 | 42 | 0 | 0 |
| Bar | 167 | 1795 | 1425 | 2 | 16 | 0 | 512 | 1678 |
+--------+-------+-------+---------+------+-------+-------+---------+------+
| Total | 179 | 1870 | 1573 | 2713 | 18 | 42 | 512 | 1678 |
+--------+-------+-------+---------+------+-------+-------+---------+------+