如何在git中为给定作者获取给定分支上的总添加和删除

Sta*_*ays 31 git

在git中有没有办法计算给定分支上给定用户的总删除和添加?类似的东西在github上,在图表部分有一个图表,显示总添加和删除但只在主分支...我认为如果他们这样做,这也很可能在git,所以,有人知道怎么做吗?

先感谢您.

Dan*_*ing 38

我不认为Git有任何内置命令可以做到这一点.但是在其他一些标准实用程序的帮助下,它可以完成.这是一个通过awk过滤Git日志输出的示例,以获取总插入和删除的摘要:

git log --author=$USER --shortstat $BRANCH | \
awk '/^ [0-9]/ { f += $1; i += $4; d += $6 } \
END { printf("%d files changed, %d insertions(+), %d deletions(-)", f, i, d) }'
Run Code Online (Sandbox Code Playgroud)

  • **只要有插入**,这就很有效.在只有删除的情况下,它们将被视为插入,因为'8个文件的第4个字改变,81个删除'是删除,而不是插入.这可以解释@Starlays提到的Github输出之间的差异. (4认同)

dev*_*yer 8

正如这里所回答的:Git:如何从单个 git 提交中获取 +/-(插入和删除)的总数

Git 提供简短的统计信息(更改的文件总数、插入数量、删除数量):

git diff --shortstat COMMIT_HASH~ COMMIT_HASH
Run Code Online (Sandbox Code Playgroud)


kch*_*kch 5

我基于此推出了自己的版本,以覆盖较新的 git 的情况,其中不打印 0 插入或删除:

\n\n
git log --author=$USER --shortstat $BRANCH | \n  ruby -e \'puts $<.read.scan(/(\\d+) \\w+\\(([+-])\\)/).group_by(&:last).\n  map{|s,ds|s+ds.map(&:first).map(&:to_i).inject(0,&:+).to_s}.join(", ")\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

这只是打印插入和删除总数,例如:+7108, -6742

\n\n

如果您也希望文件全部更改,这个稍微 hacky\xc2\xb9 版本就可以了:

\n\n
git log --author=$USER --stat=99999999 $BRANCH | \n  ruby -e \'f,a,d = $<.read.scan(/^ (.*?)\\s+\\|\\s+\\d+\\s(\\+*)(\\-*)$/).transpose;\n  puts [f.uniq.length, " files, +", a.join.length, ", -", d.join.length].join\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出如下所示:97 files, +3701, -3598

\n\n

文件总数是所有提交中唯一文件名的数量,而不是每次提交时更改的文件数量的总和,这是原始答案给您的。

\n\n
\n\n

\xc2\xb9 问题999\xe2\x80\xa6是因为我们实际上是在计算+s 和-s 的数量,并且我们需要 git 不要将它们限制为默认宽度,所以我们给它一个非常长的宽度来使用。

\n