Git Submodule 命令使用教程
引言
在探索 Hugo 建站过程中,我了解到了 git submodule
这一命令。git submodule
允许将一个 Git 仓库作为另一个 Git 仓库的子模块。这在使用第三方模块或库时尤其有用,因为它允许你在不需要自行维护这些模块的情况下,轻松同步和更新它们。
Git Submodule 的使用场景
Git Submodule 主要用于以下场景:
- 第三方库的集成与管理: 当项目依赖于第三方库或模块时,使用子模块可以避免直接复制代码到项目中,便于管理和更新。
- 项目组件化: 对于大型项目,将不同的功能模块化并存储在不同的仓库中,然后通过子模块的方式集成到主项目中,可以提高项目的可维护性和复用性。
使用 Git Submodule 克隆仓库
创建和添加子模块
-
假设有两个仓库:主仓库
body
和子模块仓库leg
。 -
克隆主仓库到本地,并用
submodule
添加子模块1
2
3git clone git@github.com:YourUsername/body.git
cd body
git submodule add git@github.com:YourUsername/leg.git -
添加子模块后,会看到多了两个文件:子模块
leg
和配置文件.gitmodules
。提交这些更改并推送到远端。 -
进入仓库查看,
leg
只是快捷方式,连接到leg
库的地址, 版本库中不会存第三方引入库的实体文件, 而是通过.gitmodules
的方式存储地址, 当下载到本地运行的时候才会再拉取文件。
克隆带有子模块的仓库
- 克隆带有子模块的仓库:
1
2git clone git@github.com:YourUsername/body.git newbody
cd newbody/ - 此时,子模块文件夹为空
- 初始化并更新子模块:或者使用
1
2git submodule init
git submodule update--recursive
参数一步到位:1
git clone --recursive git@github.com:YourUsername/body.git newbody
更新子模块
若子模块有更新,需要在主仓库中同步更新:
1 | git submodule update --remote |
子模块的修改和提交
如果需要对子模块进行修改并提交,通常需要经历以下过程:
-
在子模块目录中进行更改。
-
提交更改到子模块的仓库。
-
在主仓库中提交子模块的更新。
删除子模块
删除子模块较繁琐,步骤如下:
-
rm -rf <子模块目录>
删除子模块目录及源码1
2cd newbody/
rm -rf leg/ -
删除项目目录下
.gitmodules
文件中子模块相关条目
-
vi .git/config
删除配置项中子模块相关条目
-
rm .git/module/<子模块名> -rf
删除模块下的子模块目录,每个子模块对应一个目录.
注:之后如果添后子模块命令报错,执行
git rm --cached <模块名>
再提交即可。
参考资料
- SegmentFault:如何把一个工程中的某个目录添加为 git submodule
- CSDN:git 中 submodule 子模块的添加、使用和删除
- 简书:git submodule 的使用
文章采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 学习乐园!
评论