【问题标题】:Why put the _site-directory of a Jekyll site in .gitignore?为什么要将 Jekyll 站点的 _site 目录放在 .gitignore 中?
【发布时间】:2015-08-07 06:55:52
【问题描述】:

Jekyll 的文档告诉我,Jekyll 站点的 _site-directory 包含我在运行后创建的站点的编译版本

Jekyll build

有几篇文章建议,我将 _site-directory 包含在我的 .gitignore 文件中,因为“它只包含我网站的编译版本”。 (这就是一些文章推荐的内容。所以,我不确定我是不了解 Jekyll 的一些概念还是 Git 的一些概念。

如果 _site-directory 包含网站的编译版本,那不应该是提供最终网站的服务器上的东西吗?我确实理解您为什么将源代码放在 github 上以及如何处理它,但是对于 github 页面,Github 不是版本控制系统而是文件托管系统,文件托管系统应该托管我工作的编译版本以提供是通过 MyUsername.github.io 发给用户的吧?

我的问题是:不应该只是我部署到 Github 的 Jekyll 网站的 _site 目录,因为那应该是 github 提供给用户的编译源代码吗?那么,除了 _site-directory 之外,我不应该在 .gitignore 文件中添加任何其他内容吗?

如果我错了:编译我的网站有什么意义

Jekyll build

如果我什么都不使用编译的源代码?

【问题讨论】:

  • 我认为这里真正的困惑源于 Github 支持 Jekyll。如果您使用任何其他工具发布到 Github Pages,则必须签入 _site 才能查看结果。但是由于 Github 知道你的代码是一个 Jekyll 站点,所以它会在服务器上进行编译。

标签: github jekyll gitignore


【解决方案1】:

两种解决方案:

你不使用 Jekyll 插件(或者只使用那些 supported by github pages

只有当您需要在本地进行测试时(jekyll buildjekyll serve),您才可以构建您的网站。生成的代码(_site)不会被版本控制,因为 github 页面会从源代码生成页面。

  • 将 _site 放到 .gitignore 中
  • 将您的资源推送到 github 页面

你使用 Jekyll 插件

在这种情况下,您需要在本地构建,因为 Github 页面无法使用插件完成这项工作。

  • Jekyll 在本地构建
  • 将 _site 放到 .gitignore 中
  • 在一个分支中提交您的资源
  • 将您的 _site 提交到另一个分支

请参阅 this post 了解更多说明。

【讨论】:

  • 感谢您的回复。我知道该怎么做,但我不知道为什么。我根本没有考虑过插件。我唯一的问题是,为什么我应该编译任何东西而不使用已编译的代码?如果我把它放在 gitignore 中,我的编译代码将永远不会到达服务器(github)。那么,编译有什么意义呢?
  • @Otterfinger 这里的关键是,如果您在 GitHub Pages(没有插件)上托管,则不需要跟踪 _site,因为 GitHub Pages 会自动构建/生成来自您的源代码的站点,因此当您访问username.github.io 时,您会获得编译后的版本,它是从您在 repo 中的源代码自动生成的。
【解决方案2】:

_site 文件夹被清除,并且在每次“jekyll build”时重新生成其中的所有文件。跟踪要删除的文件似乎没有任何用处。

如果您正在考虑将您的 jekyll 站点作为项目页面 (gh-pages) git 推送到您的 github 存储库,则 _site 文件夹再次没有任何作用,因为 github 上的 jekyll 安装将根据您的文件自动为您生成 _site上传(git推送)。

_site 文件夹仅对你的 jekyll 站点的本地预览有用(通常默认在 localhost:4000 找到)。

【讨论】:

    【解决方案3】:

    我认为您感到困惑的一点是,大多数教程都讨论了至少 两个 不同的存储库。

    1. 您网站的source code,这是您拨打Jekyll build的地方
    2. 编译后的result,这是你放_site目录的内容的那个

    那么在情况 1 中忽略 _site 是有意义的。出于同样的原因,您通常会忽略编译结果:它们不应该被跟踪,因为它们可能会在每次编译之间发生变化而不更改源代码,所以你会有在每次构建后提交,尽管没有任何(可见的)改变。

    对于存储库 2。您当然必须在构建后使用存储库 1 中的 _site 的内容对其进行更新。

    话虽如此,您当然可以将 1. 和 2. 合并到一个存储库中,方法是将 master 用于 _site 的内容和另一个分支,例如source 用于带有Jekyll 构建文件的项目,这里忽略_site,然后在更改后使用其内容更新master 分支。

    【讨论】:

    • 谢谢,有帮助! :-)
    • 不确定工作流程会是什么样子。您能否概述生成新站点并将站点提交到单独的分支所涉及的命令?
    【解决方案4】:

    我相信您可能会以错误的方式看待事物,忽略 _site 是有道理的,因为每次您 jekyll build 您的 _site 被炸毁,那里的所有内容都会被删除并再次写入。

    因此,在我自己看来,您想要推送到 github 的是工作目录,因为它就在您工作的地方,并且您的所有更改都在进行版本控制……加上 github 进行编译和自动构建站点。

    话虽如此,我通常将 _site 排除在我的 gitignore 之外,因为我部署到另一个托管服务并且我的部署框架会抓取 github 存储库并从我需要 _site 的特定分支进行部署。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-05
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多