git ls文件按修改时间排序

git ls文件按修改时间排序,git,sorting,Git,Sorting,如何列出按修改时间排序的文件 我想要的是git修改时间,而不是系统修改时间。例如,如果我有一个(已提交的)文件README,那么 touch README 将更改系统修改时间。。。但git的地位将保持不变 如果我尝试 git ls-files -z | xargs -0 ls -t 这将按系统修改时间进行排序 是否有任何选项可以git ls files列出按git修改时间排序的文件 是否有任何选项可以git ls files列出按排序的文件 他们的git修改时间 我不这么认为。一种可能的方

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

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

touch README
将更改系统修改时间。。。但git的地位将保持不变

如果我尝试

git ls-files -z | xargs -0 ls  -t
这将按系统修改时间进行排序

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

是否有任何选项可以
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

读取文件时
;do echo$(git log--pretty=格式:%ad-n1--date=raw--$file)$file;完成<我可以使用以下命令对文件夹中的文件进行排序

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

最简单最快的可能是

git diff-index      --name-only --diff-filter=A @
git log --pretty='' --name-only | awk '!seen[$0]++'
它将首先列出所有新跟踪的文件,然后列出历史上最近接触的所有文件。它仍然会列出在当前签出中已删除的历史文件,但似乎不值得如此复杂地删除这些文件。

最佳答案是:


这不会显示所有文件,但它确实可以让您快速了解按查找顺序更改的内容:

git log --name-only

我需要按创建时间排序,所以这样修改它,我认为它是有效的:
gitls files-z--“${dir}”xargs-0-n1-I{}--sh-c'git log-1--format=“%at{}”{}tail-1'| sort | cut d”“-f2-
在Mac上运行该命令,我得到
致命:空字符串不是有效的路径规范。请使用。相反,如果你想匹配所有路径,这是最好的,因为它(a)显示人类可读的时间戳,不像上面devnull的答案,(b)显示一般的时间戳,也不仅仅是最新的,不像上面datinc和thill的答案。
git log--pretty=''--name only | awk'!Seed[$0]+'
绝对是最快的,但不幸的是它缺少了修改时间戳的非常有用的上下文。@ijoseph
git log--第一个父级--pretty=%cd--name status | awk'NF==1{date=$1}NF>1&!已看到[$2]+{print date,$0}'FS=$'\t'
您是向导吗?太棒了。@ijoseph不,那是面包和黄油的东西。
git log --name-only