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

时间:2012-10-24 18:44:48

标签: git

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

提前谢谢。

2 个答案:

答案 0 :(得分:37)

我不认为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) }'

答案 1 :(得分:4)

我基于此推出了自己的内容以覆盖更新的git,其中不插入0个插入或删除:

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

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

如果你想要更改文件总数,这个有点hacky¹版本将会:

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

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

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

¹999…这是因为我们确实计算了+-的数量,我们需要git不要将它们限制为默认宽度,所以我们给它一个很长的宽度来使用。