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