近期项目中遇到一个git问题,想把一个公共库项目用共享模式让在多个工程中运用。SVN有外链模式,目录共享非常方便,无奈git不像svn可以直接通过外链模式把某个目录共享给其他工程,所以只能用submodule模式。

于是百度一下git submodule,发现好多博客都介绍,看的手痒,所以也就写一份git-submodule。

推荐:本博客需要有git应用基础的人阅读

一、工程应用模型

一般submodule应用时都是存在多个工程需要使用同一个公共模块,这个公共模块相对于主工程独立——独立仓库、分支、更改日志。

公共模块可以跟独立的仓库一样进行版本管理。

标题

二、构建git-submodule关系

标题

1. 分别为ProjectA、ProjectB、CommonModule三个工程创建git版本管理;

这里就不用写命令了,大家都明白。

2. 为工程ProjectA、ProjectB添加git-submodule子工程CommonModule;

例如为ProjectA操作,命令如下

操作预期:ProjectA添加CommonModule为git-submodule(目标目录:submodules/CommonModule)的命令如下,

$  git submodule add https://github.com/SweetTool/CommonModule.git submodules/CommonModule

操作结果:

在执行完项目后ProjecA在.git目录下的仓库地址:ProjectA/.git/modules/submodules/CommonModule

.git文件的内容:

gitdir: ../../.git/modules/submodules/CommonModule

如图

标题

运行命令查看submodule状态( git submodule status)

ProjectA$ git submodule status

+f698c972e74999ac2713b85ffcc187c4b9863432 submodules/CommonModule (heads/master)

三、git-submodule的更新维护

只需要到submodule所在的工程文件目录下运行git命令即可

例如ProjectA就到目录:ProjectA/submodules/CommonModule下运行git命令;当然,也可以用乌龟TortoiseGit软件在这个目录进行操作——更新、提交日志、切换分支。

标题

附录:三个工程的GitHub地址

https://github.com/SweetTool/CommonModule.git

https://github.com/SweetTool/ProjectA.git

https://github.com/SweetTool/ProjectB.git

附录二、目录结构

没有版本管理下的文件目录结构

./CommonModule
./CommonModule/ReadmeCommon.txt
./CommonModule/src
./CommonModule/src/CommonUtils.java
./ProjectA
./ProjectA/ReadmeA.txt
./ProjectA/src
./ProjectA/src/HelloA.java
./ProjectB
./ProjectB/ReadmeB.txt
./ProjectB/src
./ProjectB/src/HelloB.java

有git工程的目录结构

./CommonModule/.git/ORIG_HEAD
./CommonModule/.git/config
./CommonModule/.git/objects
./CommonModule/.git/HEAD
./CommonModule/.git/info
./CommonModule/.git/logs
./CommonModule/.git/description
./CommonModule/.git/hooks
./CommonModule/.git/refs
./CommonModule/.git/index
./CommonModule/.git/COMMIT_EDITMSG
./CommonModule/.git/FETCH_HEAD
./CommonModule/src/CommonUtils.java
./ProjectA/submodules/CommonModule
./ProjectA/.git/config
./ProjectA/.git/objects
./ProjectA/.git/HEAD
./ProjectA/.git/info
./ProjectA/.git/logs
./ProjectA/.git/description
./ProjectA/.git/hooks
./ProjectA/.git/refs
./ProjectA/.git/index
./ProjectA/.git/modules
./ProjectA/.git/COMMIT_EDITMSG
./ProjectA/src/HelloA.java
./ProjectB/submodules/CommonModule
./ProjectB/.git/config
./ProjectB/.git/objects
./ProjectB/.git/HEAD
./ProjectB/.git/info
./ProjectB/.git/logs
./ProjectB/.git/description
./ProjectB/.git/hooks
./ProjectB/.git/refs
./ProjectB/.git/index
./ProjectB/.git/modules
./ProjectB/.git/COMMIT_EDITMSG
./ProjectB/src/HelloB.java

