20

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

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

我很难通过文档来解决这个问题,不胜感激,谢谢!

4

5 回答 5

18

根据您问题中的详细信息,您的工作流程听起来不正确。

如果您已将基于 Jekyll 的站点推送到username.github.io存储库,则不需要gh-pages分支。gh-pages只有您希望在同一存储库中拥有代码和网站的存储库才需要分支。GitHub Pages 将为您运行 Jekyll 并在这两种情况下为编译的站点提供服务。

GitHub Pages 确实以非常特定的方式运行 Jekyll,以保证其安全。如果您在 Jekyll 站点中使用自定义插件,那么您需要将编译后的站点(_site您提到的目录)存储在 master 分支上,并将源代码存储在不同的分支中。

总而言之,您的工作流程应该在您的本地存储库中工作 - 在master分支或功能分支中(根据需要将功能分支合并到本地分支master) - 当您准备好发布时,将本地存储库推送到masterGitHub。

于 2013-03-05T22:41:24.943 回答
3

试试我的jgd宝石。您需要做的就是安装并运行:

gem install jgd
jgd

完毕!您的站点已构建并部署到gh-pages. 还jgd与 travis-ci 或任何其他 CI 服务器完美集成。

这篇文章详细解释了机制:http ://www.yegor256.com/2014/06/24/jekyll-github-deploy.html

于 2014-04-20T13:57:16.177 回答
3

您希望做的与Octopress 的工作方式非常相似。让我向您解释如何做这样的事情。

您希望将存在的数据部署_site到分支gh-pages中。因此,您的第一步是将存储库的默认分支设置为username.github.comgh-pages 而不是mastersource(基本上是您想要的)。您现在需要做的是在您的任务中编写Rakefile将内容复制_site到分支的任务gh-pages。完成后,您可以自动执行该push过程或手动执行。这样,当push您使用默认分支时,GitHub 将不会构建您的网站,而只会为_site.

如果你想了解脚本是如何工作的,你应该看看RakefileOctopress 中的 present。它有这两个称为generate和的任务deploy。当您运行rake generate时,它将jekyll --no-auto使用参数运行,用于将代码放入名为的目录_deploy中,当您运行时rake deploy,它将内容复制_deploy到分支gh-pages并提交。就个人而言,我非常喜欢这个过程,但我还没有在我的 Jekyll 站点中实现它。

于 2013-03-16T08:12:26.140 回答
3

您的工作流程应该是在开发或功能分支中工作,然后仅将构建的文件推送到您的主分支,以供 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. 混帐添加。(你现在应该在 master/_site 分支)
  10. git 提交
  11. git推送

现在,只有您构建的文件应该在master,您的工作文件将在您的development或功能分支上!

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

于 2017-06-01T01:08:45.193 回答
1

您不想对文件夹中的文件进行任何更改_site_siteJekyll 会保存它生成的静态 html 页面。下次 Jekyll 服务器重新生成站点时,它们将被自动覆盖。例如,如果您创建一个新的博客文章,服务器会看到新文件(或更新的文件),然后服务器会重新生成包含新内容的静态页面。这就是您的新博客文章位于页面顶部的方式。

_site添加到.gitignore文件中被认为是最佳实践。无需将该目录推送到您的存储库,因为一旦它们到达 github 的服务器,它就会被覆盖。

我认为您想要做的是checkout一个新分支,进行更改,然后将其合并到gh-pages分支中。

于 2015-11-23T05:32:33.837 回答