публиковать сгенерированный jekyll на gh-страницах и не переписывать .git в _site - PullRequest
4 голосов
/ 26 сентября 2011

Я использую jekyll для публикации статического сайта прямо в ветке gh-pages в Github.У меня проблема в том, что каждый раз, когда я запускаю

$ jekyll --no-auto /Users/khinester/Sites/tzm/

, это перезаписывает каталог .git, и я должен воссоздать это:

$ git init-db
$ git add remote ..
$ git add .
$ git commit -a -m 'message'
$ git branch gh-pages && git checkout gh-pages
etc..
$ git push -f github gh-pages

в основном у меня есть основная ветвь, содержащая файлынеобходимо сгенерировать ветку blog и gh-pages, которая отображает фактический блог.

, а также обратите внимание, что мне нужно принудительно нажать эту кнопку.

было бы неплохо иметь возможность иметь версиюуправляйте обновлениями!

Я прочитал https://github.com/mojombo/jekyll/wiki/Deployment, но, похоже, у меня больше шагов, чем у меня сейчас.

Есть ли лучший способ сделать это или я пропустилчто-то.

Ответы [ 4 ]

9 голосов
/ 04 июня 2012

gh-pages для страниц проекта, например, user.github.io/pumpkin

master для страниц пользователя, например, user.github.io


Я использую скрипт для публикации

# Push source branch
git checkout source
git add -A
git commit
git push origin source

# Push master branch
jekyll
git checkout master
git rm -qr .
cp -r _site/. .
rm -r _site
git add -A
git commit
git push origin master
1 голос
/ 16 июля 2013

Jekyll имеет конфигурационный массив с именем keep_files.Все в этом массиве будет сохранено, когда Джекилл перестроит сайт.

Вот где он был добавлен: https://github.com/mojombo/jekyll/pull/630. Поиск проблем для keep_files покажет больше его черной магии.1008 * .git и .svn файлы добавляются в keep_files по умолчанию, так что это больше не должно быть проблемой.

0 голосов
/ 06 января 2016

Я использую следующий скрипт оболочки для фиксации сгенерированного Hakyll сайта (в каталоге _site) в ветке gh-pages.Сценарий:

  • Не требует переключения веток ... просто запустите сценарий из master или любой другой ветки.
  • Использует основной репозиторий;Неважно, что Джекилл забивает каталог .git, потому что ... его там нет!
  • Ничего не делает, если ничего не изменилось!
  • Распознает новые, ранее не отслеживаемые файлы (даже когданет изменений в существующих файлах)
  • Добавляет новый коммит к ветви gh-pages, поэтому вам не нужно принудительно нажимать.
  • Включает отметку временив сообщении о коммите

следует код;при необходимости обновите пути

export GIT_INDEX_FILE=$PWD/.git/index-deploy
export GIT_WORK_TREE=$PWD/_site
REF=refs/heads/gh-pages
git read-tree "$REF"
git add --all --intent-to-add
git diff --quiet && exit
git add --all
TREE=$(git write-tree)
COMMIT=$(git commit-tree "$TREE" -p "$REF" -m "snapshot $(date '+%y-%m-%d %H:%M')")
git update-ref "$REF" "$COMMIT"
0 голосов
/ 28 мая 2013

Я использовал сценарий Стивена Пенни, чтобы написать этот, который из коробки предназначен для страниц проекта, а не для страниц пользователя.

#!/bin/bash

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
cd $DIR

SELF=`basename $0`
SOURCE_BRANCH="master"
DEST_BRANCH="gh-pages"
TMP_DIR="tmp"

git checkout $SOURCE_BRANCH
jekyll build -d $TMP_DIR
git checkout $DEST_BRANCH
# This will remove previous files, which we may not want (e.g. CNAME)
# git rm -qr .
cp -r $TMP_DIR/. .
# Delete this script from the output
rm ./$SELF
rm -r $TMP_DIR
git add -A
git commit -m "Published updates"
# May not want to push straight away
# git push origin master
git checkout $SOURCE_BRANCH
...