【问题标题】:Deploying Jekyll to Github Pages将 Jekyll 部署到 Github 页面
【发布时间】:2013-02-19 11:22:09
【问题描述】:

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

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

我很难通过文档来解决这个问题,如果有任何帮助,我将不胜感激,谢谢!

【问题讨论】:

    标签: github jekyll github-pages


    【解决方案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 添加。 (你现在应该在 master/_site 分支)
    10. git 提交
    11. git 推送

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

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

    【讨论】:

      【解决方案2】:

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

      gem install jgd
      jgd
      

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

      本帖详细解释机制:http://www.yegor256.com/2014/06/24/jekyll-github-deploy.html

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

          【解决方案4】:

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

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

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

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

          【讨论】:

            【解决方案5】:

            您希望做的与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时,它会将_deploy的内容复制到分支gh-pages并提交.就个人而言,我非常喜欢这个过程,但我还没有在我的 Jekyll 站点中实现它。

            【讨论】:

              猜你喜欢
              • 2015-04-08
              • 1970-01-01
              • 2020-08-10
              • 2017-08-19
              • 2021-05-17
              • 2016-02-05
              • 1970-01-01
              • 2021-05-13
              • 1970-01-01
              相关资源
              最近更新 更多