将Jekyll部署到Github Pages

时间:2013-03-05 06:38:11

标签: github jekyll github-pages

我已经在本地与Jekyll建立了一个网站,并将其推送到一个新的主仓库(username.github.com),该网站运行良好。我的问题是,如何将只是可部署的部分_ site 目录移动到gh-pages分支中?或者更确切地说,如果这是最好的部署方式,该目录的内容?

我打算使用自定义域名。我的工作流程将在master分支中工作,也许是一些功能分支,然后将编译后的结果推送(合并)到gh-pages分支。这听起来不对吗?

我很难通过文档搞清楚,感谢任何帮助,谢谢!

5 个答案:

答案 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而不是mastersource(基本上无论您希望它是什么)。您现在需要做的是在Rakefile中编写将_site的内容复制到分支gh-pages的任务。完成后,您可以自动执行push过程或手动执行此操作。这样,当您push默认分支时,GitHub将不会构建您的网站,而只是服务于_site中存在的静态页面。

如果您想了解脚本的工作原理,您应该查看Octopress中的Rakefile。它有两个称为generatedeploy的任务。当您运行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提供服务。

要做到这一点:

  1. development分支机构开始,准备好构建所有更改并立即生效。
  2. 在您的开发分支中运行:rm -rf _site(这会将旧构建的文件删除到_site文件夹)
  3. 运行git clone -b master 'git config remote.origin.url' _site(这将为您构建的文件创建一个主分支)
  4. 运行jekyll build(建立您的网站)
  5. cd _site
  6. 如果您有自定义域,请执行7-8,否则跳至步骤9
  7. touch CNAME
  8. 将您的自定义域添加到该CNAME文件
  9. git add。 (你现在应该在master / _site分支中)
  10. git commit
  11. git push
  12. 现在,只有您构建的文件应位于master,您的工作文件将位于development或功能分支上!

    我在这方面挣扎了一段时间,所以如果您想要使用它,请构建一个脚本:https://github.com/andimiya/deploy-jekyll-gh-pages