最近看到有不少朋友在问Stellar怎么更新版本,应该是刚刚接触hexo,那俺就浅浅讲一下吧

Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub

首先我们需要对git的基本流程有个初步的概念,这里我推荐你花几分钟分钟去看 Git工作流和核心原理 这个视频的前三分钟

好了,相信聪明的你看完了就已经对git的基本流程有一定的了解了

图源视频
图源视频

吼,那么git和我们的hexo有什么关系呢?

其实你的整个hexo文件夹就是一个本地git仓库,看看你的仓库里面,是不是有 .git 这个隐藏文件夹呀,这就是证据咧

然后你回想一下你平时生成上传文章的时候执行的命令 hexo ghexo d,是不是感觉和git操作有点像?俺来解析一下

你在使用 hexo g 时,hexo会在本地将你的 markdown 文件渲染成 html 网页文件并将文件存放在 blog/public 文件夹中

hexo d 则代替了你 git add .git commitgit push 这三个命令,将 public 文件夹下的所有内容上传到Github或者其他git仓库

怎么样,还没有懂?看这张图

好了好了,不管你懂没懂,干就完了

Stellar 更新

稳定版

稳定版由npm包发放,与github上的最新版比较可能会有延迟

package.json 中修改 stellar 的版本号为你想要的版本号,然后执行:

更新完记得对照更新日志进行迁移操作

最新版

前文提到了实际上你的hexo文件夹就是一个git本地仓库,而我们的主题文件在 blog/themes 文件夹下,现在我想保证我的主题保持最新,那我就可以把Stellar的github仓库clone到我的hexo仓库里面

这样
这样

懂了煤油?就是套娃,两个git仓库套娃,一个是你的hexo仓库,另一个是stellar主题仓库

相信你已经理解了吧(不理解俺也没法子了)

我们在安装的时候使用的命令,其功能就是将 hexo-theme-stellar 仓库作为子模块添加到 theme/stellar 文件夹中

blog根目录下gitbash
git submodule add https://github.com/xaoxuu/hexo-theme-stellar.git themes/stellar

然后我们进入 themes/stellar 文件夹,在此目录下右键 git bash

自定义

自定义主题源码的(你都会自定义了还需要我教你咋更新嘛🥹)有两种方案,一种是在 github 上拉取更新到你的仓库然后本地拉取你的仓库代码。还有一种是直接在本地拉取上游的更新,然后推送到你的仓库(推荐)。

与最新版不同的是,你需要先fork一下主题仓库,并将你fork的仓库作为子模块添加到 theme/stellar 中,自行替换你的仓库链接

blog根目录下gitbash
git submodule add https://github.com/#yourname#/hexo-theme-stellar.git themes/stellar

Github 拉取

大致流程是这样的:你先把自己fork的仓库添加到本地,一顿唰唰唰改完之后,git三件套(git add .git commitgit push)到你fork的仓库里面,后面主题更新的时候,你先在github上面 update branch 一下

大致流程图
大致流程图

我这里做个示范,比如我想要为网站加上一个线条背景,参考

blog/themes/stellar/layout/layout.ejs

在直接改代码
blog/themes/stellar/layout/layout.ejs
<!DOCTYPE html>
<html lang='<%- page.lang %>'>
<%- partial('_partial/head') %>
<body>
<%- partial('_partial/cover/index') %>
<div class='l_body' id='start'>
<aside class='l_left' layout='<%- page.layout %>'>
<%- partial('_partial/sidebar/index') %>
</aside>
<div class='l_main<%- page.content ? "" : " list" %>'>
<%- partial('_partial/main/header/index') %>
<%- body %>
<%- partial('_partial/main/footer') %>
<%- partial('_partial/menubtn') %>
</div>
</div>
<div class='scripts'>
<%- partial('_partial/scripts/index') %>
</div>
{% if theme.canvas_nest %}
<script type="text/javascript" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script>
{% endif %}
</body>
</html>

并在主题配置文件 _config.stellar.yml 中增加一行

blog/_config.stellar.yml
canvas_nest: true

改完了 hexo cl 清除缓存再 hexo g & hexo s 本地预览看看有没有错

