git submodule 子模块

背景:为什么要用子模块?

在开发项目中可能会遇到这种问题:在你的项目中使用另一个项目,也许这是一个第三方开发的库,或者是你独立开发的并在多个父项目中使用的。简单来说就是A同学开发了一个模块,被B\C同学共同调用,,可能就形成了这种模块调用关系。

然后就产生了一个问题:我想将两个项目单独处理。但是又需要再其中一个中使用另一个。

解决方案

git给了一个处理方案--子模块

  • 子模块允许将一个git仓库作为另一个git仓库的子目录,他能让你将另一个仓库克隆到自己的项目中区去,并且保持提交的独立。
  • 子模块关键字:git submodule

如何使用子模块

假如我有两个仓库,module(目标仓库)和submodule(子模块仓库)。

在现有的仓库中加入子模块

git submodule add https://gitee.com/Hancoson/submodule.git module

  • 现在在module项目子目录中就会有一个submodule子模块。
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)
    new file:   .gitmodules
    new file:   submodule

我们会发现多两个新的文件,首先是.gitmodules文件。这个文件是一个配置文件,保存了项目URL和已经拉取的本地目录之间的映射

  • 查看.gitsubmodule文件 cat .gitsubmodule
[submodule "submodule"]
  path = submodule
  url = https://gitee.com/Hancoson/submodule.git

如果有多个子模块,文件里会有多个条目。但是这个文件个其他文件一样也是处于版本管理控制之下的,就像.gitignore文件一样,这样该子模块是和其他们文件一样可以被推送和拉取。这也是克隆该项目获知子模块项目来源的途径。

  • 提交增加的子模块到该项目的远程仓库中

commit 方式和普通提交的方式相同

  • 克隆一个带有子模块的项目

git clone <url>克隆这个项目时,默认会包含该子模块的所有目录,但是目录中不会有任何文件,这是需要运行两个命令:

  1. git submodule init 用来初始化本地配置文件;
  2. git submodule update用来拉取module目录中的所有数据,并检测出你上层项目所列的合适的提交。
$ git submodule init
Submodule 'submodule' (https://gitee.com/Hancoson/submodule.git) registered for path 'submodule'
$ git submodule update
Submodule path 'submodule': checked out '471741e958c2ef0096ad5971c264041a9295ce3b'
  • 修改子模块

切换到要修改代码的子模块,修改代码,push方式和普通方式相同。

posted @ 2019-08-15 17:33  阿豪的girl  阅读(1405)  评论(0编辑  收藏  举报