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

72qzrwbm  于 2022-12-17  发布在  Git
关注(0)|答案(3)|浏览(161)

我想得到一组给定文件在git仓库历史中的行数,为了得到当前工作副本的行数,我可以调用wc -l $FILES,但是如何得到每次提交的时间戳来生成文件增长和收缩的图表呢?

1mrurvl1

1mrurvl11#

我建议使用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

您需要对这些数据进行一些解析,以获得您想要的信息,但我相信这就是您所要求的信息。

iezvtpos

iezvtpos2#

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

tzdcorbm3#

@Stas采用的方法很有用,但是它会检查每个修订版本,并计算本地git工作副本中的行数。我将其进一步修改,使其完全不接触工作副本;我还修复了它的输出分号分隔的输出,可以很容易地导入到Excel或类似的。
注意:我的版本被限制为一个单个文件。如果你需要多个文件的数据,只需用不同的FILE多次运行它。
命令如下:

FILE=README.md; git rev-list --reverse HEAD $FILE | xargs -I '{}' sh -c 'TIME=$(git log -1 --pretty=%ci {}); LENGTH=$(git show {}:$FILE | wc -l); echo $TIME,$LENGTH'

这将为您提供如下输出:

2019-02-06 13:51:53 +0200,40
2019-02-06 16:01:13 +0200,40
2019-03-14 13:42:45 +0200,40
2019-03-14 14:48:37 +0200,40
2019-03-19 12:11:54 +0200,40
2019-04-02 13:31:43 +0300,39
2019-04-30 08:51:15 +0300,39
2019-05-08 16:37:01 +0300,39
2019-06-04 09:49:13 +0300,39
2019-06-28 14:51:38 +0300,41
2019-09-24 12:59:35 +0300,41
2019-09-30 11:21:54 +0300,41
2019-11-04 11:13:28 +0200,42
2019-11-15 10:35:17 +0200,42
2019-11-27 14:36:08 +0200,42
2020-03-12 14:56:51 +0200,43
2020-04-24 09:46:58 +0300,43
2020-05-05 12:26:34 +0300,43
2020-05-25 12:57:20 +0300,43
2020-06-04 11:19:41 +0300,43
2020-08-03 10:20:58 +0300,43
2021-02-15 11:22:22 +0200,50
2021-02-26 16:17:09 +0200,50
2021-03-10 09:31:10 +0200,50
2021-03-10 15:44:40 +0200,50
2021-05-21 08:21:48 +0300,50
2021-05-24 10:10:31 +0000,50
2021-05-25 12:34:20 +0000,50
2021-05-28 11:51:27 +0300,50
2021-08-17 10:38:43 +0300,50
2021-10-14 06:49:05 +0000,53
2021-10-14 06:51:33 +0000,53
2021-10-14 09:11:45 +0000,53
2021-10-19 12:33:18 +0300,53
2021-10-19 12:57:48 +0300,53
2021-10-27 13:34:38 +0300,53
2022-01-27 12:55:09 +0000,53
2022-01-28 08:03:25 +0000,53
2022-02-25 11:43:10 +0000,53
2022-02-28 10:38:44 +0000,53
2022-03-30 10:48:26 +0000,53
2022-04-21 05:45:41 +0000,53
2022-04-21 12:37:01 +0000,53
2022-05-10 11:34:18 +0000,53
2022-10-06 10:10:47 +0000,53

相关问题