Git Submodule模块化使用总结

Posted wuwuFQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git Submodule模块化使用总结相关的知识,希望对你有一定的参考价值。

使用场景

当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能(模块化–不同于组件化)

创建Submodule

举个栗子🌰,我们要创建一下结构的项目

mainProject //主工程

moduleA //子工程A
moduleB //子工程B

创建Git远程仓库

主工程和子工程都要分别创建各自的远程库

cd mainProject
git init
git add .
git commit -m "frist commit"
git remote add origin https://github.com/***/mainProject.git
git push -u origin main

如果已有远程库,就克隆下来

cd 空文件夹
git clong https://github.com/***/mainProject.git

引入submodule模块

cd mainProject
git submodule add https://github.com/***/moduleA.git moduleA
git add .
git commit -m "add submodule"
git push
--------------------------
cd mainProject
git submodule add https://github.com/***/moduleB.git moduleB
git add .
git commit -m "add submodule"
git push

使用git status可以看到多了两个需要提交的文件,其中.gitmodules指定submodule的主要信息,包括子模块的路径和地址信息,moduleA指定了子模块的commit id,使用git diff可以看到这两项的内容。这里需要指出父项目的git并不会记录submodule的文件变动,它是按照commit id指定submodule的git header,所以.gitmodulesmoduleA这两项是需要提交到父项目的远程仓库的。

On branch main
Your branch is up-to-date with 'origin/main'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
	new file:   .gitmodules
	new file:   moduleA

使用Submodule

初始化

方法一,先clone父项目,再初始化submodule,最后更新submodule,初始化只需要做一次,之后每次只需要直接update就可以了,需要注意submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone https://github.com/***/mainProject.git mainProject
cd mainProject
git submodule init
git submodule update

方法二,采用递归参数–recursive,需要注意同样submodule默认是不在任何分支上的,它指向父项目存储的submodule commit id。

git clone https://github.com/***/mainProject.git  mainProject --recursive

修改更新

cd mainProject/moduleA
git add .
git commit -m "change moduleA"
git push
//然后更新主工程的submodule commit id
cd mainProject
git status
git diff
git add .
git commit -m "update submoduleA"
git push origin main

删除

可以打开.gitmodules文件,删除submodule相关的内容

[submodule "moduleA"]
      url = /Users/*******/moduleA.git

然后提交到远程服务器

cd mainProject
git add .
git commit -m "remove submodule"
git push

以上是关于Git Submodule模块化使用总结的主要内容,如果未能解决你的问题,请参考以下文章

[转]使用Git Submodule管理子模块

git submodule的使用

Git 子模块:git submodule

git中submodule子模块的添加使用和删除

Git学习Git如何Clone带有Submodule的仓库?

Git学习Git如何Clone带有Submodule的仓库?