gitblame:计算开发人员贡献的字符数跟踪重命名

问题描述

对于某些统计目的,我需要精确计算开发人员为 git 存储库 (HEAD) 的当前状态贡献的字符数。

我能得到的最接近的是这个命令:

wc -m `git log --no-merges --author="SomeDev" --name-only --pretty=format:"" | sort -u`

这种方法存在一些问题:

  1. 即使多人对一个文件做出了贡献 - 所有角色都将归属于最初的作者,
  2. 如果 SomeDev 创作的文件在某个阶段被重命名,它会失败。

git blame 可以以某种方式用于此目的吗?我看到它一方面可以跟踪文件重命名,但它似乎将整行归因于最后一个提交者,即使他可能只更改了其中的几个字符,而其余部分则由前一个提交者贡献给该行。

解决方法

注意:正如我在评论中所说,没有确切的方法来确定每个角色的作者。


您必须查看每个文件的差异,并计算作者写了什么字符。

您可以获得触及单个文件的提交列表:

git log --format="%h" -- that/file

并在该列表上向后工作。

您也可以要求 git log 直接输出文件上的差异列表:

git log -p -- that/file

# you can add options for 'git diff',like '-U0' to discard context lines :
git log -U0 -p -- that/file

# and the 'format' to customize the data displayed on each commit :
git log --format="commit: %h%nauthor: %an" ...

据我所知,您必须解析这些差异才能确定每个角色的“作者”。