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

在开发项目中可能会遇到这种问题:在你的项目中使用另一个项目,也许这是一个第三方开发的库,或者是你独立开发的并在多个父项目中使用的。简单来说就是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方式和普通方式相同。

git submodule 子模块的更多相关文章

  1. Git submodule - 子模块【转】

    子模块 有种情况我们经常会遇到:某个工作中的项目需要包含并使用另一个项目. 也许是第三方库,或者你独立开发的,用于多个父项目的库. 现在问题来了:你想要把它们当做两个独立的项目,同时又想在一个项目中使 ...

  2. Git submodule 子模块的管理和使用

    因为代码分了两个小组管理,一部分代码使用跨平台语言实现,一部分使用原生实现. 所以使用Git submodule 来进行管理. 1,查看/更新 子模块 $ git submodule add ssh: ...

  3. git submodule使用的笔记

    git submodule 子模块的应用: 以下为使用流程的一些笔记: 1. 首先你的工作区 mainPJ cd mainPJ git init echo "this is mainPJ&q ...

  4. 转:Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone ...

  5. Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone ...

  6. Git 子模块:git submodule

    imtianx 2018年03月08日阅读 2057 Git 子模块:git submodule 工作中,可能会遇到在一个Git仓库 中添加 其他 Git 仓库的场景.比如,在项目中引用第三方库.或者 ...

  7. 使用Git Submodule管理子模块

    转自:https://segmentfault.com/a/1190000003076028 使用场景 基于公司的项目会越来越多,常常需要提取一个公共的类库提供给多个项目使用,但是这个library怎 ...

  8. git 工具 - 子模块(submodule)

    From: https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97 子模块 有种情况我们经常 ...

  9. git submodule git 子模块管理相关操作

    Git 子模块操作相关的一些命令备忘: # 当使用git clone下来的工程中带有submodule时,初始的时候 submodule的内容并不会自动下载下来的,需执行如下命令: git submo ...

随机推荐

  1. IT人士如何扛起工作生活两座大山

    前言 当我们年轻时,初入职场,意气风发,恨不能倾尽所有精力工作,奋发图强.建功立业.当我们有了家庭,发现我亦凡人,事业家庭想两手抓,却两难兼顾.后来,我们发现工作生活两顾本身就是一个幻想,我们做的,只 ...

  2. Spark 中的机器学习库及示例

    MLlib 是 Spark 的机器学习库,旨在简化机器学习的工程实践工作,并方便扩展到更大规模.MLlib 由一些通用的学习算法和工具组成,包括分类.回归.聚类.协同过滤.降维等,同时还包括底层的优化 ...

  3. JVM监控jconsole

    1. 描述 ​ 程序在开发过程中,有可能会发生CPU飙高.内存溢出等问题或系统在后期调优阶段,不可避免的要监控JVM情况,JDK自带的Jconsole监控工具,结合Tomcat使用非常方便,占用内存小 ...

  4. springcloud-注册中心快速构建

    1. 场景描述 springcloud提供了一整套可行的构建分布式系统的方案,使的企业/开发人员能够快速沟通分布式系统,今天快速构建下springcloud的注册中心Eureka. 2. 解决方案 2 ...

  5. 微信小程序开发--API界面交互

    一.wx:showActionSheet(上拉菜单) 属性 类型 默认值 必填 说明 itemList Array.<string>   是 按钮的文字数组,数组长度最大为 6 itemC ...

  6. 摄像头驱动的使能配置、V4L2编程接口的设计应用

    摄像头采集子系统 一.摄像头驱动的使能配置 摄像头软件驱动构架 摄像头采集系统由上图所示,硬件(摄像头) -> 驱动(Linux内核配置中,选择支持V4L2的驱动选项) -> V4L2接口 ...

  7. SQL SERVER Suspect(质疑/挂起) 状态恢复

    数据库服务器,在断电时,偶尔会出现Suspect状态,导致数据库无法使用. 解决办法如下: 数据库名带‘[]’可以避免库名中带‘.’等特殊符号的情况. USE [master]GOALTER DATA ...

  8. 重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关

    重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关 引言 重复造轮子系列是自己平时的一些总结.有的轮子依赖社区提供的轮子为基础,这里把使用过程的一些觉得有意思的做个分享.有些思路或者方法在 ...

  9. PHP使用array_unique对二维数组去重处理

    去重,点这里,东西是好东西,就是有点懒.莫见怪

  10. webstorm mac 版破解

    一.打开终端,输入: sudo vim /etc/hosts 回车后输入密码,编辑 hosts 文件,如图: 二.进入编辑模式(按 i 键),在最后一行添加如下代码: 0.0.0.0 account. ...