没有办法(我知道)使用标准的git命令来做到这一点。您需要的是整个存储库的某种git责备
,识别历史上更改每个文件的最后一次提交。当然,您可以使用标准的git责备
,解析瓷输出以识别向文件添加内容的最新提交的时间戳,并根据该时间戳对文件进行排序:
#!/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
但是,这种方法只能注册添加到文件中的内容,而不能从文件中删除内容。此外,当存储库中有以作者-time
开头的行时,它会中断。
提交级别的信息应该足以回答OP问题,不需要git-指责获取的那种细节。
这种方法列出了git已知的所有文件,其中包含影响文件的最后一次提交日期,按该日期排序:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( git ls-files ) | sort
可能希望限制为当前在其当前目录中签出的文件:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( find . -type f ) | sort
您可能希望仅列出文件,而不显示日期:
while read FILE
do git log --pretty="%ad $FILE" --date=iso8601-strict -1 -- "$FILE"
done < <( git ls-files ) | sort | cut -f 2 -d " "
其它组合也是可能的。
所有这些都应该适用于带有空格和其他字符的文件。
4b825dc642cb6eb9a060e54bf8d69288fbee4904是git中的空树提交。
使用--name-only您可以获取文件名,通过不打印任何内容,您可以获得提交信息的空行。通过管道输入awk NF,您可以过滤空行。通过管道输入tac,顺序颠倒了。
git log --pretty="format:" --name-only 4b825dc642cb6eb9a060e54bf8d69288fbee4904..HEAD | awk NF | tac