如何显示在git历史中演变的所选文件的行数

时间:2015-10-27 11:01:25

标签: git code-metrics

我希望得到git存储库历史中一组给定文件的行数。要获取当前工作副本,我可以调用wc -l $FILES,但是如何使用时间戳为每个提交生成一个增长和缩小文件的图表?

2 个答案:

答案 0 :(得分:0)

您可以使用git rev-list HEAD获取所有提交哈希值的列表,然后为每次提交执行git checkout并执行wc -l $FILES

示例:

$ export FILES="CMakeLists.txt README.md TODO.md"
$ git rev-list --reverse HEAD | xargs -I '{}' sh -c 'git checkout {} 2>/dev/null; git log -1 --pretty=%ci; wc -l $FILES 2>/dev/null'

输出:

...
2014-12-24 01:18:34 +0400
     31 CMakeLists.txt
    126 README.md
      3 TODO.md
    160 total
2014-12-24 01:57:36 +0400
     35 CMakeLists.txt
    126 README.md
      3 TODO.md
    164 total
2014-12-24 15:04:10 +0400
     35 CMakeLists.txt
    126 README.md
      2 TODO.md
    163 total

答案 1 :(得分:0)

我建议使用git log来达到你想要的效果。专门运行:

git log --numstat --pretty=format:

这将为您提供类似于:

的输出
10     8 pom.xml
0      6 other/pom.xml

- numstat将为您提供插入次数(第一列)和删除次数(第二列)。使用上面的示例,pom.xml有10个插入和8个删除,另一个/ pom.xml有0个插入和6个删除。使用空格式,您只能看到文件随时间变化的输出。您可以使用该格式来为您提供提交的sha1或日期或任何对您的需求有用的内容。

git log --numstat --pretty=format:%ad #will give you the date
git log --numstat --pretty=format:%H  #will give you the sha1

您需要稍微解析一下这些数据才能得到您的信息,但我相信这是您要求的信息。