Git和Maven的子模块简单实践

 更新时间:2018年12月24日 11:40:26   作者:isea533  
今天小编就为大家分享一篇关于Git和Maven的子模块简单实践,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

当一个产品或者项目由大量独立模块组成时,想要从 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

总结

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

相关文章

  • Java for循环性能优化实现解析

    Java for循环性能优化实现解析

    这篇文章主要介绍了Java for循环性能优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • JAVA后端应该学什么技术

    JAVA后端应该学什么技术

    这篇文章主要介绍了JAVA后端应该学什么技术,对JAVA感兴趣的同学,可以规划一下
    2021-04-04
  • Spring超详细讲解创建BeanDefinition流程

    Spring超详细讲解创建BeanDefinition流程

    Spring在初始化过程中,将xml中定义的对象解析到了BeanDefinition对象中,我们有必要了解一下BeanDefinition的内部结构,有助于我们理解Spring的初始化流程
    2022-06-06
  • SpringMVC基于配置的异常处理器

    SpringMVC基于配置的异常处理器

    这篇文章主要为大家介绍了SpringMVC基于配置的异常处理器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

    java使用ffmpeg实现上传视频的转码提取视频的截图等功能(代码操作)

    这篇文章主要介绍了java使用ffmpeg实现上传视频的转码,提取视频的截图等功能,本文图文并茂给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • MyBatis 如何使项目兼容多种数据库的解决方案

    MyBatis 如何使项目兼容多种数据库的解决方案

    要想做兼容多种数据库,那毫无疑问,我们首先得明确我们要兼容哪些数据库,他们的数据库产品名称是什么,本次我们讲解了一套使项目兼容多种数据库的方案,对MyBatis项目兼容多种数据库操作方法感兴趣的朋友一起看看吧
    2024-05-05
  • Java并发之AQS与自旋锁详解

    Java并发之AQS与自旋锁详解

    这篇文章主要介绍了Java并发之AQS与自旋锁详解,类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch,需要的朋友可以参考下
    2023-10-10
  • java实现马踏棋盘算法(骑士周游问题)

    java实现马踏棋盘算法(骑士周游问题)

    这篇文章主要为大家详细介绍了java实现马踏棋盘算法,解决骑士周游问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 关于Java反编译字节码文件

    关于Java反编译字节码文件

    将高级语言翻译成汇编语言或机器语言的过程Java语言中的编译一般指将Java文件转换成class文件顾名思义反编译就是编译的逆向过程其实我们常用的开发工具(例如:IDEA、Eclipse)都带有反编译功能,需要的朋友可以参考下
    2023-05-05
  • SpringBoot+Eureka实现微服务负载均衡的示例代码

    SpringBoot+Eureka实现微服务负载均衡的示例代码

    这篇文章主要介绍了SpringBoot+Eureka实现微服务负载均衡的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11

最新评论