Git和Maven的子模块简单实践
作者:isea533 发布时间:2023-09-22 01:45:55
当一个产品或者项目由大量独立模块组成时,想要从 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
来源:https://blog.csdn.net/isea533/article/details/85065086


猜你喜欢
- ?随着互联网的快速发展,各种组件层出不穷,需要框架集成的组件越来越多。每一种组件与Spring容器整合需要实现相关代码。SpringMVC框
- 本文讲述了Java开发人员需知的十大戒律。分享给大家供大家参考,具体如下:作为一个Java开发人员提高自己代码的质量,可维护性,是个恒久不变
- Spring Boot 程序优化一、延迟初始化Bean一般在 SpringBoot 中都拥有很多的耗时任务,比如数据库建立连接、初始线程池的
- 关于Android的webview,用过的想必都不会陌生。这里我就不说webview的基本用法了,想要知道的可以去网上百多,有很多介绍web
- 本文实例为大家分享了SeekBar拖动条的应用代码,供大家参考,具体内容如下目标效果在该页面中放一个拖动条的状态提示信息,一个拖动条以及一个
- Maven 翻译为"专家"、"内行",是 Apache 下的一个纯 Java 开发的开源项目。基于项
- 日常工作中 Map 绝对是我们 Java 程序员高频使用的一种数据结构,那 Map 都有哪些遍历方式呢?这篇文章阿粉就带大家看一下,看看你经
- 本文实例讲述了java版微信公众平台消息接口应用方法。分享给大家供大家参考,具体如下:微信公众平台现在推出自动回复消息接口,但是由于是接口内
- 本地仓库是指存在于我们本机的仓库,在我们加入依赖时候,首先会跑到我们的本地仓库去找,如果找不到则会跑到远程仓库中去找。对于依赖的包大家可以从
- 本文介绍Android中Intent的各种常见作用。1 Intent.ACTION_MAINString: android.intent.a
- 1、题目给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。示例:提示:你可以假设 k 总是有效的,在输入数组不为空
- 本文将通过阅读spring源码,分析@Bean注解导入Bean的原理。从AnnotationConfigApplicationContext
- 概况本文主要给大家介绍了通过JDK源码学习InputStream的相关内容,JDK 给我们提供了很多实用的输入流 xxxInputStrea
- 1. 背景Java Persistence with Hibernate 在12.2.1小节使用如下例子描述 n+1查询问题:List<
- 本文实例分析了C#实现的24点游戏。分享给大家供大家参考。具体如下:1. 24点游戏规则及算法规则:给出4个自然数,找出能够求出24的四则运
- UI编程通常都会伴随事件处理,Android也不例外,它提供了两种方式的事件处理:基于回调的事件处理和基于 * 的事件处理。对于基于 * 的
- 1、什么是内存泄漏内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏。随着
- 下面代码看下java判断http地址是否连通private boolean isOk(String url) {
- 开发语言:C#3.0 IDE:Visual Studio 2008 一、C#线程概述 在操作系统中一个进程至少要包含一个线程,然后,在某些时
- 在Mms中每个Thread都有其相应的联系人,但是threads表中并没有直接保存联系人的信息(号码或名字),而是保存一个叫做recipie