我已经在本地与Jekyll建立了一个网站,并将其推送到一个新的主仓库(username.github.com),该网站运行良好。我的问题是,如何将只是可部署的部分_ site 目录移动到gh-pages分支中?或者更确切地说,如果这是最好的部署方式,该目录的内容?
我打算使用自定义域名。我的工作流程将在master分支中工作,也许是一些功能分支,然后将编译后的结果推送(合并)到gh-pages分支。这听起来不对吗?
我很难通过文档搞清楚,感谢任何帮助,谢谢!
答案 0 :(得分:18)
根据问题中的详细信息,您的工作流程听起来不正确。
如果您已将基于Jekyll的站点推送到username.github.io
存储库,那么您不需要gh-pages
分支。只有您希望在同一存储库中拥有代码和网站的存储库才需要gh-pages
分支。 GitHub Pages将负责为您运行Jekyll并在两种情况下为编译的站点提供服务。
GitHub Pages以非常具体的方式运行Jekyll,以确保其安全。如果您在Jekyll站点上使用自定义插件,那么您需要将已编译的站点(您提到的_site
目录)存储在主分支上,并将源存储在不同的分支中。
总而言之,您的工作流应该在本地存储库中工作 - 在master
分支或功能分支(根据需要将功能分支合并到本地master
分支) - 以及何时'准备发布,将本地存储库推送到GitHub上的master
分支。
答案 1 :(得分:3)
您希望做的与Octopress的工作方式非常相似。让我向您解释如何做这样的事情。
您希望将_site
中存在的数据部署到分支gh-pages
。因此,您的第一步是将存储库username.github.com
的默认分支设为gh-pages而不是master
或source
(基本上无论您希望它是什么)。您现在需要做的是在Rakefile
中编写将_site
的内容复制到分支gh-pages
的任务。完成后,您可以自动执行push
过程或手动执行此操作。这样,当您push
默认分支时,GitHub将不会构建您的网站,而只是服务于_site
中存在的静态页面。
如果您想了解脚本的工作原理,您应该查看Octopress中的Rakefile
。它有两个称为generate
和deploy
的任务。当您运行rake generate
时,它将运行带有参数的jekyll --no-auto
,用于将代码放入名为_deploy
的目录中,当您运行rake deploy
时,它会复制{{1}的内容分支_deploy
并进行提交。就个人而言,我喜欢这个程序,但我还没有在我的Jekyll网站上实现它。
答案 2 :(得分:3)
试试我的jgd宝石。您需要做的就是安装并运行:
gem install jgd
jgd
完成!您的网站已构建并部署到gh-pages
。此外jgd
与travis-ci或任何其他CI服务器完美集成。
这篇文章详细解释了这个机制:http://www.yegor256.com/2014/06/24/jekyll-github-deploy.html
答案 3 :(得分:1)
您不希望对文件夹_site
中的文件进行任何更改。 _site
是Jekyll保存它生成的静态html页面。下次Jekyll服务器重新生成站点时,它们将被自动覆盖。例如,如果您创建新的博客帖子,则服务器会看到新文件(或更新的文件),然后服务器会重新生成包含新内容的静态页面。这就是您的新博文位于页面顶部的方式。
最佳做法是将_site
添加到.gitignore
文件中。没有必要将该目录推送到您的仓库,因为一旦它们命中github的服务器就会被覆盖。
我认为您要做的是checkout
新分支,进行更改,然后将其合并到gh-pages
分支。
答案 4 :(得分:1)
您的工作流程应该在开发或功能分支中工作,然后仅将构建的文件推送到主分支,以便由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