惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
V
V2EX
博客园 - 【当耐特】
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
量子位
MyScale Blog
MyScale Blog
Hugging Face - Blog
Hugging Face - Blog
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
月光博客
月光博客
I
InfoQ
WordPress大学
WordPress大学
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
小众软件
小众软件
罗磊的独立博客
Recent Announcements
Recent Announcements
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

eallion's Blog

春假清明自驾游 Ubuntu 25.10 安装和配置 秋假 彩礼 2025 博客变化 预制菜 联邦礼仪之一 重拾写博客的乐趣 少儿 TED - 时间管理大师 n8n 之同步博客到 Mastodon n8n 之备份 Mastodon 嘟文 如何备份 Mastodon Docker 部署 Mastodon NAS 折腾记 Windows 11 安装软件 博客排版 - 挤压中文标点符号 Hugo 博客集成 Mastodon 独立博客自省问卷 15 题 Chrome 插件更新:网址净化器 在 Hugo 中使用 Shiki 炒菜万能公式 uBlacklist 订阅合集 读《中文互联网正在加速崩塌》 CSS 和 JS 实现博客热力图 受灾小记 那,他吃什么?! Mastodon 同步到 Memos Hugo 外部链接跳转提示页面 联邦宇宙及 Mastodon 简介 2024 博客变化
Hugo .GitInfo 的替代方案
Charles Chin · 2021-08-06 · via eallion's Blog

# 前言

今天有人问我博客页脚 footer 里的 git hash 是怎么显示的,就是页面底部里的 69d6ffe 这一串数字。

他遇到了跟我一样的坑,.GitInfo 不能正确显示。

# 原因

虽然 Hugo 在很早的版本里就支持通过 enableGitInfo 开启 .GitInfo 变量,但是这个变量只对 Hugo 网站文件生效,不对 content 目录生效,具体可以参考这条 Issue 里 bep 的回复:

value will only change if the content changes, correct?

Yes, the GitInfo is used to set dates to individual files (which then is used to determine .Site.LastChange). Only the content files (e.g. .md) is considered here.

在一些 CI/CD 中为了节省时间、空间等,会加上 --depth=1 只克隆最新的一个 Commit 历史进行构建,这样就会有可能丢失掉 content 目录里的一些 .md 文件的 .GitInfo。在模板中引用 {{ .GitInfo.Hash }}footer.html)这样的变量时就不会显示。

如果去掉 --depth=1 从而进行完整克隆时,构建的文章页面,虽然会显示 {{ .GitInfo.Hash }},但显示的不是最新的 Commit hash。

# 变通方案

除了向官方反馈此问题(可能不一定被采纳),也有另外的方法可以实现。我用了一个笨方法。符合我的理念,先能干活,再谈优化。希望有更好方法的朋友可以教教我。

  1. 在 Hugo 根目录新建一个脚本 githash.sh
#!/bin/bash

hash=`git log --pretty=format:"%H" -n 1`
echo $hash
sed -i "s/69d6ffe319557706dcf4150e960e7b7e21a37d9f/$hash/g" themes/hello-friend/layouts/partials/githash.html

其中 69d6ffe319557706dcf4150e960e7b7e21a37d9f 是为了方便用脚本替换,随便写的一个字符串,与模板文件 githash.html 里的字符串对应即可。

  1. theme/layouts/partials 目录新建一个 githash.html 模板文件:
<a
    href="https://github.com/eallion/eallion.com/commit/69d6ffe319557706dcf4150e960e7b7e21a37d9f"
    target="_blank"
    rel="noopener noreferrer"
    >{{ substr "69d6ffe319557706dcf4150e960e7b7e21a37d9f" 0 7 }}</a
>
  1. footer.html 需要显示 GitHash 的位置引用这模板:
{{ partial "githash.html" . }}
  1. 构建 Hugo 前(在本地或在 CI/CD 中),先运行一次这个脚本再构建 Hugo 。
bash githash.sh
hugo --cleanDestinationDir --forceSyncStatic --gc --ignoreCache --minify --enableGitInfo

GitHub Actions Workflows:

jobs:
  build-deploy:
    runs-on: ubuntu-18.04
    steps:
    ......
      - name: Build Hugo
        run: |
+         bash githash.sh
          hugo --cleanDestinationDir --forceSyncStatic --gc --ignoreCache --minify --enableGitInfo
    ......