53

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

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

4

5 回答 5

54

这就是我为更改现有 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

合并您的更改

现在我们合并我们的帖子、配置等。您可以使用 Gitcheckout从旧的 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宝石文件。
  • 文件(CNAME用于 GitHub 页面)。
  • Rakefile如果有的话)。
  • favicon 文件(如果有)。
  • 手动主题更改,例如 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)。

于 2016-05-12T12:03:58.953 回答
22

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

由于我假设您使用 Git 安装了 Jekyll(如果您真的不应该安装),您可以创建一个名为的分支并从作为工作分支的分支new-theme切换到该分支。master(一种简单的方法就是复制整个 Jekyll 安装并将其粘贴到其他地方,就old-Jekyll-install好像您不想处理 Git 分支一样(但实际上,您应该这样做。这是一个帮助我学习的教程)

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

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

于 2015-07-10T15:07:22.760 回答
13

Jekyll v3.2引入了基于 gem 的主题(未来计划见这里):

基于 Gem 的主题使主题开发人员可以轻松地向拥有主题 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,仅更新主题 gem。主题开发人员所做的任何新文件或更新(例如样式表或包含)都将自动拉入您的项目中。

重要提示:在撰写本文时,GitHub 页面仅支持一组特定的基于 gem 的主题ArchitectCaymanDinkyHackerLeap dayMerlotMidnightMinimaMinimalModernistSlateTactileTime machine . 其中,似乎只有 Minima 是面向博客的(例如,它是唯一具有内置 Disqus 支持的)。但是,如果您愿意自己运行 Jekyll 构建过程,您应该可以使用任何主题。

另一种选择是GitLab 页面教程示例站点)。

于 2017-08-27T13:37:58.730 回答
5

使用 GH 页面

对此进行了测试,但我使用的项目没有任何我想保存的内容,并且主题相当简单,因此随着复杂性的增加,这可能无法很好地工作。

  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

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

于 2015-08-03T20:43:06.663 回答
2

The easiest way to switch theme in an existing or new jekyll installation is to use the following plugin: jekyll-remote-theme, which is available since November 2017.

Although it is currently in beta, it works fine and most importantly it is already white-listed on Github Pages, so there is no need to build locally, unless the requested theme includes unsupported Gems.

Therefore, in the case of a simple web site with pages and blog, you can host and edit your content directly on the Github infrastructure and switch your site theme by typing-in the address of the new remote theme. An extra benefit is that you can test your content with several existing themes before committing to one of them.

In addition to easier switching, the jekyll-remote-theme method should automatically bring-in a new version of the remote theme, as soon as you make a change and there is a new version by the maintainer of the theme. If the maintainer of the theme makes a radical change that you don't like then you are always a few keystrokes away from a new theme.

I have several jekyll installations and I am already employing it without intending to switch in the short term, since it is the most elegant and future proof solution, for the time being.

If your existing jekyll installation is pure (i.e., you have edited only pages, posts, configuration) then the switch is seamless. If your existing theme has special layouts (e.g., splash.html and the new one does not have it) then your pages that employ the respective layout become orphans (i.e., basic html with no special formatting). I have switched an existing installation that had been extensively edited, so I got several orphan pages, but I did not get any of the git merge conflicts that are possible with other methods discussed here.

于 2018-01-04T17:37:53.090 回答