Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes。
在现有的 Jekyll 安装中切换到新主题的最简单方法是什么?
Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes。
在现有的 Jekyll 安装中切换到新主题的最简单方法是什么?
这就是我为更改现有 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
这些是我必须复制、合并、调整或删除的文件:
_posts
文件夹中的帖子。_drafts
文件夹中的草稿。_config.yml
文件。Gemfile
宝石文件。CNAME
用于 GitHub 页面)。Rakefile
如果有的话)。提交您的更改,不要忘记再次测试主题。
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
)。
虽然您可以通过分叉一个新主题来迁移到现有安装,然后手动复制和粘贴资源,如 CSS、JS、HTML 和您可能需要的_includes
其他_layouts
文件,但这可能不是一个好主意,因为您最终拥有新旧资源的混搭,可能名称不同,但在它们相同的情况下(例如,您没有覆盖您的帖子引用的旧样式表),它会导致混淆的 CSS 样式你必须调试并慢慢修复。
由于我假设您使用 Git 安装了 Jekyll(如果您真的不应该安装),您可以创建一个名为的分支并从作为工作分支的分支new-theme
切换到该分支。master
(一种简单的方法就是复制整个 Jekyll 安装并将其粘贴到其他地方,就old-Jekyll-install
好像您不想处理 Git 分支一样(但实际上,您应该这样做。这是一个帮助我学习的教程)
_posts
和您的自定义更改。_config.yml
手动比较它们并移动必要的内容来移植你的。<br \>
间距标签,而您不希望在新主题中使用它)。master
(或将其推送到生产环境)话虽如此,所有这些都是相当手动的并且很痛苦,但至少您不必处理资源冲突。这样做的缺点是您的存储库不会与主题存储库同步。所以你不会得到上游更新。我仍然建议您分叉主题存储库,移植您的 Jekyll 站点的个人自定义设置,然后重命名该存储库以进行生产。(这当然不再使用“现有”的 Jekyll 安装)
Jekyll v3.2引入了基于 gem 的主题(未来计划见这里):
基于 Gem 的主题使主题开发人员可以轻松地向拥有主题 gem 的任何人提供更新。当有更新时,主题开发者将更新推送到 RubyGems
基于 gem 的主题的目标是让您获得强大的、不断更新的主题的所有好处,而不会让所有主题的文件妨碍您,并使您的主要关注点过于复杂:创建内容。
安装基于 gem 的主题很简单:
gem "jekyll-theme-awesome"
bundle install
._config.yml
以激活主题:theme: jekyll-theme-awesome
bundle exec jekyll serve
要切换主题,我相信这样的事情应该有效:
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 的主题很容易:
如果您有主题 gem,您可以(如果您愿意)运行
bundle update
以更新项目中的所有 gem。或者您可以运行bundle update <THEME>
,替换为主题名称,例如minima
,仅更新主题 gem。主题开发人员所做的任何新文件或更新(例如样式表或包含)都将自动拉入您的项目中。
重要提示:在撰写本文时,GitHub 页面仅支持一组特定的基于 gem 的主题:Architect、Cayman、Dinky、Hacker、Leap day、Merlot、Midnight、Minima、Minimal、Modernist、Slate、Tactile和Time machine . 其中,似乎只有 Minima 是面向博客的(例如,它是唯一具有内置 Disqus 支持的)。但是,如果您愿意自己运行 Jekyll 构建过程,您应该可以使用任何主题。
我对此进行了测试,但我使用的项目没有任何我想保存的内容,并且主题相当简单,因此随着复杂性的增加,这可能无法很好地工作。
为了安全,新建一个分支
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
git pull new-theme-upstream
您可以将主题保存在 git 子模块中,作为单独的文件夹,然后符号链接 jekyll 的关键元素。这在gh-pages粗略示例中不起作用
blog
|
+-- theme_1/
|
+-- theme_2/
| |
| +-- _layouts/
|
+-- _layouts ln - theme_2/_layouts
这样,在更改主题时,主题就不会发生冲突。
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.