gpt4 book ai didi

git - 结合 `cloc` 和 `git blame`

转载 作者:IT王子 更新时间:2023-10-29 01:26:19 33 4
gpt4 key购买 nike

cloc 使您能够计算每种语言每种类型(空白、注释或代码)目录中存储的代码行数。

git blame 使人能够看到文件的哪一部分属于谁。

我正在寻找一种将两者结合起来的方法,以便获得一个(三维)矩阵,列出每个用户每种语言每种类型的代码行数。

是否有优雅的内置方法可以做到这一点,或者应该“废弃”每个用户的“blame ”部分(通过在 git blame 之后运行 grep)并运行 cloc 在他们身上计算每个用户的表?


编辑:

天真的方法(基于@Jubobs 的评论):

  1. 首先为目录中的每个文件生成一个 blame 文件(不必显式)。
  2. 使用类似 grep "^[^(]*([^)]*)" 的东西运行 grep 以捕获所有用户的列表并使用 sort 检索唯一值> 和 uniq
  3. 对于每个用户:生成文件夹的卷影副本并使用 grep "^[^(]*($user)" 进行 grep,以便仅保留该用户的行。
  4. 在卷影副本上运行 cloc。
  5. 对每个用户执行此操作,存储结果并将它们一起输出。

这或多或少说明了如何生成所需的输出。但正如您所看到的,这种方法进行了大量复制(或至少存储在内存中),并且实际上可以通过一次而不是多次运行文件来计算每个用户的行数。


期望的输出:

类似于:

+--------+--------------------------------+--------------------------------+
|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 |
+--------+-------+-------+---------+------+-------+-------+---------+------+

最佳答案

这是一个较老的问题,但它引起了我的兴趣,所以我开始尝试解决它。这并没有吐出一个很好的报告,但它确实将数据放在一个 csv 中,其中 3 列是:文件扩展名提交者的电子邮件# lines this用户已提交此文件类型。这也不会像 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 $OUTPUT

关于git - 结合 `cloc` 和 `git blame`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25484745/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com