如何在Git中获取一堆文件的最后提交日期?
获取Git存储库中一堆文件的最后提交日期(即,对于每个文件,更改该文件的最后提交日期)最简单的一行代码是什么如何在Git中获取一堆文件的最后提交日期?,git,Git,获取Git存储库中一堆文件的最后提交日期(即,对于每个文件,更改该文件的最后提交日期)最简单的一行代码是什么 这里的上下文是,我正在使用其他Bash命令查找一长串符合某些条件的文件,我只想将此列表导入Git命令,以获取每个文件的最后提交日期。以下命令将非常有用: git log -1 --format=%cd filename.txt 这将打印一个文件的最新更改日期。-1显示一个日志条目(最近的),而--format=%cd显示提交日期。有关选项的完整说明,请参阅文档 您应该能够轻松地对一组文
这里的上下文是,我正在使用其他Bash命令查找一长串符合某些条件的文件,我只想将此列表导入Git命令,以获取每个文件的最后提交日期。以下命令将非常有用:
git log -1 --format=%cd filename.txt
这将打印一个文件的最新更改日期。-1
显示一个日志条目(最近的),而--format=%cd
显示提交日期。有关选项的完整说明,请参阅文档
您应该能够轻松地对一组文件进行扩展。稍微扩展Greg的答案,
git log
可以在其参数中采用多个路径。然后,它将仅显示包含这些路径的提交。因此,要获取一组文件的最新提交,请执行以下操作:
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
我在shell脚本编写方面相当差劲,因此我不确定如何通过管道构造该命令,但这可能是另一个问题的一个好主题。这里有一个使用find的一行代码(为了可读性,将其分成若干行,但由于后面的反斜杠,copy–paste应该可以工作):
查找-名称“”\
-exec git log-1--format=“AAA%ai NNN”{}\\
-exec echo“{}”XXX\\
|tr\\n | sed-e's/AAA/\n/g'| sed-e's/nnnnnn//g'-e's/XXX.//g'
使用tr和sed处理过于复杂的换行符只是为了在一行中获取日期和文件名,并忽略未跟踪的文件。您必须确保没有任何文件包含这些愚蠢的标记AAA XXX NNNN。使用
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
结果按时间降序排列。要以git格式(Unix历元时间戳)获取最后一次提交日期(对于任何文件),请使用以下命令
- 命令:
git日志-1——格式=%ct filename.txt
- 结果:
1605094689
这很有帮助。是否有更好的方法将每个文件的名称附加到日期,而不是像下面这样:
for x in$(some命令);do echo$x$(git日志-1--格式=%cd$x);完成了吗?我不这么认为,因为所有的%
格式代码都是指提交而不是单个文件echo
可能是最简单的方法。值得指出的是,%ci
输出ISO(ish)格式的日期;所以你可以把它们分类。另外,%ai
输出的是作者日期,而不是提交人日期。您是否曾经创建过git别名或其他任何文件,以转储一堆文件的提交日期?我有一个包含文件和文件夹/文件等的父文件夹。我想查看上次该文件夹中的任何内容发生更改的时间。@terryfor I in target/*;DoGit日志-1——格式=%ci$i;done | sort | tail-1
是的,但这会返回所有文件提交中的最新提交,而不是每个文件的最新提交。这很有效,但遗憾的是在TravisCI环境中不起作用。TravisCI克隆回购时,所有文件日期都是克隆的日期和时间(今天/现在),而不是回购中的日期和时间。非常令人沮丧。如果其他人对此感兴趣,我会在这里向TravisCI记录一个问题>
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