git子模块 submodule 使用

近真是为了笔记犯愁,平时零零散散记录了笔记,没时间整理,也没时间看,主要是也没有地方看。主要原因是我采用Quiver作为平时记笔记的软件,但是不支持手持设备同步。最近准备整理整理笔记,把笔记发到博客中。由于很久之前采用hexo,而且自己很久不维护了,导致昨天生成文件的时候没有html产生,用debug也看不出毛病。随即怒换hugo。hugo发布和主题都采用git submodule功能,顺便记录之。

主项目初始化

git 初始化如下:

1
2
3
4
5
6
7
git init 
# 编写几个文件
git add .
git commit -m "xxxx"
git remote set-url origin git@github.com/foo/bar.git
git origin remote set-url git@github.com/foo/bar.git //same as before
git push

通过以上命令可以得到一个空项目。接下来就在该空项目上面使用git子模块submodule功能。

引入子模块

引入git子模块submodule采用以下三个步骤:

  1. 先采用add命令添加相应的仓库到本地目录
  2. init初始化
  3. update更新

具体例子如下:

1
2
3
4
5
git submodule add -b master git@github.com/foo/baz.git subdir
# hugo举例主题例子
git submodule add https://github.com/reuixiy/hugo-theme-meme.git themes/meme
git submodule init
git submodule update

存储结构

初始化完成后看看配置文件:

cat .gitmodules

应该得到如下信息;这里用hugo的meme主题举例子

[submodule "themes/meme"]
	path = themes/meme
	url = https://github.com/reuixiy/hugo-theme-meme.git
cat .git/config

获得内容如下:

[submodule "themes/meme"]
	url = https://github.com/reuixiy/hugo-theme-meme.git
	active = true

查看子模块的git信息,跟.git目录一致。是不是瞬间开启套娃模式

ls -al .git/modules
ls -al  submodule #子模块所在目录

删除子模块

如果配置错误,没有采用git命令删除的,则可能会出现already exists in the index,这样只需要检查以上的文件是否存在相关信息,删除账号就可以重新建立submodule了

1
2
git submodule deinit themes/ananke
Submodule 'themes/ananke' (https://github.com/budparr/gohugo-theme-ananke.git) unregistered for path 'themes/ananke'
# 删除目录文件
git rm --cached themes/ananke

see more

updatedupdated2021-03-182021-03-18