GitHub Checkout Action恢复文件修改时间

# 从私有代码库自动部署Hexo站到GitHub Pages, 我们用GitHub Action实现了自动化部署Hexo站。但还存在一个问题,在每次部署后所有文章的修改时间都变成了当前时间,而非实际的修改时间。这样的问题在于所有历史文章在每次部署之后都会发生变化,会让搜索引擎误认为这个网站时常改动。

经过分析发现,Hexo正是使用文件修改时间作为文章的最后编辑时间,但 git从设计上就不保留文件的修改时间 。在checkout之后,所有markdown文件的修改时间都变成了当前时间。

因此,我们需要借助第三方工具 git-restore-mtime 来恢复文件的修改时间。

git-restore-mtime 是一个GitHub Workflow Action,基于git日志中每个文件最后一次commit时间来恢复文件修改时间。

虽然文档上的示例看起来挺复杂,实际使用挺简单,只需要在checkout action之后增加一个新的step即可:

- name: Restore Timestamps
  uses: chetan/git-restore-mtime-action@v1

但测试发现并不好使,原因在于git-restore-mtime 要使用reflog来找到文件的修改时间。但默认的checkout action只会checkout最后一个commit,而非完整的历史。所以需要修改checkout action让它拉取完整的历史,增加fetch-depth: 0:

...
- name: Checkout
  uses: actions/checkout@v3.0.0
  with:
	token: ${{ secrets.MYPAT }}
	submodules: 'true'
	persist-credentials: false
	fetch-depth: 0

- name: Restore Timestamps
  uses: chetan/git-restore-mtime-action@v1
...

大功告成,Hexo文章的修改时间全都正确了。