Page

GitInfo

返回给定页面的提交元数据。

签名
PAGE.GitInfo
返回类型
*gitmap.GitInfo

Page 对象上的 GitInfo 方法可以访问 Git 历史中的提交元数据,例如作者姓名、提交哈希与提交信息。

前置条件

安装 Git,创建仓库,并提交项目文件。

你还必须允许 Hugo 访问你的仓库,在项目配置中加入:

enableGitInfo = true

作用范围

提交元数据既可用于本地仓库中存储的内容,也可用于模块提供的内容。

本地内容

Hugo 会为项目本地仓库中跟踪的文件获取提交元数据,其中包括主项目目录下由 Git 管理的所有内容文件。

模块内容

(0.157.0 新增)

Hugo 也会为模块提供的内容获取提交元数据。这样你就可以为以内容目录方式挂载的远程仓库显示提交数据,例如从多个来源聚合文档时。

方法

在 GitInfo 对象上使用这些方法。

AbbreviatedHash
(string)返回提交哈希的 7 位缩写形式。
{{ with .GitInfo }}
  {{ .AbbreviatedHash }} → aab9ec0
{{ end }}
AuthorDate
(time.Time)返回作者最初创建该提交的日期。
{{ with .GitInfo }}
  {{ .AuthorDate.Format "2006-01-02" }} → 2023-10-09
{{ end }}
AuthorEmail
(string)返回作者的电子邮箱地址,并遵循 gitmailmap。
{{ with .GitInfo }}
  {{ .AuthorEmail }} → jsmith@example.org
{{ end }}
AuthorName
(string)返回作者姓名,并遵循 gitmailmap。
{{ with .GitInfo }}
  {{ .AuthorName }} → John Smith
{{ end }}
CommitDate
(time.Time)返回该提交被应用到分支的日期。
{{ with .GitInfo }}
  {{ .CommitDate.Format "2006-01-02" }} → 2023-10-09
{{ end }}
Hash
(string)返回完整的 SHA-1 提交哈希。
{{ with .GitInfo }}
  {{ .Hash }} → aab9ec0b31ebac916a1468c4c9c305f2bebf78d4
{{ end }}
Subject
(string)返回提交信息的第一行(即摘要)。
{{ with .GitInfo }}
  {{ .Subject }} → Add tutorials
{{ end }}
Body
(string)返回提交信息的完整内容,不含摘要行。
{{ with .GitInfo }}
  {{ .Body }} → Two new pages added.
{{ end }}
Ancestors
(gitmap.GitInfos)返回该文件此前各次提交的列表,按由新到旧排序。

例如,列出最近 5 次提交:

{{ with .GitInfo }}
  {{ range .Ancestors | first 5 }}
    {{ .CommitDate.Format "2006-01-02" }}: {{ .Subject }}
  {{ end }}
{{ end }}

要反转顺序:

{{ with .GitInfo }}
  {{ range .Ancestors.Reverse | first 5 }}
    {{ .CommitDate.Format "2006-01-02" }}: {{ .Subject }}
  {{ end }}
{{ end }}
Parent
(*gitmap.GitInfo)返回该文件最近的一次祖先提交(如果有)。

最后修改日期

默认情况下,当 enableGitInfo 为 true 时,Page 对象上的 Lastmod 方法返回包含该文件的最后一次提交的 Git AuthorDate。

你可以在项目配置中改变这一行为。

托管注意事项

在 CI/CD 平台上,克隆项目仓库的步骤必须执行完整克隆(deep clone)。如果是浅克隆,某个文件的 Git 信息可能不准确:它可能错误地反映仓库最近的一次提交,而不是真正修改了该文件的那次提交。

有些服务商默认执行完整克隆,另一些则需要你自己配置克隆深度。

托管服务 默认克隆深度 可配置
AWS Amplify 完整 不适用
Cloudflare 浅 是 1
DigitalOcean App Platform 完整 不适用
GitHub Pages 浅 是 2
GitLab Pages 浅 是 3
Netlify 完整 不适用
Render 浅 是 1
Vercel 浅 是 1

  1. 在 Cloudflare、Render 或 Vercel 上托管时,要在仓库克隆完成后于构建脚本中加入以下代码,以执行完整克隆:

    if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then
      git fetch --unshallow
    fi
     ↩︎ ↩︎ ↩︎
  2. 在 GitHub Pages 上托管时,要在 GitHub Action 的 checkout 步骤中设置 fetch-depth: 0,以执行完整克隆。 ↩︎

  3. 在 GitLab Pages 上托管时,要在工作流文件中把 GIT_DEPTH 环境变量设为 0,以执行完整克隆。 ↩︎