git ls-files按修改时间排序

时间:2013-10-14 14:17:09

标签: git sorting

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

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

touch README

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

如果我尝试

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

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

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

5 个答案:

答案 0 :(得分:18)

  

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

我不这么认为。一种可能的方法是迭代文件,使用git log获取时间戳,并输出sort

以下内容可能适合您:

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

答案 1 :(得分:2)

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

git ls-files -z -- "${dir}" | xargs -0 -n1 -I{} -- git log -1 --format="%at {}" {} | sort | tail -n1 | cut -d " " -f2-

答案 2 :(得分:1)

最简单,最快的可能是

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

,它将首先列出您所有新跟踪的文件,然后列出最近历史上的所有文件。它仍然会列出在当前结帐中已删除的历史文件,但是将这些杂草剔除似乎并不值得。

答案 3 :(得分:0)

最佳答案是Mikko Rantalainen上的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 

答案 4 :(得分:0)

这不会显示所有文件,但是可以让您快速了解所需顺序的更改:

git log --name-only