layout: blog
istop: true
title: “git Submodule管理子模块”
date: 2018-08-25
category: 版本控制
tags:
- 版本控制
使用场景
1). 公司的项目越来越多,通常需要提取一个公用的类库(如Model 层代码),但这个library 怎么和git 融合在一起方便管理呢?
- 可以采用Maven 依赖进行,但是Maven 操作的缺点是:每次共用类库的
更改
都需要重新打入Maven本地仓库。所以此方式pass
2).公用库
的抽离要解决的几个问题 - 如何要在git 项目中导入公用库?
- 其他项目修改了可以更新到远程的代码库中?
- 每个使用公用库的项目,如何
获取最新
的提交? - 如何在克隆的时候
自动导入
公用库?
用例
神马是Submodule?
git Submodule
是一个很好的多项目使用共同类库的工具,他允许类库项目做为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己的独立的commit
,push
,pull
。而父项目以Submodule的形式包含子项目,父项目可以指定子项目header,父项目中会的提交信息包含Submodule的信息,在clone父项目的时候可以把Submodule初始化
。
如何在项目中使用Submodule
这里举个实例进行说明,假设你有一个通用库git-module-sub和一个依赖于它的副项目git-module-parent
添加子模块命令
git submodule add [email protected]:anhusky/git-module-sub.git src/com/uu/husky
查看
git status
On branch master
Changes to be committed:
new file: .gitmodules
可以看到项目下多了一个文件.gitmodules
,包含了在父项目中公用模块的位置
和公用模块的url
,文件内容如下:
[submodule "src/com/uu/husky/entity"]
path = src/com/uu/husky/entity
url = [email protected]:anhusky/git-module-sub.git
将子模块添加进入父项目
git add .gitmodules
git commit -m '子模块导入'
git submodule init
git push
查看子项目id
➜ git-module-parent git:(master) git submodule
+f62224770e12ba9a39cabcf9b9a8492ee2bc6bd0 src/com/uu/husky/entity (heads/master)
修改Submodule
首先确定要有权限
假设
现在在父项目
,子模块导入成功后,子模块内容已经被修改O
在子模块中进行提交的基本操作
cd git-module-sub
git status
git add .
git commit -m '输入改动信息'
git push
进入父模块中,提交
获取状态,显示子模块更改了,我们需要提交一下让服务器端知道
git status
modified: src/com/uu/husky/entity (new commits)
git add .
git commit -m '子模块内容在父模块中更新了'
git push
更新Submodule
使用场景:别人改了公用模块中的东西
方法一
在父项目下直接运行
git submodule foreach git pull
方法二
在子项目中操作
cd git-module-sub
git pull
用在更新前后使用 git submodule,会发现 子模块id 更新了
克隆带有子模块
方式一
采用递归参数 --recursive
git clone [email protected]:anhusky/git-module-parent.git --recursive
使用idea 进行克隆的时候 后面加上 --recursive 参数即可
方式二
先克隆父项目,再初始化Submodule
git clone [email protected]:anhusky/git-module-parent.git
cd git-module-parent
git submodule init
更新Submodule
git submodule update
删除Submodule
git 并不支持直接删除Submodule需要手动删除对应的文件:
cd git-module-parent
git rm --cached git-module-sub
rm -rf git-module-sub
rm .gitmodules
更改git的配置文件config:
vim .git/config
可以看到Submodule的配置信息:
[submodule "git-module-sub"]
url = [email protected]:anhusky/git-module-sub.git
删除submodule相关的内容,然后提交到远程服务器:
git commit -a -m 'remove git-module-sub submodule'