【发布时间】:2015-09-28 09:25:37
【问题描述】:
Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.
在现有 Jekyll 安装中切换到新主题的最简单方法是什么?
【问题讨论】:
标签: ruby jekyll jekyll-bootstrap
Jekyll 有很多主题,例如https://github.com/jekyll/jekyll/wiki/Themes.
在现有 Jekyll 安装中切换到新主题的最简单方法是什么?
【问题讨论】:
标签: ruby jekyll jekyll-bootstrap
我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
git pull new-theme-upstream 为您的新主题合并新更新
您可以将主题保存在 git 子模块中,作为单独的文件夹,然后符号链接 jekyll 的关键元素。这不会在 gh-pages 粗略示例中起作用
blog
|
+-- theme_1/
|
+-- theme_2/
| |
| +-- _layouts/
|
+-- _layouts ln - theme_2/_layouts
这样在更改主题时主题不会发生冲突。
【讨论】:
在现有或新安装的 jekyll 中切换主题的最简单方法是使用以下插件:jekyll-remote-theme,该插件自 2017 年 11 月起可用。
虽然它目前处于测试阶段,但它运行良好,最重要的是它已经在 Github 页面上列入白名单,因此无需在本地构建,除非请求的主题包含不受支持的 Gems。
因此,对于带有页面和博客的简单网站,您可以直接在 Github 基础架构上托管和编辑您的内容,并通过输入新远程主题的地址来切换您的网站主题。另一个好处是,您可以在提交内容之前使用several existing themes 测试您的内容。
除了更容易切换之外,jekyll-remote-theme 方法应该会自动引入新版本的远程主题,只要您进行更改并且有新版本主题的维护者。如果主题的维护者做出了你不喜欢的彻底改变,那么你总是离新主题只有几步之遥。
我有几个 jekyll 安装,我已经在使用它,但不打算在短期内切换,因为它是目前最优雅和面向未来的解决方案。
如果您现有的 jekyll 安装是纯粹的(即,您只编辑了页面、帖子、配置),那么切换是无缝的。 如果您现有的主题有特殊的布局(例如,splash.html 和新的没有它)然后您使用相应布局的页面成为孤儿(即,没有特殊格式的基本 html)。我已经切换了一个已经过广泛编辑的现有安装,所以我得到了几个孤立页面,但我没有得到任何这里讨论的其他方法可能发生的 git 合并冲突。
【讨论】:
Jekyll v3.2 介绍gem-based themes(未来计划见here):
基于 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,来 只需更新主题宝石。任何新文件或更新主题 开发人员已经制作(例如样式表或包含)将被拉取 自动进入您的项目。
重要提示:在撰写本文时,GitHub 页面仅支持 specific set of gem-based themes:Architect、Cayman、Dinky ,黑客,闰日,梅洛,午夜,Minima 、极简主义、现代主义、石板、触觉和时光机。其中,似乎只有 Minima 是面向博客的(例如,它是唯一一个内置 Disqus 支持的)。但是,如果您愿意run the Jekyll build process yourself,您应该可以使用任何主题。
另一种选择是GitLab pages(tutorial,sample site)。
【讨论】:
这就是我为更改现有 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
这些是我必须复制、合并、调整或删除的文件:
_posts 文件夹中的帖子。_drafts 文件夹中的草稿。_config.yml 配置文件。Gemfile gem 文件。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 进行检查)。
【讨论】:
newthem 替换我们现有的master 分支。 git merge -s ours master 命令给了我错误fatal: refusing to merge unrelated histories。 git merge -s ours master --allow-unrelated-histories 给了我Merge with strategy ours failed.
虽然您可以通过分叉新主题迁移到现有安装,然后手动复制和粘贴 _includes、_layouts 和其他文件中的 CSS、JS、HTML 等资源可能需要,这可能不是一个好主意,因为您最终会混合旧资源和新资源,这些资源可能名称不同,但在它们相同的情况下(例如,您没有覆盖您的帖子引用的旧样式表),它会导致您必须调试并慢慢修复的混淆 CSS 样式。
因为我假设你已经使用 Git 安装了 Jekyll(如果你真的不应该这样做),你可以创建一个名为 new-theme 的分支并从 @ 切换到该分支987654325@作为工作分支。 (如果您不想处理 Git 分支,那么一种简单的方法就是复制整个 Jekyll 安装并将其粘贴为 old-Jekyll-install 其他地方(但实际上,您应该这样做。Here's a tutorial 帮助我学习)
_posts 和您的自定义更改。 _config.yml 并移出必要的内容来移植它们。<br \> 标记用于间距,而你不希望在新主题中这样做)。 master 合并(或将其推送到生产环境)话虽如此,这一切都相当手动且很痛苦,但至少您不必处理资源冲突。这样做的缺点是您的存储库不会与主题存储库同步。所以你不会得到上游更新。我仍然建议您 fork 主题存储库,移植您的 Jekyll 站点的个人自定义设置,然后重命名该存储库以进行生产。 (这当然不再使用“现有”的 Jekyll 安装)
【讨论】:
git clone。然后是的,将其解压缩到您喜欢的文件夹(在大多数情况下,这是您的 git repo 中的一个分支,以便稍后“合并”)。由于在 (2) 中,您手动将所需更改复制到该位置。