git ls-files按修改时间排序

Vij*_*thy 13 git sorting

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

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

touch README
Run Code Online (Sandbox Code Playgroud)

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

如果我试试

git ls-files -z | xargs -0 ls  -t
Run Code Online (Sandbox Code Playgroud)

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

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

dev*_*ull 18

是否有任何选项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
Run Code Online (Sandbox Code Playgroud)


Jon*_*ham 16

最佳答案是Mikko Rantalainenserverfault上的回答:

git ls-tree -r --name-only HEAD -z | TZ=UTC xargs -0n1 -I_ git --no-pager log -1 --date=iso-local --format="%ad _" -- _ | sort 
Run Code Online (Sandbox Code Playgroud)


dat*_*inc 5

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

git ls-files -z -- "${dir}" | xargs -0 -n1 -I{} -- git log -1 --format="%at {}" {} | sort | tail -n1 | cut -d " " -f2-
Run Code Online (Sandbox Code Playgroud)


jth*_*ill 5

最简单和最快的可能是

git diff-index      --name-only --diff-filter=A @
git log --pretty='' --name-only | awk '!seen[$0]++'
Run Code Online (Sandbox Code Playgroud)

这将首先列出所有新跟踪的文件,然后首先列出历史记录中最近访问的所有文件。它仍会列出在当前结帐中已删除的历史文件,但似乎很难将其清除掉。

  • @ijoseph`git log --first-parent --pretty=%cd --name-status | awk 'NF==1{date=$1}NF&gt;1 &amp;&amp; !seen[$2]++{打印日期,$0}' FS=$'\t'` (4认同)