Как я сказал в IRC, я бы пошел с git hook (git help hooks
)
Я взломал скрипт this
очень быстро.Поместите его в $GIT_DIR/.git/hooks/
.
. Я проверил это как хук после фиксации , отправляющий из $_origbranch
, и проверил результаты в другой ветви ($_destbranch
).
Он должен делать то, что вы хотите.Сработало нормально, так что я надеюсь, что оно подходит вам или направляет это в несколько правильном направлении.
#!/usr/bin/env bash
# executables prefix
_prefix="/usr/bin"
# git executable
_git="$_prefix/git"
# site generation executable
_generate="$_prefix/jekyll"
# options for the generator
_opts=(--no-safe --no-server --no-auto --kramdown)
# branch from which to generate site
_origbranch="master"
# branch holding the generated site
_destbranch="gh-pages"
# directory holding the generated site -- should be outside this repo
_site="$("$_prefix/mktemp" -d /tmp/_site.XXXXXXXXX)"
# the current branch
_currbranch="$(/bin/grep "^*" < <("$_git" branch) | /bin/cut -d' ' -f2)"
if [[ $_currbranch == $_origbranch ]]; then # we should generate the site
# go to root dir of the repo
cd "$("$_git" rev-parse --show-toplevel)"
# generate the site
"$_generate" ${_opts[@]} . "$_site"
# switch to branch the site will be stored
"$_git" checkout "$_destbranch"
# overwrite existing files
builtin shopt -s dotglob
/bin/cp -rf "$_site"/* .
builtin shopt -u dotglob
# add any new files
"$_git" add .
# commit all changes with a default message
"$_git" commit -a -m "updated site @ $(date +"%F %T")"
# cleanup
/bin/rm -rfv "$_site"
# return
"$_git" checkout "$_origbranch"
fi
весело провести время o /
Просто обновление, чтобы сказать, что это работает с Bash и Linux.Это может быть написано и в POSIX sh.Кроме того, я считаю, что mktemp - это только GNU-coreutils, поэтому другие системы, возможно, должны заменить это.
ПРИМЕЧАНИЕ: это работает только тогда, когда вы фиксируете в ветке, указанной в $_origbranch
.Вы можете изменить это.Я считаю, что это достаточно просто для всех.