按最近修改日期 (git) 以人类可读格式排序的文件列表

List of files sorted by their most recent modification date (git) in human readable format

假设我们在一个包含多个文件夹和文件的 git 存储库中。我希望在回购协议中获得 所有文件 的列表及其最近的 人类可读格式的修改时间戳

列表应按此修改时间戳排序

关于如何处理这个问题有什么想法吗?

我假设 git ls-files 可以用于此,但还没有找到解决他的问题的好方法。

更简单的问题:

假设我们只想对当前可在当前分支上的 given 目录下的文件执行相同的操作存储库。


一些相关的线程和关闭解决方案:

列出存储库中所有文件的需求是雄心勃勃的。从所有引用或仅从 HEAD 或仅从一个或多个特定分支可访问的所有文件?为了简化它,我假设它是 HEAD。

git log HEAD --pretty="/invert:%h" --name-only | grep -v -E "^\/invert:|^$" | sort -u | while read path;do echo $(git log -1 --pretty="%ad %h" --date=format:"%Y-%m-%d %H:%M:%S" -- "$path") $path;done | sort -u

%ad 是作者日期。如果您需要提交日期,请使用 %cd。 HEAD 可以是另一个分支或引用或修订范围。

如果是所有 refs,试试

git rev-list --all | xargs -i git log -1 {} --name-only --pretty="/invert:%h" | grep -v -E "^\/invert:|^$" | sort -u | while read path;do echo $(git log -1 --pretty="%ad %h" --date=format:"%Y-%m-%d %H:%M:%S" -- "$path") $path;done | sort -u

如果是所有分支,请尝试git rev-list --branches。如果是一些特定的分支,git rev-list --branches=<pattern>

更新:另一种获取更改文件的方法,git diff <commit>^ <commit> --name-only