Git:显示Commit日期
libai 发布于 2021-10-09

在这篇短文中,我们将看到如何提取特定Git提交的日期。

使用Git获取提交日期

对于许多用例,您可以在repo的托管提供程序存储库(如GitHub)中轻松找到类似的信息,但这并不总是可行的。

在这种情况下,可以使用命令行。有许多不同的方法可以实现这一点,但现在我们将重点关注以下命令:

$ git show -s --format=%ci <commit>

在实际的存储库中使用此功能,您将获得以下内容:

$ git show -s --format=%ci d4d20c2
2021-09-28 11:13:46 -0500

您也可以省略提交哈希以获取最新提交的日期:

$ git show -s --format=%ci
2021-09-29 10:04:27 -0500

对于看似简单的任务,这里有很多事情要做。让我们把它分解,以便更好地了解发生了什么。

首先,我们使用show命令。根据手册页,此命令用于“显示各种类型的对象”。这听起来有点模糊,但它确实是这样做的。

您可以使用show命令提取关于blob、树、标记和提交的各种元数据。

因此,当您想了解有关提交的任何特定信息时,例如,这是您可能想要使用的命令。

命令中的下一个选项是-s。此选项仅抑制差异输出。如果没有此选项,show命令默认显示提交修补程序,从而使输出混乱:

$ git show --format=%ci d4d20c2
2021-09-28 11:13:46 -0500


diff --git a/routes/api.js b/routes/api.js
index d09cae0..bf6004f 100644
--- a/routes/api.js
+++ b/routes/api.js
@@ -111,7 +111,7 @@ exports.edit = async (req, res) => {
         }
 
         if (!user.hasPermission('content_edit')) {
-            response.failed('You don\'t have permission to edit this user.');
+            response.failed('You don\'t have permission to edit this content.');
             return res.json(response.done());
         }

我们从输出中获得的信息比我们所关心的要多得多,因此-s是一个有用的选项来删除此信息。

下一个选项是--format=%ci。这将准确地告诉show命令我们请求的关于对象的信息。在这种情况下,%ci指定提交人日期,特别是采用类似ISO 8601的格式。其他类似格式是RFC2822样式(%cD)或Unix时间戳(%ct)中的日期。

--format选项很重要,因为您可以在其中指定要显示的大量元数据。除了提交日期之外,以下是可以使用此命令显示的其他一些元数据示例:

  • Commit hash (%H)
  • Tree hash (%T)
  • Author name (%an)
  • Author email (%ae)
  • Subject (%s)
  • Commit notes (%N)

当然,我们命令中的最后一个参数是<commit>,这是不言自明的。这是一个可选参数,您可以在其中指定感兴趣的提交。由于show命令适用于许多不同类型的对象,因此此参数可用于指定任何受支持的对象,如标记或树。

例如,如果要指定标记,只需使用标记名而不是提交哈希:

$ git show -s --format=%ci 
2021-09-28 11:13:46 -0500

$ git show -s --format=%ci v0.1.2
tag v0.1.2
Tagger: Scott Robinson <scott@example.com>

Fix failure message when user doesn't have content_edit permission

使用日志和格式化日期提取提交日期

实际上,您可能并不关心从Git中提取这样的信息的所有不同方法,但是查看其他方法会很有帮助,因为它会让您很好地了解Git的所有功能。

格式化日期

虽然--format选项直接支持多种日期格式,但它不支持所有可能的输出日期样式。一个更通用的选项是使用--format=%cd,它返回提交者日期,同时也遵循--date=选项中提供的日期格式。可以为该选项指定相对值、本地值、默认值、iso值和其他值。

--date选项还可用于使用格式化标记指定更细粒度的日期格式:

$ git show -s --format=%cd --date=format:'%Y-%m-%d %H:%M:%S' d4d20c2
2021-09-29 10:04:27

使用格式化程序标记,您可以将日期格式化为您想要的任何形式和形状。

使用log命令

除了show命令外,我们还可以使用log命令获取提交的日期。在本例中,这是一种冗余方法,但它在其他方面也有自己的用途。

根据手册页,日志“显示提交日志”,这似乎很明显。如果您通读手册页,您会注意到show有许多重叠的功能。

主要区别在于show主要用于检查单个提交,而log则用于显示一系列提交。日志在返回和格式化提交方面还具有更多功能,如搜索/跳过/限制返回的提交消息。

要获取提交日期,我们可以使用log命令,参数与前面相同,但添加了-1:

$ git log -1 --format=%ci d4d20c2
2021-09-29 10:04:27 -0500

唯一的区别是-1参数,它告诉此命令只返回一次提交的日期信息。在这里使用-2将返回2个提交,依此类推。其余参数与显示的相同。

结论

在本文中,我们详细研究了如何使用show命令检索有关提交的元数据,特别是获取提交日期。我们还了解了如何使用它来检索许多其他信息,以及可用于类似用途的其他命令。

 

李白
关注 私信
文章
12
关注
0
粉丝
0