Настройка развёртывания jekyll на Github Pages при использвание плагинов отключаемых директивой --safe
Мне очень нравится markdown. И мне очень бы хотелось писать статьи именно в нём, в своём удобном редакторе кода. На данный момент этот редактор PhpStorm + IdeaVim. Хранения статей в репозитории на Github тоже очень комфортная вещь. Поэтому в качестве движка блога я выбрал Jekyll, раз его предлагает использовать Github Pages. Хотя Ruby и не нативный язык для моих проектов, для меня это не является минусом при выборе.
Знакомство с Jekyll прошло довольно быстро. И я остался доволен. За исключением одного момента - это плагины, которые Github Pages не поддерживают. Эти плагины будут игнорироваться при сборке сайта с директивой –safe.
А хочется хранить в репозитории только исходники сайта.
Вот прямо не иметь собранного сайта в репозитории не получится, но можно разделить исходники и готовую версию сайта в разные ветки. Несколько лет назад люди уже придумали такое решение.
Тут предлагается иметь две ветки в репозитории: source и master. Github Pages использует master для отображения сайта на *.github.io, а ветку source можно установить по умолчанию в настройках репозитория на github.com .
Для удобства работы с двумя ветками предлагается использовать скрипт, который переносит собранный сайт в ветку master и отправляет изменения на сервер. Команд из приведённого примера мне показалось недостаточно, поэтому я немного его расширил. Примечание: я работаю в окружении Windows.
Исходники сайта должны храниться в ветке source. Сейчас рабочая копия находится в этой ветке. Итак произвожу нужные действия с сайтом, отлаживаю его. Выполняю commit.
Запускаю скрипт git-publish-io.bat.
:: Собирает наш сайт
call jekyll build
:: Удяляет ветку master
git branch -D master
:: Создает и разворачивает новую ветку master
git checkout -b master
:: Те файлы, которые не находятся под управлением git в ветке source теперь добавляются в индекс
git add _site/*
:: Выполняется commit
git commit -m "auto commit by git-publish-io"
:: Переносит корень репозитория в папку собранного сайта
git filter-branch --subdirectory-filter _site/ -f
:: Удяляет из индекса ветки master bat-файл. Если этот файл не коммитить выше, то после filter-branch он пропадёт и выполнение скрипта прервётся
git rm -rf --cached git-publish-io.bat
:: Выполняет commit без bat-файла.
git commit -m "auto commit by git-publish-io. Remove bat file from master"
:: Возврящает рабочую копию в ветку source
git checkout -f source
:: Удаляет ветку master на Github
git push origin --delete master
:: Выполнят push всех веток на Github
git push --all origin
Таким образом на Github по умолчанию для проекта *.github.io будут видны только исходники проекта. А в ветке master всегда будут только 2 коммита с текущим состоянием собранного сайта.