[英]How to get the last commit date for a bunch of files in Git?
获取 Git 存储库中一堆文件的最后提交日期的最简单的单行代码是什么(即,对于每个文件,更改该文件的最后一次提交的日期)是什么?
这样做的上下文是,我正在使用其他 Bash 命令来查找与某些条件匹配的一长串文件,我想将此列表通过管道传输到 Git 命令中以获取每个文件的最后提交日期。
以下命令会有所帮助:
git log -1 --format=%cd filename.txt
这将打印一个文件的最新更改日期。 -1
显示一个日志条目(最近的),而--format=%cd
显示提交日期。 有关选项的完整说明,请参阅git-log
的文档。
您应该能够轻松地为一组文件扩展它。
稍微扩展 Greg 的答案, git log
可以在其参数中采用多个路径。 然后它将只显示包含这些路径的提交。 因此,要获取一组文件的最新提交:
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
我在 shell 脚本方面很垃圾,所以我不确定如何通过管道构造该命令,但也许这会是另一个问题的好话题。
使用git ls-files
查找 git 文件,然后使用git log
格式化输出。 但是由于git log
在共享相同提交时间时会将多个文件组合在一起,因此我更喜欢让它一次处理一个文件,然后对结果进行排序。
结果单行:
for f in $(git ls-files); do git --no-pager log --color -1 --date=short --pretty=format:'%C(cyan)%ai%Creset' -- $f ; echo " $f"; done |sort -r
如果你想把它添加到你的 .bashrc 中:
function gls() {
for f in $(git ls-files); do git --no-pager log --color -1 --date=short --pretty=format:'%C(cyan)%ai%Creset' -- $f ; echo " $f"; done |sort -r
}
然后运行gls
将输出如下内容:
2019-09-30 11:42:40 -0400 a.c
2019-08-20 11:59:56 -0400 b.conf
2019-08-19 16:18:00 -0400 c.c
2019-08-19 16:17:51 -0400 d.pc
结果按时间降序排列。
这是一个使用 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 进行过于复杂的换行修改只是为了在一行中获取日期和文件名,并忽略未跟踪的文件。 您必须确保没有任何文件包含那些愚蠢的标记 AAA XXX NNNN。
要在 git(对于任何文件)中以长(Unix 纪元时间戳)格式获取上次提交日期,请使用以下命令。
git log -1 --format=%ct filename.txt
1605094689
笔记:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.