我正在使用jekyll直接在Github上的gh-pages分支上发布静态站点。我遇到的问题是每次运行
$ 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,但这似乎比我现在做的更多步骤。
有更好的方法可以做到这一点,或者我错过了什么。
答案 0 :(得分:9)
gh-pages
用于项目页面,例如user.github.io/pumpkin
master
用于用户页面,例如user.github.io
我使用a script进行发布
# 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 :(得分:1)
Jekyll有一个名为keep_files
的配置数组。当Jekyll重建网站时,该数组中的所有内容都将被保留。
这是添加的地方:https://github.com/mojombo/jekyll/pull/630。搜索keep_files
的问题将揭示更多的黑魔法。
.git和.svn文件默认添加到keep_files
,所以这不应该是一个问题。
答案 2 :(得分:0)
我使用Steven Penny的脚本来编写这个,开箱即用的是Project Pages,而不是用户页面。
#!/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
答案 3 :(得分:0)
我使用以下shell脚本提交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"