публиковать сгенерированный jekyll на gh-страницах и не перезаписывать .git в _site

Я использую 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

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

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

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

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

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


person khinester    schedule 26.09.2011    source источник
comment
я получил ответ, blog.blindgaenger.net/generate_github_pages_in_a_submodule.html   -  person khinester    schedule 26.09.2011
comment
Если это ответ, напишите его краткое изложение и разместите ссылку на него в ответе ниже. Тогда примите это. Это позволит убедиться, что другие люди знают, что вы поняли это.   -  person Alan W. Smith    schedule 20.04.2012


Ответы (3)



Для написания этого сценария я использовал сценарий Стивена Пенни, который по умолчанию предназначен для страниц проекта, а не для пользовательских страниц.

#!/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
person Aram Kocharyan    schedule 28.05.2013

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

  • Не требует переключения веток... просто запустите скрипт из master или любой другой ветки, в которой вы находитесь.
  • Использует основной репозиторий; не имеет значения, что jekyll затирает каталог .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"
person frasertweedale    schedule 06.01.2016