21

如何列出按修改时间排序的文件?

我想要 git 修改时间,而不是系统修改时间。例如,如果我有一个(提交的)文件README,那么

touch README

将更改系统修改时间...但 git 状态将保持不变。

如果我尝试

git ls-files -z | xargs -0 ls  -t

这将按系统修改时间排序。

是否有任何选项git ls-files可以列出按其 git 修改时间排序的文件?

4

5 回答 5

28

是否有任何选项git ls-files可以列出按其 git 修改时间排序的文件?

我不这么认为。一种可能的方法是遍历文件,使用 获取时间戳git logsort输出。

以下可能对您有用:

while read file; do echo $(git log --pretty=format:%ad -n 1 --date=raw -- $file) $file; done < <(git ls-tree -r --name-only HEAD) | sort -k1,1n
于 2013-10-14T14:32:58.040 回答
6

最简单和最快的可能是

git diff-index      --name-only --diff-filter=A @
git log --pretty='' --name-only | awk '!seen[$0]++'

git diff-index ...首先列出所有新跟踪的文件,然后首先git log ...列出历史记录中最近接触的所有文件(| awk ...删除重复项)。它仍会列出在当前结帐中已删除的历史文件,但将这些文件剔除似乎并不值得复杂。

于 2019-02-13T18:50:09.027 回答
5

我可以使用以下命令对文件夹中的文件进行排序

git ls-files -z -- "${dir}" | xargs -0 -n1 -I{} -- git log -1 --format="%at {}" {} | sort | tail -n1 | cut -d " " -f2-
于 2016-11-10T19:12:02.073 回答
4

最佳答案是Mikko Rantalainen on serverfault

git ls-tree -r --name-only HEAD -z | TZ=UTC xargs -0n1 -I_ git --no-pager log -1 --date=iso-local --format="%ad _" -- _ | sort 
于 2020-09-12T19:44:35.237 回答
3

这不会显示所有文件,但它确实让您快速了解您查找的顺序发生了什么变化:

git log --name-only
于 2020-11-03T17:43:02.243 回答