我现在的博客程序用的是Hugo,并且版本Pin
在了0.68.3
,因为高版本似乎禁用了mmark
这个格式但是我现在写Katex需要它。
最近试图增加一个新的功能,是追踪文章的LastMod
更新时间,并且添加commit hash值和commit msg。
对应的代码差不多类似于,需要用到Hugo提供的.GitInfo
结构体(https://gohugo.io/variables/git/)。
{{ if and (.Site.Params.GitRepo.enable) (.GitInfo)}}
<p class="date" title="Commit: {{ .GitInfo.Subject }}">LastMod:<a href="{{ .Site.Params.GitRepo.Host }}/{{ .GitInfo.AbbreviatedHash}}">{{ $lastmod }}</a></p>
{{ else }}
<p class="date">LastMod:{{ $lastmod }}</p>
{{ end }}
获取的.GitInfo
为nil
这个功能在本地是验证通过的没问题的,上传到CI上后发现部分文章并不能获取到GitInfo
信息,调试一番以后发现其打印出来其值为Nil,但是有些文章如about.md
这种又是能够正确生成的。
初步怀疑是Cloudflare Pages
的编译环境可能有问题,换到Github Actions
以后问题依然能够稳定重现,换着花样搜索也没有头绪。
发现问题
不死心的再换着花样搜索了一下,发现一个人的提问GitInfo fails if there is an umlaut in the folder path,大概就是文件路径里有元音字母的时候获取不到.GitInfo
。
我突然意识到我获取不到.GitInfo
的文章都是中文文件名,但是我本地的git
关闭了quotepath
这个设置,因此git能正确获取到其中文名字。
在quotepath
设置打开的时候,git会尝试把所有的非ASCII字符转义并用双引号将其包裹起来,如
而关闭quotepath
的格式为
意识到这一点后,在CI的pipeline
里多添加一步指令设置git关闭quotePath
,问题就解决了,hugo也能正确获取到所有文章的Git信息了,见pages.yml