【问题标题】:git blame: count amount of characters contributed by a developer (tracking renames)git blame:计算开发人员贡献的字符数量(跟踪重命名)
【发布时间】:2021-05-20 10:30:05
【问题描述】:

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

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

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

这种方法存在一些问题:

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

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

【问题讨论】:

  • 我的 2 美分:git 没有存储足够的信息来给出 repo 中每个文件中每个字符的确切贡献者,请知道最终解决方案只会“足够好”。例如:提交可以重新设置、挑选或修改,并且具有与 Committer 字段不同的 Author 字段,并且您将不知道谁编写了提交的哪个部分。同样:git 不跟踪单个文件的历史记录,因此“重命名”只是在事实之后猜测。例如,复制/粘贴文件并编辑 1 行,将列出新文件完全由作者创建。
  • @LeGEC:假设只使用了合并。也许开发人员为一行贡献的字符数量可以使用 diff 到以前的提交(+ git blame)来重建。

标签: git git-blame


【解决方案1】:

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


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

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

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" ...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-03
    • 2015-06-10
    • 2014-01-30
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-19
    相关资源
    最近更新 更多