Git

如何檢索 Git 儲存庫中所有文件的最後修改日期

  • October 23, 2021

我知道如何檢索 Git 儲存庫中單個文件的最後修改日期:

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到末尾按修改時間戳排序:

git ls-files -z | xargs -0 -n1 -I{} -- git log -1 --format="%ai {}" {} | sort

引用自:https://serverfault.com/questions/401437