在现有的 Jekyll 安装中切换主题
Switch theme in an existing Jekyll installation
Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.
在现有的 Jekyll 安装中切换到新主题的最简单方法是什么?
虽然您可以通过派生新主题迁移到现有安装,然后手动复制和粘贴 CSS、JS、HTML 等资源在 _includes
、_layouts
和您可能需要的其他文件中,这可能不是一个好主意,因为您最终混合了新旧资源,这些资源可能名称不同,但在它们存在的情况下(例如,您没有覆盖 post 引用的旧样式表),它会导致混合 CSS 样式,您必须调试并慢慢修复.
因为我假设你已经安装了 Git 的 Jekyll(如果你真的不应该),你可以创建一个名为 new-theme
并从 master
切换到该分支作为工作分支。 (如果你不想处理 Git 分支(但实际上,你应该这样做,一个简单的方法就是复制你的整个 Jekyll 安装并将其作为 old-Jekyll-install
粘贴到别处。Here's a tutorial 帮助我学习)
- 下载新主题的文件。
- 手动复制
_posts
和您的自定义更改。
- 通过手动比较它们并移动必要的内容来移植您的
_config.yml
。
- 建立网站,看看你遗漏了什么,什么可能搞砸了(例如,在过去,你可能添加了一些
<br \>
标签用于间距,但你不希望在新主题)。
- 与
master
合并(或将其投入生产)
话虽这么说,这一切都是相当手动的,而且很痛苦,但至少您不必处理资源冲突。不过,这样做的 缺点 是您的存储库不会与主题存储库同步。所以你不会得到上游更新。我仍然建议您 fork 主题存储库,移植您对 Jekyll 站点的个人定制,然后重命名该存储库以用于生产。 (这当然不再使用 'existing' Jekyll 安装)
有 GH-Pages
我 tested this,但我是在一个我没有任何想要保存的项目中完成的,并且主题相当简单,所以随着复杂性的增加,这可能不太适用。
为了安全,新建一个分支
git checkout -b newtheme
然后将新主题添加为远程
git remote add new-theme-upstream https://github.com:drjekyllthemes/jekyll-minimal-theme.git
git pull new-theme-upstream HEAD
- 混乱的部分,您将遇到一堆合并冲突。检查哪些文件与
git status
有合并冲突,希望这些冲突只出现在您要覆盖的样式文件中。如果有任何文件您想保留,您可以使用文本编辑器编辑它们:git 将标记文件中的更改
推送到你的源
git push origin newtheme
- 转到 github 上的项目页面,您会注意到类似这样的内容:
- 创建拉取请求并合并新的更改。
- 您的项目仍将显示为第一个主题的分支,您将无法为新主题的上游创建拉取请求。但是您可以使用
git pull new-theme-upstream
合并新主题的新更新
如果你没有使用 gh-pages 或者如果你在推送到 github 之前在本地构建 jekyll(我认为)
您可以将主题保存在 git 个子模块中,作为单独的文件夹,然后将关键元素符号链接到 jekyll。这个不会在gh-pages粗略的例子
中工作
blog
|
+-- theme_1/
|
+-- theme_2/
| |
| +-- _layouts/
|
+-- _layouts ln - theme_2/_layouts
这样在更改主题时主题不会发生冲突。
这是我为更改现有 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
文件(用于 Git 中心页面)。
Rakefile
(如果有的话)。
- 网站图标文件(如果有)。
- 手动更改主题,例如 Google Analytics、Disqus、SEO 字段(如果有)。
提交您的更改,不要忘记再次测试主题。
替换master分支
最后,我们将现有的 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 v3.2 introduced gem-based themes (for future plans see here):
Gem-based themes make it easy for theme developers to make updates
available to anyone who has the theme gem. When there’s an update,
theme developers push the update to RubyGems
The goal of gem-based themes is to allow you to get all the benefits
of a robust, continually updated theme without having all the theme’s
files getting in your way and over-complicating what might be your
primary focus: creating content.
安装基于 gem 的主题很简单:
- 将主题添加到您网站的 Gemfile:
gem "jekyll-theme-awesome"
- 安装主题:
bundle install
。
- 将以下内容添加到您站点的
_config.yml
以激活主题:theme: jekyll-theme-awesome
- 建立您的网站:
bundle exec jekyll serve
要切换主题,我相信这样的事情应该可行:
- 更改为您站点的 Gemfile 中的新主题:
gem "jekyll-theme-new"
- 安装主题:
bundle install
- 更改您站点的
_config.yml
以引用新主题:theme: jekyll-theme-new
- 建立您的网站:
bundle exec jekyll serve
- (可选 - 从您的机器上卸载旧主题)记下旧主题的安装文件夹 (
bundle show jekyll-theme-awesome
) 并使用 gem uninstall jekyll-theme-awesome
卸载它。为了安全起见,请确保其文件夹确实已被删除。
更新基于 gem 的主题很容易:
If you have the theme gem, you can (if you desire) run bundle update
to update all gems in your project. Or you can run bundle update <THEME>
, replacing with the theme name, such as minima
, to
just update the theme gem. Any new files or updates the theme
developer has made (such as to stylesheets or includes) will be pulled
into your project automatically.
重要说明:在撰写本文时,GitHub 页面仅支持 specific set of gem-based themes: Architect, Cayman, Dinky, Hacker, Leap day, Merlot, Midnight, Minima, Minimal, Modernist, Slate, Tactile, and Time machine. Of those, it seems only Minima is blog-oriented (e.g. it's the only one with built-in Disqus support). However, you should be able to use any theme if you are willing to run the Jekyll build process yourself。
另一种选择是 GitLab pages (tutorial, sample site).
在现有或新安装的 jekyll 中切换主题的最简单方法是使用以下插件:jekyll-remote-theme,自 2017 年 11 月起可用。
虽然它目前处于测试阶段,但它运行良好,最重要的是它已经在 Github 页面上列入白名单,因此无需在本地构建,除非请求的主题包含不受支持的 Gem。
因此,对于包含页面和博客的简单网站,您可以直接在 Github 基础架构上托管和编辑您的内容,并通过输入新网站的地址来切换您的网站主题遥远的主题。一个额外的好处是,您可以先使用 several existing themes 测试您的内容,然后再提交其中一个内容。
除了更容易切换之外,jekyll-remote-theme 方法应该会自动引入新版本的远程主题,只要你做出改变,那里是主题维护者的新版本。如果主题的维护者做出了您不喜欢的根本性更改,那么您总是需要敲几下键盘才能获得新主题。
我安装了几个 jekyll,我已经在使用它,短期内不打算切换,因为它是目前最优雅和面向未来的解决方案。
如果您现有的 jekyll 安装是纯的(即,您只编辑了页面、帖子、配置),那么切换是无缝的。如果您现有的主题具有特殊布局(例如, , splash.html 而新的没有它)然后你的页面使用相应的布局成为孤儿(即没有特殊格式的基本 html)。我已经切换了一个已经被广泛编辑的现有安装,所以我得到了几个孤立的页面,但我没有得到任何 git 合并冲突,这些冲突可能与这里讨论的其他方法有关。
Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.
在现有的 Jekyll 安装中切换到新主题的最简单方法是什么?
虽然您可以通过派生新主题迁移到现有安装,然后手动复制和粘贴 CSS、JS、HTML 等资源在 _includes
、_layouts
和您可能需要的其他文件中,这可能不是一个好主意,因为您最终混合了新旧资源,这些资源可能名称不同,但在它们存在的情况下(例如,您没有覆盖 post 引用的旧样式表),它会导致混合 CSS 样式,您必须调试并慢慢修复.
因为我假设你已经安装了 Git 的 Jekyll(如果你真的不应该),你可以创建一个名为 new-theme
并从 master
切换到该分支作为工作分支。 (如果你不想处理 Git 分支(但实际上,你应该这样做,一个简单的方法就是复制你的整个 Jekyll 安装并将其作为 old-Jekyll-install
粘贴到别处。Here's a tutorial 帮助我学习)
- 下载新主题的文件。
- 手动复制
_posts
和您的自定义更改。 - 通过手动比较它们并移动必要的内容来移植您的
_config.yml
。 - 建立网站,看看你遗漏了什么,什么可能搞砸了(例如,在过去,你可能添加了一些
<br \>
标签用于间距,但你不希望在新主题)。 - 与
master
合并(或将其投入生产)
话虽这么说,这一切都是相当手动的,而且很痛苦,但至少您不必处理资源冲突。不过,这样做的 缺点 是您的存储库不会与主题存储库同步。所以你不会得到上游更新。我仍然建议您 fork 主题存储库,移植您对 Jekyll 站点的个人定制,然后重命名该存储库以用于生产。 (这当然不再使用 'existing' Jekyll 安装)
有 GH-Pages
我 tested this,但我是在一个我没有任何想要保存的项目中完成的,并且主题相当简单,所以随着复杂性的增加,这可能不太适用。
为了安全,新建一个分支
git checkout -b newtheme
然后将新主题添加为远程
git remote add new-theme-upstream https://github.com:drjekyllthemes/jekyll-minimal-theme.git git pull new-theme-upstream HEAD
- 混乱的部分,您将遇到一堆合并冲突。检查哪些文件与
git status
有合并冲突,希望这些冲突只出现在您要覆盖的样式文件中。如果有任何文件您想保留,您可以使用文本编辑器编辑它们:git 将标记文件中的更改 推送到你的源
git push origin newtheme
- 转到 github 上的项目页面,您会注意到类似这样的内容:
- 创建拉取请求并合并新的更改。
- 您的项目仍将显示为第一个主题的分支,您将无法为新主题的上游创建拉取请求。但是您可以使用
git pull new-theme-upstream
合并新主题的新更新
如果你没有使用 gh-pages 或者如果你在推送到 github 之前在本地构建 jekyll(我认为)
您可以将主题保存在 git 个子模块中,作为单独的文件夹,然后将关键元素符号链接到 jekyll。这个不会在gh-pages粗略的例子
中工作blog
|
+-- theme_1/
|
+-- theme_2/
| |
| +-- _layouts/
|
+-- _layouts ln - theme_2/_layouts
这样在更改主题时主题不会发生冲突。
这是我为更改现有 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
文件(用于 Git 中心页面)。Rakefile
(如果有的话)。- 网站图标文件(如果有)。
- 手动更改主题,例如 Google Analytics、Disqus、SEO 字段(如果有)。
提交您的更改,不要忘记再次测试主题。
替换master分支
最后,我们将现有的 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 v3.2 introduced gem-based themes (for future plans see here):
Gem-based themes make it easy for theme developers to make updates available to anyone who has the theme gem. When there’s an update, theme developers push the update to RubyGems
The goal of gem-based themes is to allow you to get all the benefits of a robust, continually updated theme without having all the theme’s files getting in your way and over-complicating what might be your primary focus: creating content.
安装基于 gem 的主题很简单:
- 将主题添加到您网站的 Gemfile:
gem "jekyll-theme-awesome"
- 安装主题:
bundle install
。 - 将以下内容添加到您站点的
_config.yml
以激活主题:theme: jekyll-theme-awesome
- 建立您的网站:
bundle exec jekyll serve
要切换主题,我相信这样的事情应该可行:
- 更改为您站点的 Gemfile 中的新主题:
gem "jekyll-theme-new"
- 安装主题:
bundle install
- 更改您站点的
_config.yml
以引用新主题:theme: jekyll-theme-new
- 建立您的网站:
bundle exec jekyll serve
- (可选 - 从您的机器上卸载旧主题)记下旧主题的安装文件夹 (
bundle show jekyll-theme-awesome
) 并使用gem uninstall jekyll-theme-awesome
卸载它。为了安全起见,请确保其文件夹确实已被删除。
更新基于 gem 的主题很容易:
If you have the theme gem, you can (if you desire) run
bundle update
to update all gems in your project. Or you can runbundle update <THEME>
, replacing with the theme name, such asminima
, to just update the theme gem. Any new files or updates the theme developer has made (such as to stylesheets or includes) will be pulled into your project automatically.
重要说明:在撰写本文时,GitHub 页面仅支持 specific set of gem-based themes: Architect, Cayman, Dinky, Hacker, Leap day, Merlot, Midnight, Minima, Minimal, Modernist, Slate, Tactile, and Time machine. Of those, it seems only Minima is blog-oriented (e.g. it's the only one with built-in Disqus support). However, you should be able to use any theme if you are willing to run the Jekyll build process yourself。
另一种选择是 GitLab pages (tutorial, sample site).
在现有或新安装的 jekyll 中切换主题的最简单方法是使用以下插件:jekyll-remote-theme,自 2017 年 11 月起可用。
虽然它目前处于测试阶段,但它运行良好,最重要的是它已经在 Github 页面上列入白名单,因此无需在本地构建,除非请求的主题包含不受支持的 Gem。
因此,对于包含页面和博客的简单网站,您可以直接在 Github 基础架构上托管和编辑您的内容,并通过输入新网站的地址来切换您的网站主题遥远的主题。一个额外的好处是,您可以先使用 several existing themes 测试您的内容,然后再提交其中一个内容。
除了更容易切换之外,jekyll-remote-theme 方法应该会自动引入新版本的远程主题,只要你做出改变,那里是主题维护者的新版本。如果主题的维护者做出了您不喜欢的根本性更改,那么您总是需要敲几下键盘才能获得新主题。
我安装了几个 jekyll,我已经在使用它,短期内不打算切换,因为它是目前最优雅和面向未来的解决方案。
如果您现有的 jekyll 安装是纯的(即,您只编辑了页面、帖子、配置),那么切换是无缝的。如果您现有的主题具有特殊布局(例如, , splash.html 而新的没有它)然后你的页面使用相应的布局成为孤儿(即没有特殊格式的基本 html)。我已经切换了一个已经被广泛编辑的现有安装,所以我得到了几个孤立的页面,但我没有得到任何 git 合并冲突,这些冲突可能与这里讨论的其他方法有关。