为了方便各个子模块独立开发,或使用第三方不断更新的仓库,可以使用子模块来引用.

子模块对应的源码是子模块仓库的克隆.

git submodule 与 subtree对比

  1. git submodule
  • 允许其他的仓库指定以一个commit嵌入仓库的子目录
  • 仓库 clone下来需要 init 和 update
  • 会产 .gitmodule 文件记录 submodule 版本信息
  • git submodule 删除起来比较费劲
  1. git subtree
  • 避免以上问题
  • 管理和更新流程比较方便
  • git subtree合并子仓库到项目中的子目录。不用像submodule那样每次子项目修改了后要init和update 。万一哪次没update就直接add . 将.gitmodule 也 commit上去就悲剧了
  • git v1.5.2以后建议使用git subtree

用法

假设P1项目、P2项目共用S项目

  1. 关联Subtree

    要求working tree是clean的,可以通过git status查看,如果没有staged的东西则可以进行subtree操作.

cd P1项目的路径

git subtree add --prefix=<S项目的相对路径> <S项目git地址> <分支> --squash

解释:--squash意思是把subtree的改动合并成一次commit,这样就不用拉取子项目完整的历史记录。--prefix之后的=等号也可以用空格。

执行这一步时,会clone该子项目的代码到本地,此时通过git log可以查看到如下类似日志:

Squashed 'extern/darknet/' content from commit cdf3200

    git-subtree-dir: extern/darknet
git-subtree-split: cdf32005c1cf5600be56fe4b35bc1dddc9173b7a

然后执行git push操作更新到远程,commit日志如下:

 Merge commit '34ecafc2a199a9fd3d7ae1facd831156ebc1f860' as 'extern/darknet'
  1. 更新代码

    P1、P2项目里各种提交commit,其中有些commit会涉及到S目录的更改,但是没关系

  2. 提交更改到子项目

cd P1项目的路径

git subtree push --prefix=<S项目的相对路径> <S项目git地址> <分支>

Git 会遍历步骤2中所有的commit,从中找出针对S目录的更改,然后把这些更改记录提交到S项目的Git服务器上,并保留步骤2中的相关S的提交记录到S仓库中

4) 更新子目录

cd P2项目的路径

git subtree pull --prefix=<S项目的相对路径> <S项目git地址> <分支> --squash

最新文章

  1. Build2016上值得一看的大数据相关Session
  2. 前端js文件合并三种方式
  3. Windows 运行时组件
  4. easyui只打开一个tab
  5. springMVC返回json
  6. 安装redis监控
  7. Cocos3d-x 发布第一版
  8. LeetCode 581. Shortest Unsorted Continuous Subarray (最短无序连续子数组)
  9. C 程序实现密码隐秘输入 linux系统可执行
  10. python基础学习笔记一
  11. [原创]SecureCRT终端软件连接VMware Workstation Pro虚拟机
  12. MongoDB 错误汇总
  13. 前段时间碰到的一些问题(免费WiFi设置+fiddler对手机进行抓包+fiddler抓不到https的请求)
  14. mysql兼容emoji表情存取
  15. 洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
  16. jenkins windows slave 构建c/c++代码
  17. Python dict 将元祖转成字典
  18. Slava and tanks 877C
  19. Dapper使用总结
  20. xtrabackup安装使用及原理

热门文章

  1. Linux下批量ping某个网段ip的脚本
  2. mysql 多列索引的生效规则,生成1000w数据的存储过程
  3. 基于SSH框架的考勤管理系统的设计与实现
  4. MySql修改root密码以及允许外网访问
  5. Cron任务调度CronNET
  6. 2017[BUAA软工]第0次个人作业
  7. Spring Cloud的Zuul的使用问题
  8. number (1)eclipse 连接数据库报错 数据库信息不对导致的出错
  9. vue render function &amp; dataset
  10. Freemarker空值判断