gpt4 book ai didi

Git Blame 提交统计

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

我如何“滥用”blame(或一些更适合的函数,和/或结合 shell 命令)来统计存储库中当前有多少行(代码)来自每个提交者?

示例输出:

Committer 1: 8046 Lines
Committer 2: 4378 Lines

最佳答案

更新

git ls-tree -r -z --name-only HEAD -- */*.c  | sed 's/^/.\//' | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep -ae "^author "|sort|uniq -c|sort -nr

我在路上更新了一些东西。

为了方便,你也可以把它放到它自己的命令中:

#!/bin/bash

# save as i.e.: git-authors and set the executable flag
git ls-tree -r -z --name-only HEAD -- $1 | sed 's/^/.\//' | xargs -0 -n1 git blame \
--line-porcelain HEAD |grep -ae "^author "|sort|uniq -c|sort -nr

将其存储在您的路径中的某处或修改您的路径并像这样使用它

  • git authors '*/*.c' # 递归查找所有以.c结尾的文件
  • git authors '*/*.[ch]' # 查找所有以.c 或.h 结尾的递归文件
  • git authors 'Makefile' # 只计算 Makefile 中作者的行数

原始答案

虽然接受的答案可以完成工作,但速度非常慢。

$ git ls-tree --name-only -z -r HEAD|egrep -z -Z -E '\.(cc|h|cpp|hpp|c|txt)$' \
|xargs -0 -n1 git blame --line-porcelain|grep "^author "|sort|uniq -c|sort -nr

几乎是瞬时的。

要获取当前跟踪的文件列表,您可以使用

git ls-tree --name-only -r HEAD

此解决方案避免调用 file 来确定文件类型,并出于性能原因使用 grep 来匹配所需的扩展名。如果应包含所有文件,只需将其从行中删除即可。

grep -E '\.(cc|h|cpp|hpp|c)$' # for C/C++ files
grep -E '\.py$' # for Python files

如果文件可以包含对 shell 不利的空格,您可以使用:

git ls-tree -z --name-only -r HEAD | egrep -Z -z '\.py'|xargs -0 ... # passes newlines as '\0'

给出一份文件列表(通过管道),可以使用 xargs 调用命令并分发参数。允许处理多个文件的命令忽略了 -n1。在这种情况下,我们调用 git blame --line-porcelain 并且对于每个调用,我们只使用 1 个参数。

xargs -n1 git blame --line-porcelain

然后我们过滤出现“author”的输出,对列表进行排序并计算重复行数:

grep "^author "|sort|uniq -c|sort -nr

注意事项

其他答案实际上会过滤掉仅包含空格的行。

grep -Pzo "author [^\n]*\n([^\n]*\n){10}[\w]*[^\w]"|grep "author "

上面的命令将打印包含至少一个非空白字符的行的作者。您还可以使用 match \w*[^\w#] 这也将排除第一个非空白字符不是 # 的行(许多脚本中的注释语言)。

关于Git Blame 提交统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4589731/

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