如何获取Git中一堆文件的最后提交date?
什么是最简单的一行来获取Git仓库中一堆文件的最后提交date(即,对于每个文件,最后一次提交的date是否改变了该文件)?
上下文是,我正在使用其他Bash命令来查找匹配一些条件的文件的长长的列表,我想只是将这个列表pipe道到Git命令来获取每个文件的最后一个提交date。
以下命令将有所帮助:
git log -1 --format=%cd filename.txt
这将打印一个文件的最新更改date。 -1
显示一个日志条目(最近的),– --format=%cd
显示提交date。 有关这些选项的完整说明,请参阅git-log
的文档。
您应该能够轻松地扩展这一组文件。
稍微扩展Greg的答案, git log
可以在其参数中采用多个path。 它将只显示包含这些path的提交。 因此,要获取最新的一组文件:
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
我在shell脚本上非常垃圾,所以我不确定如何通过pipe道来构build这个命令,但也许这是另一个问题的好主题。
下面是一个使用find的查找(分为几个可读性,但是由于反斜线的尾部,复制粘贴应该可以):
find <dirs...> -name '<pattern>' <any other predicate to get what you want> \ -exec git log -1 --format="AAA%ai NNN" '{}' \; \ -exec echo '{}' XXX \; \ | tr \\n N | sed -e 's/AAA/\n/g' | sed -e 's/NNNN/ /g' -e 's/XXX.*//g'
tr和sed过于复杂的换行只是在那里得到date和文件名在一行,并忽略未跟踪的文件。 你必须确保你的文件都没有包含那些愚蠢的标记AAA XXX NNNN。