GitInfo
Syntax
Returns
The GitInfo method on a Page object returns an object with additional methods.
Hugo’s Git integration is performant, but may increase build times on large sites.
Prerequisites
Install Git, create a repository, and commit your project files.
You must also allow Hugo to access your repository. In your site configuration:
enableGitInfo: true
enableGitInfo = true
{
"enableGitInfo": true
}
Alternatively, use the command line flag when building your site:
hugo --enableGitInfoWhen you set enableGitInfo to true, or enable the feature with the command line flag, the last modification date for each content page will be the Author Date of the last commit for that file.
This is configurable. See details.
Methods
AbbreviatedHash
(string) The abbreviated commit hash.
{{ with .GitInfo }}
{{ .AbbreviatedHash }} → aab9ec0b3
{{ end }}AuthorDate
(time.Time) The author date.
{{ with .GitInfo }}
{{ .AuthorDate.Format "2006-01-02" }} → 2023-10-09
{{ end }}AuthorEmail
(string) The author’s email address, respecting gitmailmap.
{{ with .GitInfo }}
{{ .AuthorEmail }} → jsmith@example.org
{{ end }}AuthorName
(string) The author’s name, respecting gitmailmap.
{{ with .GitInfo }}
{{ .AuthorName }} → John Smith
{{ end }}CommitDate
(time.Time) The commit date.
{{ with .GitInfo }}
{{ .CommitDate.Format "2006-01-02" }} → 2023-10-09
{{ end }}Hash
(string) The commit hash.
{{ with .GitInfo }}
{{ .Hash }} → aab9ec0b31ebac916a1468c4c9c305f2bebf78d4
{{ end }}Subject
(string) The commit message subject.
{{ with .GitInfo }}
{{ .Subject }} → Add tutorials
{{ end }}Body
(string) The commit message body.
{{ with .GitInfo }}
{{ .Body }} → - Two new pages added.
{{ end }}Ancestors
(gitmap.GitInfos) A slice of file-filtered ancestor commits, if any, ordered from most recent to least recent.
For example, to list the last 5 commits:
{{ with .GitInfo }}
{{ range .Ancestors | first 5 }}
{{ .CommitDate.Format "2006-01-02" }}: {{ .Subject }}
{{ end }}
{{ end }}To reverse the order:
{{ with .GitInfo }}
{{ range .Ancestors.Reverse | first 5 }}
{{ .CommitDate.Format "2006-01-02" }}: {{ .Subject }}
{{ end }}
{{ end }}Parent
(*gitmap.GitInfo) The first file-filtered ancestor commit, if any.
Last modified date
By default, when enableGitInfo is true, the Lastmod method on a Page object returns the Git AuthorDate of the last commit that included the file.
You can change this behavior in your site configuration.
Hosting considerations
In a CI/CD environment, the step that clones your project repository must perform a deep clone. If the clone is shallow, the Git information for a given file may be inaccurate. It might incorrectly reflect the most recent repository commit, rather than the commit that actually modified the file.
While some providers perform a deep clone by default, others require you to configure the depth yourself.
| Hosting service | Default clone depth | Configurable |
|---|---|---|
| AWS Amplify | Deep | N/A |
| Cloudflare | Shallow | Yes 1 |
| DigitalOcean App Platform | Deep | N/A |
| GitHub Pages | Shallow | Yes 2 |
| GitLab Pages | Shallow | Yes 3 |
| Netlify | Deep | N/A |
| Render | Shallow | Yes 1 |
| Vercel | Shallow | Yes 1 |
To perform a deep clone when hosting on Cloudflare, Render, or Vercel, include this code in the build script after the repository has been cloned:
↩︎ ↩︎ ↩︎if [ "$(git rev-parse --is-shallow-repository)" = "true" ]; then git fetch --unshallow fiTo perform a deep clone when hosting on GitHub Pages, set
fetch-depth: 0in thecheckoutstep of the GitHub Action. See example. ↩︎To perform a deep clone when hosting on GitLab Pages, set the
GIT_DEPTHenvironment variable to0in the workflow file. See example. ↩︎
