1

这是我用来对帖子进行排序的解决方案last-modified-date按修改日期而不是发布日期对 Jekyll 帖子进行排序?

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 来托管网站。

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

4

2 回答 2

4

免责声明:我为 netlify 工作。

这里真正的问题是 git。它不存储文件的时间戳,因此如果您在本地开发机器上使用“git clone”将文件检出到空目录(而不是在已经存在的存储库中),并从那里构建,您会获得相同的结果 - “立即”创建的所有文件和使用当前配置进行排序后的文件与您创建它们的顺序不同。

如何解决这个问题?您的配置mtime在文件系统上用于订购帖子,只要您从不返回并更改旧帖子(“哎呀,我的第一篇帖子中的错字,需要编辑......哦,现在这是我的最新帖子?”)或使用 git 来存储您的文件,并期望结帐会保留该顺序。所以 - 出于至少两个原因,这似乎是一种不好的排序方式,所以我会寻求其他一些排序选项。

从 Jekyll 文档看来,如果您以他们推荐的格式命名它们,他们会根据帖子拼贴进行一些排序,但谁想要一个名为 title-31-03-2018.md 的帖子?date根据this doc ,似乎对帖子进行排序的正确方法是在frontmatter中包含一个other-optional :

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

...这将允许您进行排序post.date- 您现在已经指定并且可以承受任何数量的原始格式的编辑和传输 - 而不是变化无常的mtime. 这将与 Git 一起工作得很好,尽管如果它还没有存在的话,你必须在你所有的 frontmatter 中放置一个日期。听起来这种努力是合理的,因为您对可靠的日期排序感到非常兴奋。这是面向未来和 gitproof 的,并且将适用于任何托管服务以及一旦硬盘驱动器发生故障就必须从 git 恢复的新笔记本电脑。

于 2018-01-24T16:37:11.833 回答
0

Netlify使用 Docker 容器构建基于 Git 的存储库,该容器本质上包含给定提交中索引的存储库状态

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

于 2018-01-20T16:56:32.900 回答