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

时间:2016-06-21 20:10:25

标签: git shell zsh

假设我们在一个包含多个文件夹和文件的git仓库中。我希望在repo中获取 所有文件 的列表以及人类可读格式的最新修改时间戳。

此修改时间戳应该排序列表。

有关如何处理此问题的任何想法?

我假设可以使用git ls-files,但尚未找到解决问题的好方法。

更简单的问题:

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

一些相关的主题和密切的解决方案:

1 个答案:

答案 0 :(得分:1)

列出回购中所有文件的要求是雄心勃勃的。所有文件都可以从所有参考文件或仅从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可以是另一个分支或参考或修订范围。

如果是所有参考,请尝试

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