git 子模块使用

前几天调研了一下 hugo,准备后边把自己的博客迁移过去。hugo 教程中新增主题推荐通过 git 子模块的方式(前提是原始文件就已经在一个 git 项目下),比如我要新增一个名字叫 zen 的主题,可以通过以下命令进行安装:

1
git submodule add https://github.com/frjo/hugo-theme-zen.git themes/zen

这个命令会将主题仓库中的文件 clone 到 themes/zen 路径下,同时会在我的的仓库根路径下新建一个 .gitmodules 文件,之后 add 其他子模块时,会往这个文件中追加数据,格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
[submodule "themes/zen"]
path = themes/zen
url = https://github.com/frjo/hugo-theme-zen.git themes/zen
[submodule "themes/cleanwhite"]
path = themes/cleanwhite
url = https://github.com/zhaohuabing/hugo-theme-cleanwhite.git
[submodule "themes/anatole"]
path = themes/anatole
url = https://github.com/lxndrblz/anatole
[submodule "themes/jane"]
path = themes/jane
url = https://github.com/xianmin/hugo-theme-jane.git

我们需要把 .gitmodules 文件加入到 git 的版本控制中。

子模块常用管理命令

更新子模块:

1
git submodule update --recursive --remote

在新环境中拉取所有子模块代码

首次在一个新的环境中 clone 我们的仓库后是不带子模块代码的,可以通过下边这个命令来把所有子模块代码拉下来:

1
git submodule update --init --recursive