【发布时间】:2021-05-20 10:30:05
【问题描述】:
对于某些统计目的,我需要精确计算开发人员为 git repo (HEAD) 的当前状态贡献的字符数量。
我能得到的最接近的是这个命令:
wc -m `git log --no-merges --author="SomeDev" --name-only --pretty=format:"" | sort -u`
这种方法存在一些问题:
- 即使有几个人为一个文件做出了贡献 - 所有角色都将归属于最初的作者,
- 如果
SomeDev创作的文件在某个阶段被重命名,它会失败。
git blame 可以以某种方式用于此目的吗?我看到它一方面可以跟踪文件重命名,但它似乎将整行归因于最后一个提交者,即使他可能只更改了其中的几个字符,而其余部分是由前一个提交者贡献给该行的。
【问题讨论】:
-
我的 2 美分:git 没有存储足够的信息来给出 repo 中每个文件中每个字符的确切贡献者,请知道最终解决方案只会“足够好”。例如:提交可以重新设置、挑选或修改,并且具有与 Committer 字段不同的 Author 字段,并且您将不知道谁编写了提交的哪个部分。同样:git 不跟踪单个文件的历史记录,因此“重命名”只是在事实之后猜测。例如,复制/粘贴文件并编辑 1 行,将列出新文件完全由作者创建。
-
@LeGEC:假设只使用了合并。也许开发人员为一行贡献的字符数量可以使用 diff 到以前的提交(+ git blame)来重建。