Подтвердить что ты не робот

Как показать дату изменения файла в Jekyll?

Я знаю, что я могу указать переменную date в фронте файла YAML файла и получить доступ к его значению с помощью {{ page.date }}. Это громоздко, поскольку легко забыть изменить дату обновления файла. Итак, как я могу получить доступ к дате изменения файла?

4b9b3361

Ответ 1

Это относительно новый плагин, который делает то, что вы ищете:

https://github.com/gjtorikian/jekyll-last-modified-at

(нашел его при поиске в Google альтернатив другим ответам в этом потоке)

Ответ 2

Из Jekyll 1.x существует page.path, который дает вам имя файла сообщения или страницы, которые в настоящее время обрабатываются. Добавьте следующий фильтр (место, например, в _plugins/myfilters.rb), чтобы получить время модификации данного имени файла:

module Jekyll
  module MyFilters
    def file_date(input)
      File.mtime(input)
    end
  end
end

Liquid::Template.register_filter(Jekyll::MyFilters)

Итак, теперь вы можете отображать дату на своих страницах и страницах, например,

{{ page.path | file_date | date_to_string }}

Ответ 3

На основании сообщения krlmlr я написал pre-commit script для обновления времени модификации поля date: в элементе управления YAML измененных файлов.

#!/bin/sh
# Contents of .git/hooks/pre-commit

git diff --cached --name-status | grep "^M" | while read a b; do
  cat $b | sed "/---.*/,/---.*/s/^date:.*$/date: $(date -u "+%Y-%m-%d %T %Z")/" > tmp
  mv tmp $b
  git add $b
done

Он отлично работает для меня. Фактически я использую поле update: для указания времени изменения и date:, чтобы указать время создания.

Ответ 4

Я не думаю, что это можно сделать без использования линейки YAML. Обратите внимание, однако, что указание date в фронте на самом деле переопределяет date, указанное в имени файла сообщения.

Итак, если у вас есть файл 2013-02-19-my-post.md, а в его frontmatter у вас есть date: 2013-02-20, фронтмасс имеет приоритет, а дата публикации 2013-02-20.

Если вы хотите отслеживать, когда сообщение было изменено, я боюсь, что нет никакого способа сделать это, не используя настраиваемое поле в вашем фронте. Назовите его modified-date или что-то еще. Да, это немного утомительно. У меня есть фрагмент TextExpander, который автоматически выводит текущую дату/время в нужном формате, что удобно.

Ответ 5

Если вы используете Git, вы можете установить крюк pre-commit, который автоматически обновляет поле даты в переднем деле измененных файлов. Я был очень удивлен, узнав, что крюк pre-commit действительно может изменить содержимое фиксации! Вам нужно только вручную установить привязку pre-commit к каждому клону репозитория - для меня будет обновлен общий черновик всего проекта:

#!/bin/sh
# Contents of .git/hooks/pre-commit

set -e
set -x

sed -i "s/^date:.*$/date: $(TZ=UTC date "+%Y-%m-%d %H:%M:%S %Z")/" _config.yml
git add _config.yml

Ожидается, что в _config.yml будет поле "дата", его содержимое будет заменено каждым фиксацией. Доступ к нему можно получить через {{ site.date }}. Пример:

date: 2015-04-10 10:51:37 UTC

script можно обобщить, чтобы обновлять только те страницы или сообщения, которые изменились (запрос через git diff-index --cached). У меня нет времени для его реализации, но мне было бы интересно узнать, решение со временем выскочит.