Hexo博客源码管理

往事不堪回首

我的博客使用Hexo框架,博客的源码静态文件都托管到Github。

我使用Next主题,源码托管在Github上,时常有更新。最开始的源码管理策略是这样的:下载主题源码放在博客源码的themes目录下,作为博客源码的一部分,统一做版本管理。这样会导致一个问题,主题源码的更新合入不方便。因此,每隔几个月我会将主题的更新手动合入到博客源码中-_-#,说出来真丢人。

使用Git子模块

添加子模块

男人要对自己好一点!如果想让生活更加美好,必须要将博客源码和主题源码分开管理。在网上了解到,一个项目要使用另外一个项目,两者又要单独管理,可以使用submodule或者subtree功能。我觉得subtree操作太复杂了,最终选择了submodule方式。

主题要根据自己的需求适配,不能完全和官方的一样,因此要有自己的仓库。在Github上将iissnan/hexo-theme-next项目fork,于是我有一个名为panqiincs/hexo-theme-next的新仓库。

将主题项目作为一个子模块添加到博客项目中,操作如下:

1
2
3
4
$ cd hexo_blog/
$ git submodule add git@github.com:panqiincs/hexo-theme-next.git themes/next/
$ git add .
$ git commit -m 'add theme next as a submodule'

对上述操作不清楚的请参考Progit的说明。

添加上游远程仓库

主题源码的管理原则是既要保持自己的变更,又要延续上游的变更。因此要将官方的远程仓库添加进来,命名为upstream:

1
2
$ cd themes/next/
$ git remote add upsteam https://github.com/iissnan/hexo-theme-next

查看当前的远程仓库:

1
2
3
4
5
$ git remote -v
origin git@github.com:panqiincs/hexo-theme-next.git (fetch)
origin git@github.com:panqiincs/hexo-theme-next.git (push)
upstream https://github.com/iissnan/hexo-theme-next.git (fetch)
upstream https://github.com/iissnan/hexo-theme-next.git (push)

日常操作

提交自己的修改

根据自己的需求,可以对主题文件进行修改,和普通操作无异:

1
2
3
$ vim some_files
$ git add modified_files
$ git commit -m 'some comments'

合入上游的更新

如果发现远程仓库有更新,首先拉取下来,然后选择是否合入到自己的分支:

1
2
3
4
5
6
7
8
$ git fetch upstream
$ # 合入到主分支
$ git checkout master
$ git merge upstream/master
$
$ vim conflict_files # 手动解决合并冲突
$ git add . # 解决冲突完毕
$ git commit 'merge upstream updates'

将新的commits推送到远程origin分支:

1
$ git push origin master

提交子模块的更新

回到博客源码目录,发现有更改未暂存:

1
2
3
4
5
6
7
8
9
$ cd hexo_blog/
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: themes/next (new commits)

提交子模块的更新:

1
2
3
$ git add .
$ git commit -m 'update theme next'
$ git push origin master

在Github上查看博客源码仓库,可以看到themes/next目录后有个@xxxxxx,指向子模块的一个提交,点击可以跳转到panqiincs/hexo-theme-next仓库。