Переключить тему в существующей установке Jekyll

есть много тем для Jekyll, например https://github.com/jekyll/jekyll/wiki/Themes.

Как проще всего переключиться на новую тему в существующей установке Jekyll?

5 ответов


а вы мог бы мигрируйте в существующую установку, разветвляя новую тему, а затем вручную скопируйте и вставьте такие ресурсы, как CSS, JS, HTML в _includes, _layouts и другие файлы, которые вам могут понадобиться, это, вероятно, не отличная идея, поскольку у вас в конечном итоге есть мешанина старых и новых ресурсов, которые могут быть не с тем же именем, но в сценарии, что они есть (например, вы не перезаписали старую таблицу стилей, на которую ссылаются ваши ссылки), это вызовет смешанный CSS стили, которые вам придется отлаживать и медленно исправить.

так как я предполагаю, что у вас есть установка Jekyll с Git (если вы действительно не должны), вы можете создать ветку под названием new-theme и переключитесь на эту ветку из master как работает филиал. (Простой способ иметь что-то вроде этого-просто скопировать всю установку Jekyll и вставить ее в другое место как old-Jekyll-install если вы не хотите иметь дело с ветками в Git (но на самом деле, вы должны. здесь учебник это помогло мне научиться)

  1. потяните вниз файлы для новой темы.
  2. вручную скопировать _posts и ваши индивидуальные изменения.
  3. порт за свой _config.yml вручную сравнивая их и за то, что необходимо.
  4. создайте сайт и посмотрите, что вам не хватает, что может быть испорчено (например, в прошлом вы могли бы добавить несколько <br \> теги для интервалов, и вы не хотите, чтобы в новом тема.)
  5. слияние с master (или нажмите его на производство)

это, как говорится, все это довольно ручное и боль, но, по крайней мере, вам не придется иметь дело с конфликтами в ресурсах. The минус из этого следует, что ваш репозиторий не будет синхронизирован с РЕПО темы. Таким образом, вы не получите обновления вверх по течению. Я бы все равно посоветовал вам вилки тема РЕПО, порт над вашими личными настройками для вашего сайта Jekyll, а затем переименуйте это РЕПО для производства. (это, конечно, больше не будет использовать "существующую" установку Jekyll)


это то, что я сделал, чтобы изменить тему существующей установки Jekyll. Настройте эти инструкции в соответствии с вашими потребностями.

потяните новую тему

мы создаем новую сиротскую ветвь newtheme и убедитесь, что он пуст.

git checkout --orphan newtheme
git rm -rf .
git clean -dfx

затем мы вытащим файлы темы в него, добавив тему в качестве восходящего пульта ДУ. В этом примере я вытаскиваю тему Pixyll Джона Отандера master филиала.

git remote add upstream https://github.com/johnotander/pixyll.git
git fetch upstream
git pull upstream master

построить тему и тест он.

bundler install
jekyll serve

объединить изменения

теперь мы объединяем наши сообщения, конфигурацию и т. д. Вы можете использовать Git checkout чтобы скопировать файл или папку со старого сайта Jekyll. Обратите внимание, что это перезапишет файл темы, если он существует.

git checkout master -- _posts

кроме того, вы можете скопировать файл под новым именем, например, чтобы объединить его вручную.

git show master:_config.yml > _config.yml.old

если вы случайно перезаписал файл, вы можете восстановить его.

git checkout upstream/master -- about.md

эти файлы, которые я должен был скопировать, объединить, настроить или удалить:

  • файлы Markdown в корневой папке.
  • должности в .
  • проекты .
  • на _config.yml файл конфигурации.
  • на Gemfile gem файл.
  • на CNAME файл (для страниц GitHub).
  • на Rakefile (если таковые имеются).
  • файлы favicon (если есть).
  • ручная изменений такие как Google Analytics, Disqus, SEO поля (если есть).

зафиксируйте свои изменения и не забудьте снова протестировать тему.

заменить главную ветвь

наконец-то мы заменим наши существующие master ветка с новым newtheme филиала. Предполагая, что мы на newtheme отрасли:

git checkout newtheme
git merge -s ours master
git checkout master
git merge newtheme

нажимаем изменения.

git push

и очистить местный newtheme филиала.

git branch -d newtheme

вот именно! Ты успешно заменил вашу тему. Если я что-то пропустил, или вам есть что добавить, пожалуйста, оставьте комментарий.


обновление темы

если в любой более поздний момент Вы хотите обновить тему, чтобы включить последние изменения вверх по течению, просто:

git pull upstream master

и исправить любые конфликты слияния. Здесь я предполагаю upstream remote по-прежнему установлен в репозиторий темы (вы можете проверить это с помощью git remote -v).


Jekyll v3.2 ввел темы на основе драгоценных камней (планы на будущее см. здесь):

темы на основе Gem позволяют разработчикам тем легко обновлять доступно для всех, у кого есть тема gem. Когда есть обновление, разработчики темы нажмите Обновление до RubyGems

цель темы на основе драгоценных камней, чтобы позволить вам получить все преимущества надежной, постоянно обновляемой темы, не имея все темы файлы, попадающиеся на вашем пути и чрезмерно усложняющие то, что может быть вашим основное внимание: создание контента.

установка темы на основе драгоценных камней проста:

  1. добавить тему в Gemfile вашего сайта:gem "jekyll-theme-awesome"
  2. установить тему: bundle install.
  3. добавьте на свой сайт _config.yml для активации темы: theme: jekyll-theme-awesome
  4. создать свой сайт: bundle exec jekyll serve

для переключения тем, I верю, что-то вроде этого должно работать:

  1. перейти к новой теме в Gemfile вашего сайта:gem "jekyll-theme-new"
  2. установить тему: bundle install
  3. изменить вам сайт _config.yml ссылка на новую тему: theme: jekyll-theme-new
  4. создать свой сайт: bundle exec jekyll serve
  5. (необязательно-удалите старую тему с Вашего компьютера) запишите папку установки старой темы (bundle show jekyll-theme-awesome) и удалите его с gem uninstall jekyll-theme-awesome. Чтобы быть в безопасности, сделайте уверен, что его папка действительно удалена.

обновление темы на основе драгоценных камней легко:

если у вас есть тема драгоценный камень, вы можете (если хотите) запустить bundle update чтобы обновить все драгоценные камни в вашем проекте. Или вы можете запустить bundle update <THEME>, заменяя имя темы, например minima, to просто обновите тему gem. Любые новые файлы или обновления темы разработчик сделал (например, таблицы стилей или включает в себя) будет тянуть в ваш проект автоматически.

важное замечание: на момент написания статьи GitHub pages поддерживает только конкретный набор тем на основе драгоценных камней: архитектор, Каймановы, Динки, хакер, високосный день, Мерло, полночь, Минима, минимальный, модерн, сланец, тактильные и Машина времени. Из них, похоже, только Minima ориентирована на блог (например, это единственная со встроенной поддержкой Disqus). Тем не менее, вы должны иметь возможность использовать любую тему, Если вы готовы запустите процесс сборки Jekyll самостоятельно.

Другой альтернативой является страницы GitLab (учебник, пример сайта).


С GH-страницы

Я проверили это, но я сделал это с проектом, где у меня не было ничего, что я хотел бы сохранить, и с довольно простыми темами, поэтому это может не работать так хорошо с повышенной сложностью.

  1. для безопасности создайте новую ветку

    git checkout -b newtheme

  2. а затем добавить новую тему в качестве удаленного

    git remote add new-theme-upstream https://github.com:drjekyllthemes/jekyll-minimal-theme.git git pull new-theme-upstream HEAD

  3. грязная часть, у вас будет куча конфликтов слияния. Проверьте, какие файлы имеют конфликты слияния с git status надеюсь, эти конфликты должны быть только в файлах стилей, которые вы хотите перезаписать. Если есть какие-либо файлы, которые вы хотите сохранить, вы можете редактировать их с помощью текстового редактора: git помечает изменения в файле
  4. нажмите на свой источник

    git push origin newtheme

  5. перейдите на страницу вашего проекта на github, и вы заметите что-то вроде это:
  6. создайте pull-request и объедините новые изменения.
  7. ваш проект по-прежнему будет отображаться как вилка первой темы, и вы не сможете создавать pull-запросы для восходящего потока новой темы. Но вы можете объединить новые обновления для новой темы, используя git pull new-theme-upstream

если вы не используете GH-страницы или если вы строите Jekyll локально, прежде чем нажать на github (я думаю)

вы могли храните свои темы в подмодулях git в виде отдельных папок, а затем символически связывайте ключевые элементы для jekyll. Это не работы в gh-pages пример сырой blog | +-- theme_1/ | +-- theme_2/ | | | +-- _layouts/ | +-- _layouts ln - theme_2/_layouts Таким образом, при изменении темы Темы не сталкиваются.


самый простой способ переключить тему в существующей или новой установке jekyll-использовать следующий плагин:Jekyll-remote-theme, который доступен с ноября 2017.

хотя в настоящее время он находится в бета-версии, он отлично работает, и, самое главное, он уже занесен в белый список на страницах Github, поэтому нет необходимости создавать локально, если запрошенная тема не включает неподдерживаемые драгоценные камни.

таким образом, в случае простого веб-сайта со страницами и блогом, вы можете размещать и редактировать контент непосредственно в инфраструктуре Github и переключать тему сайта, введя адрес новой удаленной темы. Дополнительным преимуществом является то, что вы можете проверить свой контент с помощью несколько существующих тем перед совершением одного из них.

в дополнение к более простому переключению метод Jekyll-remote-theme должен автоматически вводить новую версию удаленной темы, как только вы внесете изменения и появится новый версия сопровождающего темы. Если сопровождающий темы делает радикальное изменение, которое вам не нравится, вы всегда находитесь в нескольких нажатиях клавиш от новой темы.

У меня есть несколько установок jekyll, и я уже использую его, не намереваясь переключаться в краткосрочной перспективе, так как это самое элегантное и будущее доказательство решения на данный момент.

если ваша существующая установка Jekyll чиста (т. е. вы редактировали только страницы, сообщения, конфигурация), то коммутатор бесшовный. если ваша существующая тема имеет специальные макеты (например, splash.html и новый не имеет его), то ваши страницы, которые используют соответствующий макет, становятся сиротами (т. е. базовый html без специального форматирования). Я переключил существующую установку, которая была широко отредактирована, поэтому я получил несколько сиротских страниц, но я не получил никаких конфликтов слияния git, которые возможны с другими методами, обсуждаемыми здесь.