在现有的Jekyll安装中切换主题

maj*_*jom 43 ruby jekyll jekyll-bootstrap

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

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

Dan*_*ker 36

这就是我改变现有Jekyll安装主题的方法.调整这些说明以满足您的需求.

拉新主题

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

git checkout --orphan newtheme
git rm -rf .
git clean -dfx
Run Code Online (Sandbox Code Playgroud)

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

git remote add upstream https://github.com/johnotander/pixyll.git
git fetch upstream
git pull upstream master
Run Code Online (Sandbox Code Playgroud)

构建主题并测试它.

bundler install
jekyll serve
Run Code Online (Sandbox Code Playgroud)

合并您的更改

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

git checkout master -- _posts
Run Code Online (Sandbox Code Playgroud)

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

git show master:_config.yml > _config.yml.old
Run Code Online (Sandbox Code Playgroud)

如果您意外地覆盖了主题文件,则可以将其还原.

git checkout upstream/master -- about.md
Run Code Online (Sandbox Code Playgroud)

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

  • 根文件夹中的Markdown文件.
  • _posts文件夹中的帖子.
  • _drafts文件夹中的草稿.
  • _config.yml配置文件.
  • Gemfile宝石文件.
  • CNAME文件(适用于GitHub页面).
  • Rakefile(如果有的话).
  • favicon文件(如果有的话).
  • 手动主题更改,例如Google Analytics,Disqus,SEO字段(如果有).

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

替换主分支

最后,我们用masternewtheme分支替换现有分支.假设我们在newtheme分支机构:

git checkout newtheme
git merge -s ours master
git checkout master
git merge newtheme
Run Code Online (Sandbox Code Playgroud)

推动更改.

git push
Run Code Online (Sandbox Code Playgroud)

并清理当地newtheme分行.

git branch -d newtheme
Run Code Online (Sandbox Code Playgroud)

而已!您已成功替换主题.如果我遗漏了任何内容,或者您​​有任何要添加的内容,请发表评论.


更新主题

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

git pull upstream master
Run Code Online (Sandbox Code Playgroud)

并修复任何合并冲突.在这里,我假设upstream遥控器仍然设置为主题的存储库(你可以检查一下git remote -v).

  • 这是一个很好的答案,我使用所概述的步骤成功地将我的jekyll网站转移到了新的主题. (2认同)
  • 你好,谢谢你的详细回答。但是,我无法用新的“newthem”替换现有的“master”分支。“git merge -s ours master”命令给我错误“致命:拒绝合并不相关的历史记录”。而“git merge -s ours master --allow-unrelated-histories”给了我“与我们的策略合并失败了”。 (2认同)

mat*_*aly 17

虽然你可以通过派生一个新的主题迁移到现有的安装,然后通过类似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安装)


Oha*_*der 10

Jekyll v3.2引入了基于宝石的主题(未来计划见此处):

基于宝石的主题使主题开发人员可以轻松地向拥有主题gem的任何人提供更新.当有更新时,主题开发人员将更新推送到RubyGems

基于宝石的主题的目标是让您获得强大的,不断更新的主题的所有好处,而不会让所有主题的文件妨碍您,并且过度复杂化可能是您的主要焦点:创建内容.

安装基于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,您可以(如果您愿意)运行bundle update 以更新项目中的所有gem.或者你可以运行bundle update <THEME>,替换为主题名称,例如minima,只更新主题gem.主题开发人员所做的任何新文件或更新(例如样式表或包含)都将自动提取到您的项目中.

重要提示:在撰写本文时,GitHub页面仅支持一组特定的基于宝石的主题:建筑师,开曼,丁克,黑客,闰日,鹿,午夜,迷你,最小,现代,板岩,触觉时间机器.其中,似乎只有Minima是面向博客的(例如,它是唯一具有内置Disqus支持的人).但是,如果您愿意自己运行Jekyll构建过程,则应该能够使用任何主题.

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


rap*_*ael 5

与 GH 页面

对此进行了测试,但我是在一个没有任何想要保存的内容的项目中进行的,并且主题相当简单,因此随着复杂性的增加,这可能不会很好地工作。

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

    git checkout -b newtheme
    
    Run Code Online (Sandbox Code Playgroud)
  2. 然后将新主题添加为远程主题

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

    git push origin newtheme
    
    Run Code Online (Sandbox Code Playgroud)
  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
Run Code Online (Sandbox Code Playgroud)

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