dwb人生如戏
2022 / 02 / 27

git-submodule使用指南

起因是这样的,有时候我们的项目中又使用到了另外一个项目,说白点就是就是一个git项目中包含了其他子git项目。

引入

假设我们有两个及以上项目,一个叫notebook,一个叫loho-docsnotebook是主工程,loho-docs是子模块工程。我们希望在notebook中添加loho-docs,而又保持loho-docs的独立版本控制。

创建submodule

使用 git submodule add <submodule_url> <project_name> 命令可以在项目中创建一个子模块

notebook的根目录下执行如下命令

git submodule add https://gitee.com/xxx/loho-docs loho-docs

这时候,项目仓库中就会多出两个文件:.gitmodulesloho-docs

L7ojjt

.gitmodules的信息

[submodule "loho-docs"]
	path = loho-docs
	url = https://gitee.com/xxx/loho-docs

然后提交一下commit,提交到远程看一下效果。

git commit -am "增加文档子模块" 
git push origin master

此时再看git库,这里的loho-docs文件夹,点击会跳到loho-docs的git库,至此submodule添加成功。

TZL33p

注意此时用git clone 拉取 notebook项目是不带 submodule 代码的。需要再执行

git submodule init
git submodule update

则会根据主项目的配置信息(.gitmodules),拉取更新子模块中的代码。

更新submodule

如果我们在主项目和子项目做了修改的话,他其实是分开commit的,可以分开提交。

RSEXPO

删除submodule

//  修改 .git/config ,删除 loho-docs 文件下所有的代码
git submodule deinit loho-docs

//  .gitmodule 文件内容清空,删除 Water 文件夹
git rm Water
//  提交代码
git commit -m "rm Water"
//  推到远程
git push origin master

此时子模块就会被删除。