Hugo .GitInfo 的替代方案
警告
本文最后更新于 2021-08-06,文中内容可能已过时。
前言
今天有人问我博客页脚 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。
变通方案
除了向官方反馈此问题(可能不一定被采纳),也有另外的方法可以实现。我用了一个笨方法。符合我的理念,先能干活,再谈优化。希望有更好方法的朋友可以教教我。
- 在 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
里的字符串对应即可。
- 在
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
>
- 在
footer.html
需要显示 GitHash 的位置引用这模板:
{{ partial "githash.html" . }}
- 构建 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
......
相关文章
- RSS Can:使用 Golang Rod 解析浏览器中动态渲染的内容:(四)
- C++中冒号(:)和双冒号(::)的用法总结
- Linux虚拟化入门(一)Qemu,KVM,Virsh 概念指南
- linux下安装mysql步骤
- 使用Go语言调用OpenAI API
- 【经验】怎么在win10,win8上运行vc++6.0?
- 详细步骤讲解matlab代码通过Coder编译为c++并用vs2019调用
- 单细胞各个亚群特异性高表达基因的数据库注释(包括GO,KEGG,ReactomePA)
- git合作开发流程
- linux驱动之LED驱动
- linux驱动之获取设备树信息
- linux应用程序开发入门
- linux设备驱动编写入门
- linux网络配置
- linux安装配置交叉编译器arm-linux-gnueabi-gcc
- Linux 安装配置 tftp 服务器
- linux 安装配置NFS服务器
- MongoDB经典故障系列六:CPU利用率太高怎么办?
- 选择困难症必看!云服务器如何选择操作系统,Windows和Linux哪个更好?
- KubeFlow-Pipeline及Argo实现原理速析