Git和Maven的子模块简单实践

小编 2026-07-13 阅读:1886 评论:0
当一个产品或者项目由大量独立模块组成时,想要从 Git 挨个下载下来导入 IDE 查看并不容易,此时可以结合使用 Git 和 Maven 的子模块来处理这种场景。 通过 Git 子模块可以自动批量下载所有关联的...

当一个产品或者项目由大量独立模块组成时,想要从 Git 挨个下载下来导入 IDE 查看并不容易,此时可以结合使用 Git 和 Maven 的子模块来处理这种场景。

通过 Git 子模块可以自动批量下载所有关联的项目,通过 Maven 子模块可以批量导入到 IDE 中,结合这两者可以很容易的管理和查看项目。

创建子模块项目

打开 Git Bash,创建一个空目录并进入:

$ mkdir erp-submodules
$ cd erp-submodules/

把当前目录初始化为 Git 仓库

$ git init

添加所有子模块(可以一次输入多行命令,注意看最后一行命令是否执行):

$ git submodule -b master add http://IP/auto-erp/purchase.git
git submodule -b master add http://IP/auto-erp/checkup.git
git submodule -b master add http://IP/auto-erp/task.git
git submodule -b master add http://IP/auto-erp/sale.git
Cloning into \'purchase\'...
remote: Counting objects: 5151, done.
remote: Compressing objects: 100% (86/86), done.
remote: Total 5151 (delta 49), reused 108 (delta 30)
Receiving objects: 100% (5151/5151), 1.12 MiB | 0 bytes/s, done.
Resolving deltas: 100% (2269/2269), done.
Checking connectivity... done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.

等待所有项目下载完成。

此时就创建了所有的子项目,为了方便以 MAVEN 方式导入全部项目,使用子模块配置。

在当前项目下面添加 pom.xml,内容如下:

<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.github.abel533</groupId>
  <artifactId>erp-modules</artifactId>
  <version>1.0.0-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
 <!-- 所有子模块 -->
    <module>purchase</module>
 <module>barch</module>
 <module>checkup</module>
 <module>task</module>
 <module>sale</module>
 <module>packing</module>
 <module>logistics</module>
  </modules>
</project>

此时项目已完成,提交本地更改并上传到 git 服务器。

# 添加所有
$ git add -all
# 提交
$ git commit -m \'first commit\'
# 添加远程仓库地址
$ git remote add origin 创建好的仓库地址
# 推送
$ git push origin master

检出导入项目

刚刚按照上面步骤操作后,本地是可以用了,但是如果其他成员想下载,就需要检出。

在要检出的目录中,打开 git bash,输入下面的命令检出项目:

$ git clone --recursive 仓库地址
# 以下为部分输出日志
Cloning into \'erp-modules\'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
Checking connectivity... done.
Submodule \'ERPcrm\' (http://IP/auto-erp/ERPcrm.git) registered for path \'ERPcrm\'
Submodule \'accountNew\' (http://IP/auto-erp/accountNew.git) registered for path \'accountNew\'
Submodule \'barch\' (http://IP/auto-erp/barch.git) registered for path \'barch\'
Submodule \'checkup\' (http://IP/auto-erp/checkup.git) registered for path \'checkup\'
Submodule \'contract\' (http://IP/auto-erp/contract.git) registered for path \'contract\'
Cloning into \'ERPcrm\'...
remote: Counting objects: 1651, done.
remote: Compressing objects: 100% (274/274), done.
remote: Total 1651 (delta 139), reused 447 (delta 70)
Receiving objects: 100% (1651/1651), 265.91 KiB | 0 bytes/s, done.
Resolving deltas: 100% (494/494), done.
Checking connectivity... done.
Submodule path \'ERPcrm\': checked out \'26686570bc1f22627f717830599ac77248014b87\'
Cloning into \'accountNew\'...
remote: Counting objects: 1850, done.
remote: Compressing objects: 100% (689/689), done.
otal 1850 (delta 866), reused 1624 (delta 664)
Receiving objects: 100% (1850/1850), 496.70 KiB | 0 bytes/s, done.
Resolving deltas: 100% (866/866), done.
Checking connectivity... done.

此时所有子模块都自动下载了,但是所有子模块都没有选择分支,如果不选择分支会导致项目混乱,所以下面切换分支,并且更新。

# 进入 clone 下来的目录
$ cd erp-modules/
# 执行下面的命令 git submodule foreach <命令>
$ git submodule foreach git checkout master && git pull origin master

所有子模块都切换到了 master 分支并且进行了更新。可以将项目导入 IDE 了。

在后续使用的时候,要随时注意子模块的分支,防止意外导致的错误。

利用git submodule foreach <命令> 可以很方便的对子模块批量执行命令。

删除 Git 子模块比较麻烦,可以参考下面地址:
https://gist.github.com/myusuf3/7f645819ded92bda6677

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表