Git已删除行的总数和添加的完整日志行

时间:2013-07-08 09:13:34

标签: git refactoring statistics git-log

我试图在代码库中可视化一些代码味道。基本上这就是我想要展示的内容:

  • 按发生次数排列的前20个文件。可以使用以下命令找到:

    $ git log --pretty=format: --name-only | sort | uniq -l | sort -rg | head -20
    
  • 添加行的前20个文件。不知道如何得到这个,我也想省略这个计数中的第一次提交,因为显示我们从SVN移动时添加的行数没有多大意义。

  • 已删除行的前20个文件。不知道怎么弄这个。

  • 通过更改(包括已添加和已删除)行排名前20位的文件。不知道怎么弄这个。

我将根据每个文件中的代码行数来保持这些计数。

我可以使用此命令获得添加和删除的行:

$ git log --numstat --pretty --oneline <filename> | awk 'N F==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}'

但添加的行是倾斜的,因为我不能省略第一次提交。此外,我希望它分析整个代码库,而不仅仅是一个文件。

我计划想象的是我的怀疑,即我们拥有的最大文件也将是我们改变最多的文件,因此它们是重构的主要候选者。我对谁做了哪些更改或谁删除或添加了大多数行没兴趣。我只想向一些决策者提出痛苦的观点; - )

这是受到Michael Feathers的启发,他在QCon谈到了这一点。

任何人都可以帮我剩下的部分吗?

1 个答案:

答案 0 :(得分:0)

找到first-commit-after-big-migration的哈希值,或者为其添加标记,并在git log命令中使用它:

$ git log --numstat --pretty --oneline 0f5d22e..HEAD -- <filename> | awk ...