最简单的一行程序是什么,可以获取Git仓库中一堆文件的最后提交日期(即,对于每个文件,最后一次提交更改该文件的日期)?这里的上下文是,我正在使用其他Bash命令来查找一长串符合某些条件的文件,我想将此列表导入一个Git命令,以获取每个文件的最后提交日期。
3okqufwl1#
下面的命令会很有用:
git log -1 --format=%cd filename.txt
字符串这将打印一个文件的最新更改日期。-1显示一个日志条目(最近的),--format=%cd显示提交日期。有关选项的完整描述,请参阅git-log的文档。您应该能够轻松地将其扩展为一组文件。
-1
--format=%cd
git-log
e1xvtsh32#
稍微扩展一下Greg的答案,git log可以在其参数中使用多个路径。然后它将只显示包含这些路径的提交。因此,要获取一组文件的最新提交:
git log
git log -1 --format=%cd -- fileA.txt fileB.txt fileC.txt
字符串我在shell脚本方面相当垃圾,所以我不太确定如何通过管道构造命令,但也许这是另一个问题的好主题。
vhipe2zx3#
使用git ls-files查找git文件,然后使用git log化输出。但由于git log会在同一提交时间将多个文件分组在一起,因此我更喜欢让它一次处理一个文件,然后对结果进行排序。生成的一行代码:
git ls-files
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将输出如下内容:
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
型结果按时间降序排列。
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。
ztigrdn85#
要在git中以长格式(Unix epoch timestamp)获取最后一次提交日期(对于任何文件),请使用以下命令。
*命令:git log -1 --format=%ct filename.txt*结果:1605094689注:
git log -1 --format=%ct filename.txt
1605094689
1.您可以在git项目中指定任何带有扩展名的文件沿着。1.您可以访问git-log文档以获得有关选项的更详细描述。
wlzqhblo6#
使用PowerShell(在PowerShell 7.2上测试过),你可以获取一个目录中的所有文件(可选地添加选项-Recurse),然后为每个文件运行git log。为了将每个文件与git的输出相关联,我们将两者捆绑到一个psobject中。然后我们可以按属性对它们进行排序。
-Recurse
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
型
6条答案
按热度按时间3okqufwl1#
下面的命令会很有用:
字符串
这将打印一个文件的最新更改日期。
-1
显示一个日志条目(最近的),--format=%cd
显示提交日期。有关选项的完整描述,请参阅git-log
的文档。您应该能够轻松地将其扩展为一组文件。
e1xvtsh32#
稍微扩展一下Greg的答案,
git log
可以在其参数中使用多个路径。然后它将只显示包含这些路径的提交。因此,要获取一组文件的最新提交:字符串
我在shell脚本方面相当垃圾,所以我不太确定如何通过管道构造命令,但也许这是另一个问题的好主题。
vhipe2zx3#
使用
git ls-files
查找git文件,然后使用git log
化输出。但由于git log
会在同一提交时间将多个文件分组在一起,因此我更喜欢让它一次处理一个文件,然后对结果进行排序。生成的一行代码:
字符串
如果你想把它添加到你的.bashrc中:
型
然后运行
gls
将输出如下内容:型
结果按时间降序排列。
oymdgrw74#
这里有一个使用find的一行代码(为了可读性,分成了几个,但由于尾部的反斜杠,复制粘贴应该可以工作):
字符串
使用tr和sed进行的过于复杂的换行处理只是为了在一行中获取日期和文件名,并忽略未跟踪的文件。您必须确保文件中没有包含那些愚蠢的标记AAA XXX NNNN。
ztigrdn85#
要在git中以长格式(Unix epoch timestamp)获取最后一次提交日期(对于任何文件),请使用以下命令。
*命令:
git log -1 --format=%ct filename.txt
*结果:
1605094689
注:
1.您可以在git项目中指定任何带有扩展名的文件沿着。
1.您可以访问git-log文档以获得有关选项的更详细描述。
wlzqhblo6#
使用PowerShell(在PowerShell 7.2上测试过),你可以获取一个目录中的所有文件(可选地添加选项
-Recurse
),然后为每个文件运行git log
。为了将每个文件与git的输出相关联,我们将两者捆绑到一个psobject
中。然后我们可以按属性对它们进行排序。字符串
输出如下所示:
型