如何在Git中获取一堆文件的最后提交日期?

8dtrkrch  于 5个月前  发布在  Git
关注(0)|答案(6)|浏览(62)

最简单的一行程序是什么,可以获取Git仓库中一堆文件的最后提交日期(即,对于每个文件,最后一次提交更改该文件的日期)?
这里的上下文是,我正在使用其他Bash命令来查找一长串符合某些条件的文件,我想将此列表导入一个Git命令,以获取每个文件的最后提交日期。

3okqufwl

3okqufwl1#

下面的命令会很有用:

git log -1 --format=%cd filename.txt

字符串
这将打印一个文件的最新更改日期。-1显示一个日志条目(最近的),--format=%cd显示提交日期。有关选项的完整描述,请参阅git-log的文档。
您应该能够轻松地将其扩展为一组文件。

e1xvtsh3

e1xvtsh32#

稍微扩展一下Greg的答案,git log可以在其参数中使用多个路径。然后它将只显示包含这些路径的提交。因此,要获取一组文件的最新提交:

git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt

字符串
我在shell脚本方面相当垃圾,所以我不太确定如何通过管道构造命令,但也许这是另一个问题的好主题。

vhipe2zx

vhipe2zx3#

使用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


结果按时间降序排列。

oymdgrw7

oymdgrw74#

这里有一个使用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。

ztigrdn8

ztigrdn85#

要在git中以长格式(Unix epoch timestamp)获取最后一次提交日期(对于任何文件),请使用以下命令。

*命令:git log -1 --format=%ct filename.txt
*结果:1605094689
注:

1.您可以在git项目中指定任何带有扩展名的文件沿着。
1.您可以访问git-log文档以获得有关选项的更详细描述。

wlzqhblo

wlzqhblo6#

使用PowerShell(在PowerShell 7.2上测试过),你可以获取一个目录中的所有文件(可选地添加选项-Recurse),然后为每个文件运行git log。为了将每个文件与git的输出相关联,我们将两者捆绑到一个psobject中。然后我们可以按属性对它们进行排序。

dir "path to my dir" -File | % { New-Object psobject -Property @{Commit = (git log -1 --format='%ci %s' $_); FileName = $_.Name} } | sort Commit -desc | ft

字符串
输出如下所示:

FileName       Commit
--------       ------
file1          2023-11-30 17:22:52 -0500 commit message1
file2          2023-09-27 08:41:04 -0400 commit message2

相关问题