GitInfo
返回给定页面的提交元数据。
Page 对象上的 GitInfo 方法可以访问 Git 历史中的提交元数据,例如作者姓名、提交哈希与提交信息。
前置条件
安装 Git,创建仓库,并提交项目文件。
你还必须允许 Hugo 访问你的仓库,在项目配置中加入:
enableGitInfo = true作用范围
提交元数据既可用于本地仓库中存储的内容,也可用于模块提供的内容。
本地内容
Hugo 会为项目本地仓库中跟踪的文件获取提交元数据,其中包括主项目目录下由 Git 管理的所有内容文件。
模块内容
(0.157.0 新增)
Hugo 也会为模块提供的内容获取提交元数据。这样你就可以为以内容目录方式挂载的远程仓库显示提交数据,例如从多个来源聚合文档时。
方法
在 GitInfo 对象上使用这些方法。
AbbreviatedHash- (
string)返回提交哈希的 7 位缩写形式。{{ with .GitInfo }} {{ .AbbreviatedHash }} → aab9ec0 {{ end }} - (
time.Time)返回作者最初创建该提交的日期。{{ with .GitInfo }} {{ .AuthorDate.Format "2006-01-02" }} → 2023-10-09 {{ end }} - (
string)返回作者的电子邮箱地址,并遵循 gitmailmap。{{ with .GitInfo }} {{ .AuthorEmail }} → jsmith@example.org {{ end }} - (
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 |
-
在 Cloudflare、Render 或 Vercel 上托管时,要在仓库克隆完成后于构建脚本中加入以下代码,以执行完整克隆:
↩︎ ↩︎ ↩︎if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then git fetch --unshallow fi -
在 GitHub Pages 上托管时,要在 GitHub Action 的
checkout步骤中设置fetch-depth: 0,以执行完整克隆。 ↩︎ -
在 GitLab Pages 上托管时,要在工作流文件中把
GIT_DEPTH环境变量设为0,以执行完整克隆。 ↩︎