之前发布了git submodule使用指南(一),今天这个第二篇,会写一些修改方面的操作和我的理解。

我个人认为,子模块在使用的过程才是最值得注意的地方,所以也没有跟上面的内容一起作为“增删改查”系列写下去。 “改” 我认为是最重要的一环。其中又可以分为:

  1. 对本地的子模块进行修改
  2. 更新他人修改的子模块内容

对本地的子模块进行修改

上面提到更新子模块的操作

git submodule update --remote
复制代码

但是此时的子模块是出于一个特殊的状态,虽然上游的变化被更新到了本地,但是本地子模块会处于一个游离的HEAD状态。

在HEAD状态下,如果将本地修改的内容进行commit,是不会“附着”到任何分支上的。游离的内容,会在切换分支之后消失。

那怎么操作才是正确的呢?

  1. 先进入子模块,然后检出一个分支。
  2. 再执行commit等本地操作
  3. 执行git submodule update —remote —merge,将上游的变化合并到本地的这个分支上。如果你忘记—rebase或—merge,Git 会将子模块更新为服务器上的状态。并且会将项目重置为一个游离的 HEAD 状态。要弥补这个错误的话,重新执行1和3就可以了。
  4. 如果本地的文件跟上游文件出现冲突,则按照普通解决办法解决了再提交就好了。
  5. 发布改动(推送):在父仓库执行git push时添加--recure-submodule 参数,此参数表示递归子模块,可以设置为2个值“check”和“on-demand”。check会使没推送子模块的父仓库本身推送失败。而on-demand会尝试自动推送子模块后再推送父仓库,如果子模块由于其他原因失败,那么父仓库也会推送失败。

合并子模块的改动

根据Gitbook的描述,这是当同一分支在本地和上游出现了不同分叉,需要进行合并的时候,并且二者不是祖先和后代的关系(或者说不是一条分子上的提交)。

操作方法如下:

  1. 对上游的提交,进行检出分支
  2. 将1检出的分支,合并到本地
  3. 解决冲突
  4. 回到主项目
  5. 检查子模块的记录
  6. 解决子模块冲突
  7. 提交主仓库合并

一些我个人的理解

子模块的使用上面说得可能还是有点比较绕,我个人认为比较合适我们团队的子模块工作流应该比较简单。

  1. 主项目需要在自模块上开发新功能时,需要在主项目内的子模块开新分支,然后进行开发
  2. 子模块的代码需要独立提交,形成commit信息记录在主仓库
  3. 由于主项目最终也是需要进行打包的,所以子模块的版本只要是基于master,就认为是可信的
  4. 最后主项目的整个版本经过验证需要上线后,则将子模块的分支合并到子模块的master分支上,那么下一个进行子模块开发的人,就会包含到最新的代码

转载于:https://juejin.im/post/5cae05e25188251b19486e8d

Git submodule使用指南(二)相关推荐

  1. git submodule 使用场景汇总

    文章目录 1. 前言 2. 基础命令介绍 2.1 场景一:已有仓库,添加一个子模块 2.2 场景二:已有仓库,添加一个子模块的特定分支 2.3 场景三:已有仓库,更新子模块内容 2.4 场景四:已有仓 ...

  2. Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能. 常用命令 git clone ...

  3. 【git】Git Submodule管理项目子模块

    文章目录 1.概述 2. 使用场景 3. 如何使用 3.1. 创建带子模块的版本库 3.2. 克隆带子模块的版本库 3.3. 修改子模块 3.4. 更新子模块 3.5. 删除子模块 4.删除子模块 5 ...

  4. git下载子模块命令git clone --recursive和git submodule update --init

    目录 方法一:git clone --recursive 方法二:git submodule update --init 有时github上的工程可能会包含一些子模块,例如 这时候如果你只是用下面的命 ...

  5. git submodule用法(超简单体验)

    前言 当我们的项目很大很复杂的时候,需要将各个模块文件进行抽离,以此来降低项目文件之间的耦合程度.(当然你项目不大不复杂也可以使用,看个人喜好啦!!!)这个时候就可以使用git submodule来对 ...

  6. npm install mysql 报错_npm遇到的问题--npm install 执行报错 /bin/git submodule update -q --init --recursive...

    1.执行npm i 安装依赖时,报错:cannot read property 'match' of undefined 据说是npm本地缓存导致 解决方案: rm -rf package-lock. ...

  7. WPF实用指南二:移除窗体的图标

    原文:WPF实用指南二:移除窗体的图标 WPF没有提供任何功能来移除窗体上的icon图标.一般的做法是设置一个空白的图标,如下图1: 这种做法在窗体边框与标题之间仍然会保留一片空白. 比较好的做法是使 ...

  8. git submodule 删除及更新URL

    git submodule 删除及更新URL 转载 2016年03月08日 10:27:21 删除一个submodule 1.删除 .gitsubmodule中对应submodule的条目 2.删除 ...

  9. git submodule获取子模块

    从github上获取工程,经常会出现依赖其它github上代码的情况,这时如果每一个都手动下载,实在太麻烦了.其实git给我们提供了相互引用的功能,可以在工程中直接引入其它的代码库,这样可以保证每次使 ...

  10. 使用git submodule

    git submodule 引用 $ git help submodule $ git submodule add https://github.com/aditya-grover/node2vec. ...

最新文章

  1. mysql7 zip windows_mysql 5.7 windows zip 版本安装配置
  2. 慧鱼机器人编程语言的特点_慧鱼机器人课程设计报告.doc
  3. python 车牌识别简单_ZKTeco 智能车牌识别 停车如此简单
  4. 如何正确的在项目中接入微信JS-SDK
  5. java n-ide 支持库,Android N是否要求IDE可以与Java 1.8或更高版本一起运行?
  6. 设计模式示例_责任链设计模式示例
  7. ubuntu Qt Creator不能输入中文
  8. spark sql select selectExpr简析
  9. matlab影像阿伯斯投影,D3.js 世界地图(一)投影方式
  10. 当后台返回的图片在前端加载不出来时,前端做默认图片展示
  11. 国内视频监控芯片方案分析
  12. 【二极管】稳压二极管全面分析
  13. IReport问题的整理
  14. 梁念坚与鲍尔默大唱反调
  15. CityEngine2018正版免费申请试用教程
  16. 普通人学会Python到底具体能做什么呢?
  17. win10安装的es设置自启动时报错Failed starting ‘elasticsearch-service-x64‘ service
  18. SMB交换机、接入交换机、汇聚交换机、核心交换机
  19. C# 读取XML文件的几种方式
  20. 尤雨溪和Vue的那些事

热门文章

  1. dll,sys文件被认定为病毒后如何删除
  2. 游戏加加导致cpu降频
  3. Win10找回自带的Windows照片查看器:打开jpg、png、gif格式的图片
  4. 2021年8月NOC全国中小学信息技术创新与实践大赛 软件创意编程小学高年级组Python决赛题解析
  5. java与wps_java能否wps调用页码
  6. 视频直播的购物平台,网站,app
  7. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
  8. 跨境电商shopee这个平台怎么样?百万shopee卖家笑了,不要再犹豫了
  9. 解读SPSS多元方差分析中的多因素多变量的相互影响
  10. android ipv6 谷歌,Ipv6使用google服务的DNS