没出错的话现在我们上传到github,进入 themes/stellar 主题文件夹中,右键 git bash,并在弹出窗口中依次执行

git add . //点不要漏了
git commit -m "你想填写的更新消息"
git push

没有报错的话就可以去你的github仓库中查看是否更新成功了

若想要更新的话,从 Github 拉取更新的代码 Update brach ,或者使用 VS Code 拉取上游代码(推荐)

吼,那么有朋友就问了,说:之后主题代码更新了,我改动的代码和上游出现了冲突 conflicts 怎么办捏?github的 Sync fork 只提示我说要我放弃我的改动啊?

欸,不要慌 现在我来教你怎么用 VS Code 在电脑解决冲突

欸界面跳转了,肿么办捏?compare across forks

注意!

这里是从上游(即 xaoxuu 的仓库)提交到你 fork的仓库而不是从你的仓库提交到上游!

是从 weekdaycare/hexo-theme-stellar <-xaoxuu/hexo-theme-stellar

一定一定要检查 Pull Request 的方向!

creat pr 就可以啦,然后你的仓库就会出现一个pr

这个只是一个示例,你可以看看你的pr信息
这个只是一个示例,你可以看看你的pr信息

怎么解决冲突这里官方都给了说明了捏,如果还不是很明白的话可以搜搜Github如何解决冲突,俺就不在这里献丑了

VSCode 拉取(推荐)

提交改动的代码、拉取上游代码或者解决冲突完全可以使用 VS Code 进行可视化操作,不需要敲命令,方便很多。(而且不会有瞎交 PR 的风险)

与上文不同的是,这里我们需要你在本地设置上游仓库。首先在本地 stellar 主题仓库中打开命令行,输入

$

然后检查你链接的仓库

$

输出如下

origin  git@github.com:weekdaycare/hexo-theme-stellar.git (fetch)
origin git@github.com:weekdaycare/hexo-theme-stellar.git (push)
upstream git@github.com:xaoxuu/hexo-theme-stellar.git (fetch)
upstream git@github.com:xaoxuu/hexo-theme-stellar.git (push)

这里解释一下

  • upstream 通常是指你 fork 仓库的原始仓库
  • origin 是你自己在 GitHub fork 的仓库,原始仓库的clone

再同步一下上游的记录。

$

好了现在可以关掉你的命令行,使用 VS Code 打开你的本地主题仓库 Blog/theme/stellar

打开如下,然后进入侧边栏中的源代码管理,或者使用快捷键 Ctrl + Shift + G 进入

点击源代码管理右侧的三个点,在 拉取,推送 中选择 拉取自...

然后会让你选择要从哪里拉取代码,我们选上游 upstream git@github.com:xaoxuu/hexo-theme-stellar.git

再选择你要拉取仓库的分支,选择 main 分支。如果有冲突,则会在左侧展示待处理的冲突文件。点击即可进入文件,在右下角有一个 在合并编辑器中解析

需要说明的是,左上方是主题更新传入的文件,右上方是本地文件(你更改的文件)

  • 接受传入:舍弃个人更改接受主题上游传入
  • 接受当前:使用个人更改而不使用上游传入
  • 接受组合:智能合并主题传入和个人更改,当个人改动比较复杂的时候这玩意儿没啥用
  • 下方的结果区域可以编辑手动合并两个文件

完成文件的合并之后,点击完成合并,文件就会自动加入暂存区(git add),解决完所有的冲突之后,你可以在左上角的消息中填写此次 commit 消息(简略)并提交,你也可以直接点击提交按钮再弹出的 COMMIT_EDITMSG 中编写更详细的 commit 消息。

在点击同步更改就会将本地的 commit 消息推送到 github 上啦。OK,Stellar更新至此就结束了

备份

手动备份

血与泪的教训,一定一定一定要备份,否则哪天你文件夹丢失了都没地方哭去

所有版本的备份方法都相同

你需要备份你整个 source 文件夹和 _config.yml_comfig.stellar.ymlpackage.json 即可

恢复的时候把他们放到原来的位置,根目录下右键 git bash

借助插件

除了手动备份,你还可以借助 hexo-git-backup 插件

链接在这里


陕ICP备2022011813 | 由又拍云提供CDN加速
| 基于 Stellar 主题
十年之约