我计划使用自定义域名。我的工作流程将是在主分支中工作,可能还会有一些功能分支,然后将编译结果推送(合并)到gh-pages分支。这样做正确吗?
我很难通过文档弄清楚它,感谢任何帮助,谢谢!
我计划使用自定义域名。我的工作流程将是在主分支中工作,可能还会有一些功能分支,然后将编译结果推送(合并)到gh-pages分支。这样做正确吗?
我很难通过文档弄清楚它,感谢任何帮助,谢谢!
根据您的问题细节,您的工作流似乎不正确。
如果您已将基于Jekyll的网站推送到username.github.io
存储库,则不需要gh-pages
分支。只有在想要在同一存储库中拥有代码和网站的存储库中才需要gh-pages
分支。无论哪种情况,GitHub Pages都会为您运行Jekyll并提供编译站点服务。
为了保持安全,GitHub Pages确实以非常特定的方式运行Jekyll。如果您正在使用自定义插件与Jekyll网站,请将编译的站点(您提到的_site
目录)存储在主分支上,源代码存储在另一个分支上。
总之,您的工作流程应该在本地存储库中进行-可以是主分支或功能分支(根据需要将功能分支合并到本地主分支中)-当您准备发表时,将本地存储库推送到GitHub上的主分支。
您应该在开发或功能分支上工作,然后仅将构建文件推送到主分支以便由Github Pages提供服务。
要做到这一点:
development
分支中开始,所有更改都已准备好进行构建并发布。rm -rf _site
(这将删除旧的构建文件到 _site 文件夹)git clone -b master 'git config remote.origin.url' _site
(这将为您的构建文件创建一个主分支)jekyll build
(构建您的网站)cd _site
touch CNAME
现在,只有您的构建文件应该位于 master
, 您的工作文件将位于您的development
或功能分支中!
我曾经为此苦苦挣扎,因此编写了一个脚本,如果您想使用它:https://github.com/andimiya/deploy-jekyll-gh-pages
_site
中的数据到gh-pages
分支。因此,你的第一步是将存储库username.github.com
的默认分支设置为gh-pages
,而不是master
或source
(基本上根据你的意愿)。现在你需要在Rakefile
中编写任务,将_site
的内容复制到gh-pages
分支。完成后,你可以自动化push
过程,也可以手动完成。这样,GitHub在你push
默认分支时将不会构建你的网站,而是只提供_site
中存在的静态页面。Rakefile
。它有两个被称为generate
和deploy
的任务。运行rake generate
时,它将使用参数将代码放入名为_deploy
的目录中,并在运行rake deploy
时将_deploy
的内容复制到gh-pages
分支并进行提交。个人而言,我很喜欢这个过程,但我没有在我的Jekyll网站中实现它。gem install jgd
jgd
完成了!您的站点已经构建并部署到gh-pages
。同时,jgd
与travis-ci或其他任何CI服务器完美集成。
本文详细解释了机制:http://www.yegor256.com/2014/06/24/jekyll-github-deploy.html
_site
中的任何文件。 _site
是Jekyll保存其生成的静态HTML页面的位置。下次Jekyll服务器重新生成站点时,它们将被自动覆盖。例如,如果您创建了一个新的博客文章,服务器会看到新文件(或更新的文件),然后使用其中的新内容重新生成静态页面。这就是您的新博客文章位于页面顶部的方式。_site
添加到您的.gitignore
文件中被认为是最佳实践。没有必要将该目录推送到您的repo中,因为一旦它们到达github的服务器,它们就会被覆盖。checkout
一个新分支,进行更改,然后将其合并到gh-pages
分支中。chmod +x push_ghpages.sh
之后只需运行调用该文件:
. push_ghpages.sh
当不带参数调用此脚本时,将使用“自动提交”消息进行提交。 因此,如果您想设置提交消息,请将其作为参数传递,例如:
. push_ghpages.sh "Your commit message goes here."
#! /bin/bash
# Author: kleber_germano@outlook.com
# This is a script used to automatically deploy a Jekyll website/blog with third party plugins to GitHub Pages.
BUILD_FOLDER="_site";
PUSH_FOLDER="_site_ghpages";
COMMIT_MESSAGE=$1
#Remove all the content from the "PUSH_FOLDER".
function removeAllContentFromPushFolder(){
rm -r $PUSH_FOLDER/*;
}
#Create the folder "PUSH_FOLDER".
function createFolderToPush(){
mkdir $PUSH_FOLDER
}
#Copy all the content from the folder _site to PUSH_FOLDER.
function copySiteToFolder(){
cp -r $BUILD_FOLDER/. $PUSH_FOLDER
}
#Clone only the branch "gh-pages" to the folder "PUSH_FOLDER".
function cloneGhpages(){
git clone --branch gh-pages `git config remote.origin.url` $PUSH_FOLDER
}
function prepareThePushFolder(){
if [[ -d ./$PUSH_FOLDER ]]
then
#Remove all the content from the folder "PUSH_FOLDER".
removeAllContentFromPushFolder
else
#Create the folder "PUSH_FOLDER" if it doesn't exist.
createFolderToPush
#Call the function that clone the branch "gh-pages" to the folder "PUSH_FOLDER".
cloneGhpages
#Remove any prevous content from the folder "PUSH_FOLDER".
removeAllContentFromPushFolder
fi
#Call the function that copy all the content from the folder _site to "PUSH_FOLDER".
copySiteToFolder
}
function changeDirectoryToGhpages(){
cd $PUSH_FOLDER
}
function setMessageCommit(){
if ! [ "$COMMIT_MESSAGE" ]
then
COMMIT_MESSAGE='Automatic Commit'
fi
}
function pushBranchGhpages(){
git add .
git commit -m "$COMMIT_MESSAGE"
git push
}
function changeDirectoryBack(){
cd ..
}
prepareThePushFolder
changeDirectoryToGhpages
setMessageCommit
pushBranchGhpages
changeDirectoryBack