Git SubModule使用

一、背景

在实际工作中,我们经常会遇到有些复杂的项目,根据功能拆分成很多子模块,或者同一个子模块在不同的项目中被依赖使用。

一旦子模块有更新,所有工程里的相关代码都要更新,重复工作而且可能出错。

为了解决这个问题,我们可以使用Git的submodule功能。

子模块( submodule )是一个内嵌在 git 仓库(父工程)中的 git 仓库。

通过子模块,可以将外部的仓库作为子目录放到自己的仓库中,既能方便的管理依赖,又可以保持依赖本身的独立性。

目的及原因:社区子服务在githup中是不同的项目,为了项目整体性以及使用jenkins 共享库部署项目方便,新增了主项目zhsq-master,把子服务集成在一起维护。

但是zhsq社区主干项目,使用版本多,维护性和维护日志的完整性,考虑使用该方案,集成到主项目中。

二、使用

主项目: zhsq-master

子模块项目: e-v1.0

在主项目zhsq-maste中添加子模块项目: e-v1.0,同时子项目有其独立的版本控制。

1.添加子模块

首先主项目clone到本地。

进入主项目zhsq-maste目录,使用以下命令创建一个子模块

此时项目仓库中会多出两个文件:

a.    e-v1.0   : 子模块的文件夹

b.    .gitmodules:保存子模块的相关信息

2.使用带有子模块的项目

后续使用者clone主项目后,子模块默认是空的,需要我们在项目根目录下执行如下命令完成子模块的下载

或者

3.修改别名

如本项目的子模块是e-v1.0,这个是不符合我们项目模块命名的,使用命令更改为zhsq

4.同步更新

子模块是不断在维护更新的,在主项目里,一般不建议去改动子模块。

子模块在分支更新,需要把代码合并到主干。方可。

子模块远程有更新,如果想保持本地子项目与远程仓库版本一致,就需要用以下命令更新子模块至远程仓库的最新版。

注意:命令 git submodule update 是更新主项目内子模块到最新版本,即与主项目远程仓库记录的子模块版本一致。

6. 删除子模块

a. 执行 git submodule deinit zhsq,自动在 .git/config 中删除了子模块相关信息。

这个命令如果添加上参数 --force,则子模块工作区内即使有本地的修改,也会被移除。

b. 执行 git rm zhsq,移除了 zhsq 文件夹,并自动在 .gitmodules 中相关信息。

此时,主项目中关于子模块的信息基本已经删除(可能.git/modules 目录下还有残余),但是不影响,继续commit,push,完成对子模块的删除。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值