使用git log获取代码行?

时间:2015-04-23 16:19:36

标签: git github

我发现很多关于在给定提交中添加和删除多少行的问题......在我看来,许多答案也是最好的答案:https://gist.github.com/KOGI/8700277

然而,没有人对给定点的文件总行数感兴趣 - 提交。 这是可能的还是我看错了?

理想情况下,我希望:

  • 在文件X上添加的行数
  • 文件X上删除的行数
  • 文件X的总行数

我需要这些信息来获取一些指标,并对产品随时间变化的方式进行统计分析。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果你在Linux上或安装了Cygwin,你可以git checkout myfile然后运行wc -l myfile

答案 1 :(得分:0)

对于统计分析,您可以查看以下步骤 -

您可以使用git log和一些shell-fu

git log --shortstat --author "Aviv Ben-Yosef" --since "2 weeks ago" --until "1 week ago" 
    | grep "files\? changed" 
    | awk '{files+=$1; inserted+=$4; deleted+=$6} END 
           {print "files changed", files, "lines inserted:", inserted, "lines deleted:", deleted}'

说明:git log --shortstat显示有关每次提交的简短统计信息,其中包括已更改的文件数,已插入和已删除的行数。然后,我们可以针对特定提交者(--author "Your Name")和时间范围(--since "2 weeks ago" --until "1 week ago")对其进行过滤。

现在,为了实际总结统计信息而不是查看每次提交的条目,我们会执行一些shell脚本来完成它。首先,我们使用grep仅过滤带有差异的线条。这些行看起来像这样:

 8 files changed, 169 insertions(+), 81 deletions(-)

或者这个:

 1 file changed, 4 insertions(+), 4 deletions(-)

然后我们使用awk对这些进行求和:对于每一行,我们添加更改的文件(第一个单词),插入的行(第四个单词)和删除的行(第六个单词),然后在将它们全部加起来后打印出来。

以下命令的输出应该相当容易发送到脚本以添加总计:

git log --author="<authorname>" --oneline --shortstat

这为当前HEAD上的所有提交提供了统计信息。如果您想在其他分支中添加统计信息,则必须将它们作为git log的参数提供。

对于传递给脚本,甚至可以使用空日志格式删除“oneline”格式,并且如JakubNarębski所评论,--numstat是另一种选择。它生成每个文件而不是每行统计信息,但更容易解析。

git log --author="<authorname>" --pretty=tformat: --numstat

我们还有一个替补 -

您可以使用Gitstats生成统计信息。它有一个'作者'部分,其中包括前20位作者添加/删除的行数(按提交计数排名前20位)。

修改:还有Git: Blame Statistics