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文章的修改时间全都正确了。