You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jekyll部署至GitHub Pages后File.mtime显示提交时间而非修改时间

问题解决:Jekyll本地显示正确最后修改日期,GitHub Pages显示提交时间

核心原因

你的问题大概率是GitHub Pages自动构建覆盖了本地构建结果,或是File.mtime依赖本地文件系统时间导致跨环境不一致:

  • 若你将GitHub Pages源设置为master分支,GitHub会在服务器上重新运行Jekyll构建,此时File.mtime读取的是文件在Git仓库中的最后提交时间(而非本地修改时间)。
  • 若你用pre-push钩子推送静态文件到gh-pages分支,但未正确配置GitHub Pages源,GitHub仍会自动构建,导致日期被替换。

解决方案

1. 修正GitHub Pages配置

  • 进入仓库Settings → Pages页面
  • 将Source设置为gh-pages分支,路径选择/(root)
  • 确保未启用GitHub Actions自动构建(若有),避免覆盖本地构建的静态文件

2. 确保pre-push钩子正常执行

  • 给钩子添加执行权限:
    chmod +x .git/hooks/pre-push
    
  • 手动执行钩子验证流程:在master分支运行.git/hooks/pre-push,切换到gh-pages分支查看静态文件的HTML源码,确认last_modified_date是本地修改时间

3. 替换为Git提交记录获取时间(更可靠)

File.mtime依赖本地文件系统,跨环境易出问题,改用Git提交历史获取最后修改时间,本地和线上结果一致:
修改你的Jekyll钩子代码为:

Jekyll::Hooks.register :site, :pre_render do |site|
    site.collections['notes'].docs.each do |note|
        # 获取文件最后一次Git提交的时间
        last_commit_time = `git log -1 --format="%ad" --date=iso "#{note.path}"`.strip
        unless last_commit_time.empty?
            note.data['last_modified_date'] = DateTime.parse(last_commit_time)
        end
    end
end

4. 禁用GitHub自动构建(可选)

若需用master分支托管静态文件,在仓库根目录创建.nojekyll文件,让GitHub跳过Jekyll自动构建,直接托管静态内容。

内容的提问来源于stack exchange,提问作者krarpit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 14:30:24