按 git 时间对文件夹内容进行排序

按 git 时间对文件夹内容进行排序

我想按文件夹中的文件添加到 git 时对它们进行排序。

我在看git ls-files 按修改时间排序,但这给了我按时间排列的 git 中的所有文件。我只想要该子目录中的文件/文件夹。

例如:

some-super-ls /my/git/repo/some/sub/directory

这应该给我类似于ls但按日期时间排序的输出。是否可以?

答案1

的一个变体这个链接问题的答案根据上次提交的更改按时间倒序列出当前目录中跟踪的所有文件:

git log --pretty='' --name-only | awk '/^[^/]*$/ { if (!seen[$0]++) print }'

答案2

如果zsh是一个选项,您可以将其oe(或Oe取决于您是否想要最新到最旧或最旧到最新的排序)与返回最近提交的git log纪元时间 ( ) 的 a 一起使用。%ct

前任。

print -rl *(Noe:'REPLY=$(git log -1 --format=%ct $REPLY)':)

为了避免记住并键入命令,您可以定义一个方便的函数,例如

ct() { REPLY=$(git log -1 --format=%ct $REPLY); }

然后使用

print -rl *(Noe:ct:)

这是通过使用一个zsh 全局限定符形式oC

指定文件名称的排序方式。

尤其

oe 和 o+ 是特殊情况;它们各自后跟 shell 代码,分别按照 e glob 限定符和 + glob 限定符进行分隔。针对每个匹配的文件执行代码,参数 REPLY 设置为条目上的文件名,并将 globsort 附加到 zsh_eval_context。代码应该以某种方式修改参数 REPLY。返回时,使用参数的值而不是文件名作为要排序的字符串。


参考:

相关内容