git(三) Submodule管理子模块

版权声明:本文为博主原创文章,转载请注明出处!!!!!!!!!! https://blog.csdn.net/qq_21434959/article/details/83120022

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项目存在父项目中,子项目可以有自己的独立的commitpushpull。而父项目以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'

源码地址:

父项目地址

子项目地址

猜你喜欢

转载自blog.csdn.net/qq_21434959/article/details/83120022