Modnar's Zone

使用 Git 来管理 Hexo 文章

字数统计: 795阅读时长: 2 min
2021/04/15

问题背景

        在迁移到新的机器设备时,如何同步之前已有的 GitHub Pages 文章?又如何在原有内容的基础上,继续更新文章内容?

解决方案

        使用 Git

        首先,对于搭建的 GitHub Pages ,其本身就要求所有页面资源存储于 username.github.io 的仓库下。所以,Git 本身就已经帮我们的文章资源做出了一些管理,在此基础上,我们可以继续利用这个仓库来管理我们的 hexo 资源。

        对于这个仓库的 master 分支来说,其内容均是页面部署所需的资源(GitHub Pages 指定部署目录为 root 即可),与 hexo 目录下的目录结构差异较大,所以用同一个 master 来存储,实践上就不合理。同样地,master 分支下的内容可以认为是部署页面所需的所有资源,而 hexo 目录下的很多内容,并不是部署时所必须的,所以逻辑上来说,也不应该将两部分资源合并在一起。

        综上,我们可以使用 Git 的分支来管理两部分资源。可以建立一个名为 hexo 的分支,将hexo相关的内容直接放到这个分支上,将部署资源(即 hexo g 生成的 public 目录内容放到 master 分支上。

        这样一来,即可很灵活地写博客、部署博客、迁移博客了。当迁移到新的设备上时,先将仓库克隆下来,再切换到 hexo 分支,将目录作为正常的hexo文件目录即可。需要注意的是,不要修改本地的 master 分支内容,因为正如上面所述,其内容全部是 hexo 分支执行部署之后生成的 public 下的内容。如果本地修改,就会在hexo部署之后,使得本地与远程内容不一致问题。

        更多地,你需要尽可能让仓库内容精简些,所以建议在 hexo 分支下添加 .gitignore 来避免一些自动生成的内容被提交。分享下目前在用的 .gitignore:

1
2
3
4
# For hexo data
db.json
public/
.deploy_git/

        以上的方式,是将部署与生成分开的做法,当然,也可以直接用 master 来管理 hexo 目录内容,这时就需要在远程指定部署目录为 public,当然,此时也就不用在 .gitignore 中显式指定忽略 public 目录的版本控制了。同时,这种情况下可能要注意下配置文件等的相关路径问题,以避免目录层级导致的资源访问问题。

2022.08.22 补充

        事实上,master 分支的内容都是 hexo 分支执行部署命令自动生成并提交到 GitHub 的,对于自动生成的内容,创作者并不需要额外关注,只需要关注“源码文件”即可。也就是说,创作者在创作环境下、新的环境下,都只需要拉取同步远程的 hexo 分支即可,因为 master 分支的内容永远会被自动生成及覆盖。当然,对于 GitHub 提供的 gh-pages 分支,也是类似的道理。

CATALOG
  1. 1. 问题背景
  2. 2. 解决方案
  3. 3. 2022.08.22 补充