将jekyll生成发布到gh-pages而不是覆盖_site中的.git

时间:2011-09-26 13:30:36

标签: git github jekyll

我正在使用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,但这似乎比我现在做的更多步骤。

有更好的方法可以做到这一点,或者我错过了什么。

4 个答案:

答案 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或您所在的任何分支运行脚本。
  • 使用主存储库; jekyll clobbers没关系 .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"