假设我们在一个包含多个文件夹和文件的 git 存储库中。我希望以人类可读格式 获得存储库中所有文件 的列表及其最近的修改时间戳。
列表应按此修改时间戳排序。
关于如何处理这个问题有什么想法吗?
我假设 git ls-files
可以用于此但还没有找到解决他的问题的好方法。
更简单的问题:
假设我们只想对存储库中给定目录下的当前分支当前可访问的文件执行相同的操作。
一些相关的线程和解决方案:
- git ls-files sort by modification time (仅当前文件夹下的文件,但日期时间输出不是人类可读的格式)
最佳答案
列出存储库中所有文件的需求是雄心勃勃的。从所有引用或仅从 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
关于git - 按最近修改日期 (git) 以人类可读格式排序的文件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37953719/