我想得到一组给定文件在git仓库历史中的行数,为了得到当前工作副本的行数,我可以调用wc -l $FILES,但是如何得到每次提交的时间戳来生成文件增长和收缩的图表呢?
wc -l $FILES
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
您需要对这些数据进行一些解析,以获得您想要的信息,但我相信这就是您所要求的信息。
iezvtpos2#
您可以使用git rev-list HEAD来获取所有提交哈希的列表,然后对每个提交执行git checkout并执行wc -l $FILES。示例:
git rev-list HEAD
git checkout
$ 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
tzdcorbm3#
@Stas采用的方法很有用,但是它会检查每个修订版本,并计算本地git工作副本中的行数。我将其进一步修改,使其完全不接触工作副本;我还修复了它的输出分号分隔的输出,可以很容易地导入到Excel或类似的。注意:我的版本被限制为一个单个文件。如果你需要多个文件的数据,只需用不同的FILE多次运行它。命令如下:
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
型
3条答案
按热度按时间1mrurvl11#
我建议使用git log来实现您想要的。具体运行:
这将给予类似于以下内容的输出:
--numstat将给予插入的次数(第一栏)和删除使用上面的例子,pom.xml有10个插入和8个删除,other/pom.xml有0个插入和6个删除。使用空格式,您只能看到随时间变化的文件输出。您可以修改该格式以给予提交的sha1或日期或任何对您的需要有用的信息。
您需要对这些数据进行一些解析,以获得您想要的信息,但我相信这就是您所要求的信息。
iezvtpos2#
您可以使用
git rev-list HEAD
来获取所有提交哈希的列表,然后对每个提交执行git checkout
并执行wc -l $FILES
。示例:
输出:
tzdcorbm3#
@Stas采用的方法很有用,但是它会检查每个修订版本,并计算本地git工作副本中的行数。我将其进一步修改,使其完全不接触工作副本;我还修复了它的输出分号分隔的输出,可以很容易地导入到Excel或类似的。
注意:我的版本被限制为一个单个文件。如果你需要多个文件的数据,只需用不同的
FILE
多次运行它。命令如下:
这将为您提供如下输出:
型