没有办法(我知道)使用标准的git命令来做到这一点.您需要的是git blame整个存储库的某种类型,标识历史记录中最后一次更改每个文件的提交.当然,您可以使用标准git blame,解析瓷器输出以识别最新提交的时间戳,该时间戳将内容添加到文件中,并根据该时间戳对文件进行排序:
#!/bin/bash
function last-modified()
{
git blame -p "$1" | awk '
BEGIN {
print 0;
}
$1 == "author-time" {
print $2;
}' | sort -n | tail -n 1
}
function list-files()
{
for file in $(git ls-files); do
echo "$(last-modified $file) $file"
done
}
list-files | sort -n
Run Code Online (Sandbox Code Playgroud)
这种方法只能注册添加到文件中的内容,但不能从文件中删除内容.此外,当存储库中有行开头时,它会中断author-time.
提交级别的信息应该足以回答 OP 问题,不需要 git-blame 获取的那种细节。
这种方法列出了 git 已知的所有文件以及影响文件的最后一次提交的日期,按该日期排序:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( git ls-files ) | sort
Run Code Online (Sandbox Code Playgroud)
人们可能希望限制当前在其当前目录中签出的文件:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( find . -type f ) | sort
Run Code Online (Sandbox Code Playgroud)
人们可能只想列出文件,而不显示日期:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( git ls-files ) | sort | cut -f 2 -d " "
Run Code Online (Sandbox Code Playgroud)
其他组合也是可能的。
所有这些都应该适用于带有空格和其他字符的文件。