安装 hexo 博客主题大致是这样几个步骤:
- 修改
_config.yml
配置文件,将theme
选项设置为当前主题名称 - 下载主题,
Hexo 5.0.2
版本及以上的可以通过npm i 主题名
,之前版本都是直接从 git 仓库克隆项目:git clone 主题仓库 themes/主题名
- 安装一些主题依赖选项
执行完这些操作主题就算安装好了,但是,如果现在需要给主题做一些个性化修改,同时又能继续获取源主题的更新,通过上面第二步的操作是无法实现的,这就有了一个新需求,有什么办法能够做到吗?
当然,实现这个新需求的工具就是- git 子模块(submodule
)。
其实我们的新需求就是在一个父项目里面再包含一个子项目,父子项目要保持各自独立的 git 操作,这就是 git 子模块(submodule
)要做的事情,本文就以 hexo 主题能够个性化修改同时实现保持同源主题同步更新的需求来讲解 git 子模块的操作。
fork 主题仓库
fork 主题源码到个人仓库:
直接到主题源码仓库点击 fork
按钮即可,比如我 fork 的主题仓库:https://github.com/varm/hexo-theme-volantis
新增子模块
进入 hexo 博客根目录,添加一个子模块到目录 themes/volantis,执行命令:
1 | git submodule add https://github.com/varm/hexo-theme-volantis.git themes/volantis |
执行成功后可以看到根目录下新增了一个文件:.gitmodules
,里面记录了子模块的信息。
查看子模块
git submodule
更新子模块
更新子模块到最新版
$ git submodule update
更新子模块到远程仓库最新版
$ git submodule update --remote
克隆包含子模块的项目
方法一:先克隆父项目,再更新子模块
克隆父项目
$ git clone git@github.com:varm/blog.git blog
查看子模块
$ git submodule
如果子模块前面有一个
-
,说明子模块文件还未检入(空文件夹)。初始化子模块
$ git submodule init
初始化模块只需在克隆父项目后运行一次。
更新子模块
$ git submodule update
方法二:直接递归克隆整个项目
这个方法可以递归克隆完整的项目,包括子模块在内。
$ git clone git@github.com:varm/blog.git blog --recursive
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17E:\WorkSpace> git clone git@github.com:varm/blog.git blog --recursive
Cloning into 'blog'...
remote: Enumerating objects: 1257, done.
remote: Counting objects: 100% (1257/1257), done.
remote: Compressing objects: 100% (829/829), done.
Rremote: Total 1257 (delta 714), reused 891 (delta 357), pack-reused 0eceiving objects: 90% (1132/1257), 1.79 MiB | 927.00 KiB/s
Receiving objects: 100% (1257/1257), 2.29 MiB | 1.02 MiB/s, done.
Resolving deltas: 100% (714/714), done.
Submodule 'themes/volantis' (https://github.com/varm/hexo-theme-volantis.git) registered for path 'themes/volantis'
Cloning into 'E:/WorkSpace/blog/themes/volantis'...
remote: Enumerating objects: 12863, done.
remote: Counting objects: 100% (20/20), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 12863 (delta 4), reused 10 (delta 2), pack-reused 12843
Receiving objects: 100% (12863/12863), 5.30 MiB | 1.05 MiB/s, done.
Resolving deltas: 100% (8949/8949), done.
Submodule path 'themes/volantis': checked out 'xxxxxxxx'修改子模块
对子模块中的文件进行修改后可以直接提交到远程项目分支
1
2
3git add .
git commit -m "Update"
git push origin HEAD:master删除子模块
删除子模块文件夹
1
2
3
4git rm --cached themes/volantis
rm -rf themes/volantis
--如果是 Windows cmd 命令行,使用
rmdir themes/volantis删除
.gitmodules
文件中相关子模块信息1
2
3[submodule "themes/volantis"]
path = blog/themes/volantis
url = https://github.com/varm/hexo-theme-volantis.git删除
.git/config
中的相关子模块信息1
2[submodule "themes/volantis"]
url = https://github.com/varm/hexo-theme-volantis.git删除
.git
文件夹中的相关子模块文件1
2
3rm -rf .git/modules/hexo-theme-volantis
--如果是 Windows cmd 命令行,使用
rmdir .git/modules/hexo-theme-volantis