git submodule详解

    近期项目中遇到一个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软件在这个目录进行操作——更新、提交日志、切换分支。

uploading.4e448015.gif

标题

附录:三个工程的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

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值