【问题标题】:Switch theme in an existing Jekyll installation在现有 Jekyll 安装中切换主题
【发布时间】:2015-09-28 09:25:37
【问题描述】:

Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.

在现有 Jekyll 安装中切换到新主题的最简单方法是什么?

【问题讨论】:

    标签: ruby jekyll jekyll-bootstrap


    【解决方案1】:

    使用 GH 页面

    tested this,但我在一个项目中没有任何我想保存的内容,并且主题相当简单,因此随着复杂性的增加,这可能无法很好地工作。

    1. 为了安全,新建一个分支

      git checkout -b newtheme
      
    2. 然后将新主题添加为远程

      git remote add new-theme-upstream https://github.com:drjekyllthemes/jekyll-minimal-theme.git
      git pull new-theme-upstream HEAD
      
    3. 混乱的​​部分,你会遇到一堆合并冲突。检查哪些文件与git status 有合并冲突,希望这些冲突应该只出现在您想要覆盖的样式文件中。如果您想保留任何文件,您可以使用文本编辑器对其进行编辑:git 将标记文件中的更改
    4. 推送到你的原点

      git push origin newtheme
      
    5. 转到您在 github 上的项目页面,您会看到如下内容:
    6. 创建拉取请求并合并新的更改。
    7. 您的项目仍将显示为第一个主题的分支,您将无法为新主题的上游创建拉取请求。但是您可以使用 git pull new-theme-upstream 为您的新主题合并新更新

    如果你没有使用 gh-pages 或者你在推送到 github 之前在本地构建 jekyll(我认为)

    您可以将主题保存在 git 子模块中,作为单独的文件夹,然后符号链接 jekyll 的关键元素。这不会gh-pages 粗略示例中起作用

    blog
    |
    +-- theme_1/
    |
    +-- theme_2/
    |  |
    |  +-- _layouts/
    |
    +-- _layouts ln - theme_2/_layouts
    

    这样在更改主题时主题不会发生冲突。

    【讨论】:

    • 关于你的评论,你为什么觉得你激怒了纯粹主义者?这很有趣,我对 git 的业余掌握并没有让我考虑这种方法。如果测试像你说的那样工作,那就太好了,因为它有 VCS,所以你总是可以回退,并且你明确地处理冲突。 +1
    • 我认为,因为当你进行合并时,你会遇到this situation,投票最多的答案写道:“长期的解决方案是避免你已经知道自己不好的做法。”
    【解决方案2】:

    在现有或新安装的 jekyll 中切换主题的最简单方法是使用以下插件:jekyll-remote-theme,该插件自 2017 年 11 月起可用。

    虽然它目前处于测试阶段,但它运行良好,最重要的是它已经在 Github 页面上列入白名单,因此无需在本地构建,除非请求的主题包含不受支持的 Gems。

    因此,对于带有页面和博客的简单网站,您可以直接在 Github 基础架构上托管和编辑您的内容,并通过输入新远程主题的地址来切换您的网站主题。另一个好处是,您可以在提交内容之前使用several existing themes 测试您的内容。

    除了更容易切换之外,jekyll-remote-theme 方法应该会自动引入新版本的远程主题,只要您进行更改并且有新版本主题的维护者。如果主题的维护者做出了你不喜欢的彻底改变,那么你总是离新主题只有几步之遥。

    我有几个 jekyll 安装,我已经在使用它,但不打算在短期内切换,因为它是目前最优雅和面向未来的解决方案。

    如果您现有的 jekyll 安装是纯粹的(即,您只编辑了页面、帖子、配置),那么切换是无缝的。 如果您现有的主题有特殊的布局(例如,splash.html 和新的没有它)然后您使用相应布局的页面成为孤儿(即,没有特殊格式的基本 html)。我已经切换了一个已经过广泛编辑的现有安装,所以我得到了几个孤立页面,但我没有得到任何这里讨论的其他方法可能发生的 git 合并冲突。

    【讨论】:

      【解决方案3】:

      Jekyll v3.2 介绍gem-based themes(未来计划见here):

      基于 Gem 的主题使主题开发人员可以轻松进行更新 任何拥有主题宝石的人都可以使用。有更新时, 主题开发者将更新推送到 RubyGems

      基于 gem 的主题的目标是让您获得所有好处 一个强大的,不断更新的主题,而没有所有主题的 文件挡住了你的路,让你的工作变得过于复杂 主要关注点:创建内容。

      安装基于 gem 的主题很简单:

      1. 将主题添加到您网站的 Gemfile:gem "jekyll-theme-awesome"
      2. 安装主题:bundle install
      3. 将以下内容添加到您网站的_config.yml 以激活主题:theme: jekyll-theme-awesome
      4. 建立您的网站:bundle exec jekyll serve

      要切换主题,我相信这样的事情应该可行:

      1. 在您网站的 Gemfile 中更改为新主题:gem "jekyll-theme-new"
      2. 安装主题:bundle install
      3. 更改您网站的_config.yml 以引用新主题:theme: jekyll-theme-new
      4. 建立您的网站:bundle exec jekyll serve
      5. (可选 - 从您的机器上卸载旧主题)记下旧主题的安装文件夹 (bundle show jekyll-theme-awesome) 并使用 gem uninstall jekyll-theme-awesome 卸载它。为了安全起见,请确保其文件夹确实已被删除。

      更新基于 gem 的主题很容易:

      如果你有主题 gem,你可以(如果你愿意)运行bundle update 更新项目中的所有 gem。或者你可以运行bundle update <THEME>,替换为主题名,如minima,来 只需更新主题宝石。任何新文件或更新主题 开发人员已经制作(例如样式表或包含)将被拉取 自动进入您的项目。

      重要提示:在撰写本文时,GitHub 页面仅支持 specific set of gem-based themesArchitectCaymanDinky 黑客闰日梅洛午夜Minima极简主义现代主义石板触觉时光机。其中,似乎只有 Minima 是面向博客的(例如,它是唯一一个内置 Disqus 支持的)。但是,如果您愿意run the Jekyll build process yourself,您应该可以使用任何主题。

      另一种选择是GitLab pagestutorialsample site)。

      【讨论】:

        【解决方案4】:

        这就是我为更改现有 Jekyll 安装的主题所做的。调整这些说明以满足您的需要。

        拉新主题

        我们创建一个新的孤立分支newtheme 并确保它是空的。

        git checkout --orphan newtheme
        git rm -rf .
        git clean -dfx
        

        然后我们通过将主题添加为上游远程将主题文件拉入其中。在这个例子中,我拉取了 John Otander 的 Pixyll 主题的 master 分支。

        git remote add upstream https://github.com/johnotander/pixyll.git
        git fetch upstream
        git pull upstream master
        

        构建主题并对其进行测试。

        bundler install
        jekyll serve
        

        合并您的更改

        现在我们合并我们的帖子、配置等。您可以使用 Git checkout 从旧的 Jekyll 站点复制文件或文件夹。请注意,如果存在,这将覆盖主题文件。

        git checkout master -- _posts
        

        或者,您可以使用新名称复制文件,例如手动合并。

        git show master:_config.yml > _config.yml.old
        

        如果您不小心覆盖了主题文件,您可以恢复它。

        git checkout upstream/master -- about.md
        

        这些是我必须复制、合并、调整或删除的文件:

        • 根文件夹中的 Markdown 文件。
        • _posts 文件夹中的帖子。
        • _drafts 文件夹中的草稿。
        • _config.yml 配置文件。
        • Gemfile gem 文件。
        • CNAME 文件(用于 GitHub 页面)。
        • Rakefile(如果有)。
        • 网站图标文件(如果有)。
        • 手动主题更改,例如 Google Analytics、Disqus、SEO 字段(如果有)。

        提交您的更改,不要忘记再次测试主题。

        替换主分支

        最后,我们将现有的 master 分支替换为新的 newtheme 分支。假设我们在newtheme 分支上:

        git checkout newtheme
        git merge -s ours master
        git checkout master
        git merge newtheme
        

        推送更改。

        git push
        

        并清理本地newtheme 分支。

        git branch -d newtheme
        

        就是这样!您已成功替换主题。如果有什么我遗漏的,或者你有什么要补充的,请发表评论。


        更新主题

        如果您以后想要更新主题以包含最新的上游更改,只需:

        git pull upstream master
        

        并修复任何合并冲突。这里我假设upstream 远程仍然设置为主题的存储库(您可以使用git remote -v 进行检查)。

        【讨论】:

        • 这是一个很好的答案,我使用概述的步骤成功地将我的 jekyll 网站移动到了新主题。
        • 这是一个写得非常好、详细的答案。这种方法对我来说非常有效。谢谢。
        • 您好,感谢您的详细解答。但是,我无法用新的newthem 替换我们现有的master 分支。 git merge -s ours master 命令给了我错误fatal: refusing to merge unrelated historiesgit merge -s ours master --allow-unrelated-histories 给了我Merge with strategy ours failed.
        • @nurandi,有同样的错误信息。检查 master 分支中是否有任何文件未在 newtheme 分支中被覆盖。
        【解决方案5】:

        虽然您可以通过分叉新主题迁移到现有安装,然后手动复制和粘贴 _includes_layouts 和其他文件中的 CSS、JS、HTML 等资源可能需要,这可能不是一个好主意,因为您最终会混合旧资源和新资源,这些资源可能名称不同,但在它们相同的情况下(例如,您没有覆盖您的帖子引用的旧样式表),它会导致您必须调试并慢慢修复的混淆 CSS 样式。

        因为我假设你已经使用 Git 安装了 Jekyll(如果你真的不应该这样做),你可以创建一个名为 new-theme 的分支并从 @ 切换到该分支987654325@作为工作分支。 (如果您不想处理 Git 分支,那么一种简单的方法就是复制整个 Jekyll 安装并将其粘贴为 old-Jekyll-install 其他地方(但实际上,您应该这样做。Here's a tutorial 帮助我学习)

        1. 下拉新主题的文件。
        2. 手动复制_posts 和您的自定义更改。
        3. 通过手动比较_config.yml 并移出必要的内容来移植它们。
        4. 构建站点,看看你缺少什么,什么可能搞砸了(例如,过去你可能添加了几个<br \> 标记用于间距,而你不希望在新主题中这样做)。
        5. master 合并(或将其推送到生产环境)

        话虽如此,这一切都相当手动且很痛苦,但至少您不必处理资源冲突。这样做的缺点是您的存储库不会与主题存储库同步。所以你不会得到上游更新。我仍然建议您 fork 主题存储库,移植您的 Jekyll 站点的个人自定义设置,然后重命名该存储库以进行生产。 (这当然不再使用“现有”的 Jekyll 安装)

        【讨论】:

        • 有没有办法以某种方式切换...上游遥控器?
        • @raphael 嗯,如果您的意思是在使用上游遥控器时仍然手动移植您的帖子和布局,那么可以肯定的是,它类似于手动移动内容,除了没有版本控制。除非有另一种方法可以做到这一点,如果您确实做到了,请发布答案:) 由于缺乏知识,我可能是错的!
        • 我觉得我可能以某种方式激怒了 git 纯粹主义者,但我想出了一个在我测试时有效的解决方案。
        • “拉下新主题的文件”具体是什么意思?我们应该在哪里下载文件?以什么格式?我有一个拉链,我应该在哪里解压?
        • 迟到回复,但“为新主题拉下文件”将在任何地方,无论是来自 Github 还是任何你喜欢的主题。可以是 zip 或 git clone。然后是的,将其解压缩到您喜欢的文件夹(在大多数情况下,这是您的 git repo 中的一个分支,以便稍后“合并”)。由于在 (2) 中,您手动将所需更改复制到该位置。
        猜你喜欢
        • 2017-08-14
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2019-03-26
        • 2021-04-26
        • 2023-04-02
        • 1970-01-01
        • 2022-12-13
        相关资源
        最近更新 更多