【问题标题】:How to show the number of lines of selected files evolving in git history如何显示 git 历史中所选文件的行数
【发布时间】:2015-10-27 11:01:24
【问题描述】:

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

【问题讨论】:

  • 你的意思是当前分支吗?

标签: git code-metrics


【解决方案1】:

我建议使用git log 来实现您想要的。具体运行:

git log --numstat --pretty=format:

这将为您提供类似于以下内容的输出:

10     8 pom.xml
0      6 other/pom.xml

--numstat 将为您提供插入(第一列)和删除(第二列)的数量。使用上面的例子,pom.xml 有 10 个插入和 8 个删除,而 other/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

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

【讨论】:

    【解决方案2】:

    您可以使用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
    

    【讨论】:

      猜你喜欢
      • 2011-07-10
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多