cloc使用户能够统计每种语言、每种类型(空白、注释或代码)在目录中存储的代码行数。
git blame使人们能够看到文件的哪一部分属于谁。
我正在寻找一种将两者结合起来的方法,这样就可以得到一个(三维)矩阵,列出每个用户每种语言每种类型的代码行。
有没有优雅的内置方法来做到这一点,或者应该“抛弃”每个用户的“指责”部分(通过在git blame之后运行grep ),并对它们运行cloc来计算每个用户的表?
编辑
天真的方法(基于@Jubobs的评论):
grep "^[^(]*([^)]*)"的grep来捕获所有用户的列表,并使用sort和grep "^[^(]*($user)"检索唯一用户:使用生成文件夹的卷影副本,并使用grep只保留该用户的行。
这或多或少说明了如何生成所需的输出。但是可以看到,这种方法进行了大量的复制(或者至少存储在内存中),并且可以通过一次而不是多次运行文件来计算每个用户的行数。
所需的输出
类似于:
+--------+--------------------------------+--------------------------------+
|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 |
+--------+-------+-------+---------+------+-------+-------+---------+------+发布于 2016-06-09 20:46:21
这是一个较老的问题,但它达到了我的兴趣的顶峰,所以我开始尝试解决它。这不是一个很好的报告,但它确实将数据放在csv中,其中的3列是:file extension,email of committer,# lines this user has committed for this file type。这也不像cloc那样给出空白的、注释的、代码行。如果我有时间,我会尝试让所有这些都很好地工作,但我认为这可能是一个“足够好”的解决方案,或者至少让你朝着正确的方向开始。
#!/bin/bash
LIST_OF_GIT_FILES=/tmp/gitfiles.txt
GIT_BLAME_COMBINED_RESULTS=/tmp/git-blame.txt
OUTPUT=/tmp/git-blame-output.txt
SUMMARY=code-summary.csv
rm $GIT_BLAME_COMBINED_RESULTS
git ls-files > $LIST_OF_GIT_FILES
while read p; do
git blame -e -f $p >> $GIT_BLAME_COMBINED_RESULTS
done < $LIST_OF_GIT_FILES
awk -F ' ' '{print $2 "," $3}' $GIT_BLAME_COMBINED_RESULTS | tr -d '(<>' | awk -F ',' '{n = split($1, a, "."); print a[n] "," $2}' > $OUTPUT
sort $OUTPUT | uniq -c | sort -n | awk -F ' ' '{print $2 "," $1}' | sort > $SUMMARY
rm $GIT_BLAME_COMBINED_RESULTS
rm $LIST_OF_GIT_FILES
rm $OUTPUThttps://stackoverflow.com/questions/25484745
复制相似问题