git submodule详解相关推荐

  1. git cherry-pick 详解 —— Git 学习笔记 18

    git cherry-pick 详解 初识 git cherry-pick(拣选) 拣选会提取某次提交的补丁,之后尝试将其重新应用到当前分支上. 这种方式在你只想引入特性分支中的某个提交时很有用. 假 ...

  2. Git 原理详解及实用指南

    Git 原理详解及实用指南 什么是版本控制系统(VCS) 很多人认为 Git 难以理解的第一个门槛在于:所谓的「Git 是一个分布式版本控制系统」这句话的具体含义不够清楚.其实分布式版本控制系统(Di ...

  3. git 原理详解及实用指南_如何编写良好的提交消息:实用的Git指南

    git 原理详解及实用指南 To create a useful revision history, teams should first agree on a commit message conv ...

  4. GitHub使用教程详解(下)——Git的安装以及Git命令详解

    上一篇GitHub使用教程详解(上)--官网操作指南[翻译],是针对官网的guide进行了翻译,其实个人来说,我是很不喜欢那么操作的,又要等待页面加载,操作又慢!程序员嘛,还是直接敲入命令代码更迅速高 ...

  5. git命令详解( 四 )

    此篇为git命令详解的第四篇,话不多说,我们直接上知识点好吧 git Push 偏离的工作 gitPush: 此命令负责将你的变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录.一旦 git ...

  6. git amend详解和撤销

    git amend 详解和撤销 git amend详解 git amend 作用 git amend如何撤销 git amend详解 git amend 作用 git 在现在的开发中使用频繁,解决了很 ...

  7. java开发中常用的Git命令详解

    java开发中常用的Git命令详解(IDEA内如何操作) 一:写这篇文章的目的是什么? 二:使用场景在哪里? 1:当我们要使用idea去git仓库拉代码时,首先我们的idea得配置git工具 2:项目 ...

  8. git原理详解与实操指南_全网最精:学git一套就够了,从入门到原理深度剖析

    以上资源收集至互联网 如有侵权请联系删除 资源获取方式 扫码关注资源库公众号 回复密码'20190812' 即可获得 截图展示 课程信息 课程难度:中级 学习人数:148352 课程状态:已完结 时长 ...

  9. 【Git版本控制】Git命令详解

    文章目录 前言 1.展示帮助信息 2.回到远程仓库的状态 3.重设第一个 commit 4.查看冲突文件列表 5.展示工作区和暂存区的不同 6.展示暂存区和最近版本的不同 7.展示暂存区.工作区和最近 ...

  10. git 命令详解_再次学习Git版本控制工具

    微信公众号:PHP在线 Git 究竟是怎样的一个系统呢?为什么在SVN作为版本控制工具已经非常流行的时候,还有Git这样一个版本控制工具呢?Git和SVN的区别在哪儿呢?Git优势又在哪呢?下面PHP ...

最新文章

  1. 【学术相关】研究生哪些行为可以在导师那超加分?你做到了吗?
  2. 逻辑短路 java_逻辑操作符中的短路现象
  3. 谷粒商城RabbitMQ设计思想详解:消息队列双重保险设计
  4. void init(void) 分析 ! \linux-1.0\init\main.c
  5. textview加载html glide,TextView加载HTML,文字和图片
  6. 《Kali+Linux渗透测试的艺术》学习总结之----Kali Linux简介
  7. 一致性Hash简单介绍和使用
  8. LeetCode(620)——有趣的电影(MySQL)
  9. Linux命令解释之sed
  10. 4. CSS id 选择器
  11. 凸优化-真锥和分割超平面
  12. 【POJ 2689】Prime Distance【埃氏筛与线性筛】
  13. cap流程图_冲压工艺流程图+PFMEA+CP范例(中英文)
  14. spring中@Autowired注解的原理
  15. 机器学习算法——聚类3(k均值算法)
  16. 【bzoj4972】小Q的方格纸 前缀和
  17. 只有程序员才能读懂的西游记(不看后悔一生)
  18. 第四章:分支结构程序设计
  19. css如何绘制一个等边三角形
  20. IMU使用系列------imu_tools验证数据是否准确及安装是否准确

热门文章

  1. 对于xfire动态调用webservice接口
  2. java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
  3. mysql卸载报错1606_MySQL5卸载及重装出错问题记录
  4. [HEOI2015]定价 (贪心)
  5. HashTable、ConcurrentHashMap、TreeMap、HashMap关于键值的区别
  6. SPOJ 1811 Longest Common Substring
  7. C# 寻找数组中的最大子数组
  8. 【Spring-tx】关于spring事务的思考
  9. 解决jpa和hibernate的json序列化死循环问题
  10. thymeleaf使用总结