我按最后修改日期对Jekyll帖子进行了排序,但Git通过用提交时覆盖它来干扰

时间:2018-01-20 15:39:43

标签: git github jekyll netlify

这是我用last-modified-date对帖子进行排序的解决方案:Sorting Jekyll posts by modification date instead of posted date?

Jekyll::Hooks.register :posts, :pre_render do |post|

# get the current post last modified time
modification_time = File.mtime( post.path )

# inject modification_time in post's datas.
post.data['last-modified-date'] = modification_time

end

在开发过程中,它完美无缺,正如所料。所有发布日期都是正确的。

如果我在部署到我的主机之前通过git它不能正常工作。所有帖子显示最后修改日期=提交日期(据我所知)。它基本上显示所有帖子都在同一时间更新。

如果我跳过git并直接在我的主机上部署该网站,它会按预期工作。

请注意,我没有使用Github Pages来托管网站。

我有什么方法可以解决这个问题吗?我希望为我的项目保留版本控制权。

2 个答案:

答案 0 :(得分:4)

免责声明:我为netlify工作。

这里真正的问题是git。它不存储文件的时间戳,所以如果你在本地开发机器上使用'git clone'来检查你的文件到一个空的目录(而不是你已经存在的存储库中),并从那里构建,那你就是获得相同的结果 - “立即”创建的所有文件和使用当前配置的后期订购与您创建它们的顺序不同。

如何解决这个问题?您的配置在文件系统上使用mtime来订购哪些帖子哪个效果很好,只要您永远不会回去更改旧帖子(“oops,在我的第一篇帖子中输入错误,需要编辑...哦,现在这是我的最新帖子?“)或使用git存储您的文件,期望结帐将保留该排序。所以 - 这似乎是一个不好的方法,至少有两个原因为你的目的排序,所以我会寻求其他一些排序选项。

它看起来像Jekyll文档,好像他们根据帖子瓷砖做了一些排序,如果你用他们推荐的格式命名但是谁想要一个名为title-31-03-2018.md的帖子?根据此文档,对帖子进行排序的正确方法似乎是在前端包含一个其他可选的date

https://jekyllrb.com/docs/frontmatter/#predefined-variables-for-posts

...这将允许您按post.date排序 - 您现在已经指定并且可以承受原始格式的任意数量的编辑和转移 - 而不是变化无常mtime。这对Git很有用,但是如果它还没有在那里你必须在你的所有前线上安排一个日期。听起来这种努力是合理的,因为你对可靠的日期排序感到非常兴奋。这是未来防御和gitproof,并将适用于任何托管服务以及您必须在硬盘驱动器发生故障后从git恢复的新笔记本电脑。

答案 1 :(得分:0)

Netlify构建Git-based repos using a Docker Container,它基本上包含在给定提交中索引的repo状态

因此,由于在每个会话中克隆了repo,因此最近创建/修改了所有文件。