Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Jekyll部署到Github页面_Github_Jekyll_Github Pages - Fatal编程技术网

将Jekyll部署到Github页面

将Jekyll部署到Github页面,github,jekyll,github-pages,Github,Jekyll,Github Pages,我已经用Jekyll在本地建立了一个站点,并将其推到了一个新的主repo(username.github.com),该站点运行良好。我的问题是,如何将可部署部分,即_站点目录,移动到gh pages分支中?或者更确切地说,该目录的内容(如果这是部署的最佳方式) 我计划使用自定义域。我的工作流程是在主分支(可能是一些功能分支)中工作,然后将编译的结果推(合并)到gh pages分支中。听起来对吗 我有一个艰难的时间通过文件来解决它,将感谢任何帮助,谢谢 根据问题中的详细信息,您的工作流程听起来不正

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

我计划使用自定义域。我的工作流程是在主分支(可能是一些功能分支)中工作,然后将编译的结果推(合并)到gh pages分支中。听起来对吗


我有一个艰难的时间通过文件来解决它,将感谢任何帮助,谢谢

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

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

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


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

您希望执行的操作与工作原理非常相似。让我向你解释一下你是如何做到这一点的

您希望将
\u站点
中的数据部署到分支机构
gh页面
。因此,您的第一步是将存储库
username.github.com
的默认分支设置为gh页面,而不是
master
source
(基本上是您想要的)。您现在需要做的是在
Rakefile
中编写任务,将
\u站点的内容复制到分支
gh页面
。完成后,您可以自动执行推送过程或手动执行推送过程。这样,当您推送默认分支时,GitHub将不会构建您的网站,而只是为
\u站点中的静态页面提供服务器

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

试试我的gem。您只需安装并运行:

gem install jgd
jgd
完成了!您的站点已构建并部署到
gh页面
。而且
jgd
与travis ci或任何其他ci服务器完美集成


这篇文章详细解释了这种机制:

您不想对文件夹
\u站点
中的文件进行任何更改<代码>\u站点
is were Jekyll保存它生成的静态html页面。它们将在下次Jekyll服务器重新生成站点时自动覆盖。例如,如果创建新的博客文章,服务器会看到新文件(或更新的文件),然后服务器会使用其中的新内容重新生成静态页面。这就是你的新博客文章在页面顶部的方式

\u站点
添加到
.gitignore
文件被认为是最佳做法。没有必要将该目录推送到您的repo,因为一旦它们到达github的服务器,它就会被覆盖


我认为您要做的是签出一个新分支,进行更改,然后将其合并到
gh页面
分支。

您的工作流程应该是在开发或功能分支中工作,然后只将构建的文件推送到主分支,以便Github页面提供服务

为此:

  • 开始您的
    开发
    分支,所有更改都已准备就绪,可以进行构建并投入使用
  • 在您的开发分支中运行:
    rm-rf\u站点
    (这会将旧构建的文件删除到\u站点文件夹中)
  • 运行git clone-b master“git config remote.origin.url”\u site
  • (这将为生成的文件创建一个主分支)
  • 运行
    jekyll build
    (构建您的站点)
  • cd\u站点
  • 如果您有自定义域,请执行7-8,否则请跳到步骤9
  • 触摸CNAME
  • 将自定义域添加到该CNAME文件
  • git添加。(您现在应该在master/_站点分支中)
  • git提交
  • git推送
  • 现在,只有您的构建文件应该在
    上,您的工作文件将在
    开发
    或功能分支上

    我为此挣扎了一段时间,所以如果您想使用它,请创建一个脚本: