我知道如何检索git仓库中单个文件的最后修改date:
git log -1 --format="%ad" -- path/to/file
是否有一个简单而有效的方法来对存储库中当前存在的所有文件执行相同操作?
一个简单的答案是遍历每个文件并显示其修改时间,即:
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ad" -- $filename) $filename" done
这将产生像这样的输出:
Fri Dec 23 19:01:01 2011 +0000 Config Fri Dec 23 19:01:01 2011 +0000 Makefile
很明显,你可以控制这个,因为它只是一个bash脚本在这一点上 – 所以随意定制你的心脏的内容!
这种方法也适用于包含空格的文件名:
git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format="%ai {}" {}
示例输出:
2015-11-03 10:51:16 -0500 .gitignore 2016-03-30 11:50:05 -0400 .htaccess 2015-02-18 12:20:26 -0500 .travis.yml 2016-04-29 09:19:24 +0800 2016-01-13-Atlanta.md 2016-04-29 09:29:10 +0800 2016-03-03-Elmherst.md 2016-04-29 09:41:20 +0800 2016-03-03-Milford.md 2016-04-29 08:15:19 +0800 2016-03-06-Clayton.md 2016-04-29 01:20:01 +0800 2016-03-14-Richmond.md 2016-04-29 09:49:06 +0800 3/8/2016-Clayton.md 2015-08-26 16:19:56 -0400 404.htm 2016-03-31 11:54:19 -0400 _algorithms/acls-bradycardia-algorithm.htm 2015-12-23 17:03:51 -0500 _algorithms/acls-pulseless-arrest-algorithm-asystole.htm 2016-04-11 15:00:42 -0400 _algorithms/acls-pulseless-arrest-algorithm-pea.htm 2016-03-31 11:54:19 -0400 _algorithms/acls-secondary-survey.htm 2016-03-31 11:54:19 -0400 _algorithms/acls-suspected-stroke-algorithm.htm 2016-03-31 11:54:19 -0400 _algorithms/acls-tachycardia-algorithm-stable.htm ...
输出可以通过添加| sort
按修改时间戳sorting | sort
到最后:
git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format="%ai {}" {} | sort
这是Andrew M.答案的一个小调整。 (我无法评论他的答案。)
将第一个$ filename换成双引号 ,以便支持带有embedded空格的文件名。
git ls-tree -r --name-only HEAD | while read filename; do echo "$(git log -1 --format="%ad" -- "$filename") $filename" done
示例输出:
Tue Jun 21 11:38:43 2016 -0600 subdir/this is a filename with spaces.txt
我明白,安德鲁的解决scheme(基于LS树 )与裸仓库工作! (这不适用于使用ls文件的解决scheme。)