目录

解决Hugo文章路径含中文时无法获取GitInfo的问题

为了偷懒不用每篇文章都手动设置修改时间,我尝试使用 Hugo 内置的读取 GitInfo 的功能,在 lastmod 属性为空的情况下自动读取 git commit date 作为 lastmod 属性。

初步尝试

根据官方文档,在 toml 配置文件中设置好了参数。

1
2
3
enableGitInfo = true
[frontmatter]
lastmod = ['lastmod', ':default']

生成网页后,却发现文章里显示的修改时间与文章发布时间相同,手动在文章属性里指定 lastmod 属性后才正确显示了修改时间。Hugo 没有正确读取到 git commit 的时间。

尝试生成时指定使用 git date,看看能不能解决问题,修改了一下网页生成模板,放入 {{ .GitInfo.AuthorDate }} 代码。结果在生成网页时弹出了含有以下语句的错误:

... at <.GitInfo.AuthorDate>: nil pointer evaluating *gitmap.GitInfo.AuthorDate

搜索问题

在 Google 上用相关关键词找了好久,都没有在英语圈中找到相关讨论。之后又在 Hugo 主题的 issue 中查找,终于发现了相关问题。

https://github.com/reuixiy/hugo-theme-meme/issues/27

解决

git config --global core.quotePath false

Git 设置 core.quotePathfalse 后,Hugo 能够正确获取文章的 GitInfo,使用 commit 时间作为文章修改时间输出了。

根据 Git 文档 的说明,core.quotePath 这项设置默认为 true,此时 Git 处理文件路径时,会对中文等大于0x80字节的字符进行转义,变成类似 \302\265 的样子。

而我为了方便自己浏览和整理文章源文件,所有文章的文件名都是中文的,文章目录的结构如下。Hugo 用未转码的文章路径去寻找 Git 信息里转码后的路径,自然无法对应。

1
2
3
4
├─content
│  └─posts
│      ├─日期_中文文件名文章1.md
│      └─日期_中文文件名文章2.md

至此,问题解决,可以愉快地偷懒了!

Cloudflared Pages 问题

更新