想在公司的大屏 PC
上更新博客, 方便省事, 但是相关的 Hexo
源文件都在笔记本上, 所以就需要在两者之间同步配置文件, 故将过程记录下来.
更新
[2019-11-27]
- Initial release
[2019-12-1]
Changed
- 更新文章格式
[2020-2-3]
Added
- 新增问题:
'themes/Nlvi' already exists in the index
[2020-11-25]
Changed
- 更新问题:
'themes/Nlvi' already exists in the index'
的解决方式
[2021-1-16]
Changed
- 优化文章缩进格式
说明
- laptop(
我的笔记本, hexo 源文件所在地
) - pc(
公司电脑
)
步骤
上传 hexo 配置
先捋一下思路: 将
laptop
的hexo
源配置文件, 使用git
无缝同步到pc
上, 使得pc
也可以更新博客.
[laptop]: 初始化 git
1
2
3
4# 进入博客的根目录, 我的是 blog-site
cd blog-site
git init[laptop]: 创建新的 hexo 配置专用分支
1
2# branch/hexo 为存储 hexo 配置文件的专用分支
git checkout -b branch/hexo[laptop]: 编辑 .gitignore
1
2
3
4
5
6
7
8
9.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
-
+ .git[laptop]: 上传 hexo 配置到远程分支
1
git push --set-upstream origin branch/hexo
[laptop]: branch/hexo 分支目录结构
1
2
3
4
5
6
7
8
9
10- scaffolds
- source
- themes
- Nlvi
- landscape
- .gitignore
- README.md
- _config.yml
- package-lock.json
- package.json[laptop]: 将 branch/hexo 设为默认分支
由于后续的拉取、推送等操作都在
branch/hexo
分支上进行, 而不是原本的master
, 所以将branch/hexo
设为默认分支.为什么呢? 因为
hexo deploy
命令, 只是将public
目录下的站点文件上传到master
.
下载 hexo 配置
[pc]: clone 分支
1
2
3# 拉取 blog 仓库
# 此时已经设置了默认分支为 branch/hexo, 而不是 master, 所以拉取的是 branch/hexo 下的内容
git clone https://github.com/ddzy/blog.git[pc]: 安装相关依赖项
1
2npm install -g hexo-cli
npm install
第一次测试
在
pc
上检验 hexo 配置是否运行正常.
1 | hexo g -d |
浏览器打开博客, 可以看到, 此时页面是空白的, 这是由于 laptop
的 hexo
源目录中 theme
目录下的各个主题都是单独的 git
文件夹, 因此在之前使用 git push --set-upstream origin branch/hexo
的时候, 会被忽略, 并没有将主题文件夹上传上去, 导致文件夹是空白的, 进而页面显示空白.
解决方法 是使用 submodule
来管理子 git
模块.
git submodule 模块划分
[laptop]: 将主题加入 submodule
1
2
3
4
5
6# 进入博客根目录下
cd blog/
# 注意: 要提前将喜欢的主题 fork 到自己仓库下, 便于后续的更改和提交
# 将主题仓库下载至 blog/themes 目录下, 文件夹命名为 Nlvi
git submodule add https://github.com/ddzy/hexo-theme-Nlvi themes/Nlvi[laptop]: 查看 .gitmodules 文件
这是执行完
git submodule add
之后自动生成的一个文件, 保存了一种映射关系, 内容大致是这样的:1
2
3
4
5
6[submodule "themes\\nlvi"]
path = themes\\nlvi
url = https://github.com/ddzy/hexo-theme-Nlvi.git
[submodule "themes/Nlvi"]
path = themes/Nlvi
url = https://github.com/ddzy/hexo-theme-Nlvi[laptop]: 更新 branch/hexo 仓库
1
2
3git add .
git commit -m ":construction: use submodule to manage the child git repo"
git push origin branch/hexo可以看到, 此时
branch/hexo
仓库的themes
文件夹下是有内容的:[注意]: ‘themes/Nlvi’ already exists in the index
git submodule add
之后可能会出现上述错误, 这是由于指定的文件夹名称已存在, 所以需要干掉它:1
git rm -r --cached themes/Nlvi
接着再添加子模块:
1
git submodule add https://github.com/ddzy/hexo-theme-Nlvi themes/Nlvi
第二次测试
[pc]: 再次拉取 branch/hexo 分支
1
2
3git fetch origin branch/hexo
git diff
git merge --no-ff origin/branch/hexo[pc]: 没有看到 themes/Nlvi 主题
submodule
不能使用git pull
、git fetch
来同步, 需要使用以下命令:1
2git submodule init
git submodule update最后, 再执行
hexo g -d
命令, 即可将主题文件生成至master
.
总结
文章更新流程
1 | git fetch origin branch/hexo |