Git子模块相关

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

添加子模块

如果项目分的模块比较多,而且对每个模块需要独立管理的话,子模块就派上用场了。每一个子模块都是一个独立的git仓库,有点类似于svn的外链。下面简单讲一下在现有的git仓库里添加子模块的配置。

在主项目中添加子模块

git submodule add git@gitlab.code.anzogame.com:octopus/L1.git

这就完啦?对,就这么简单,回车后就会自动clone子模块的最新代码下来,并命名为L1,当然也可以重命名,只需要在命令后面跟上需要重命名的名字即可。

子模块的使用

clone带子模块的项目,前提是对子模块的仓库是有相应权限的

//方式一
git clone --recursive <url>

//方式二
git clone <url>
git submodule init
git submodule update

其实主项目只是保存了一个子模块的地址和对应的commit号,如下图:

git_submodule.png

**注意这里只指向子模块仓库的某一个版本,一般情况下并不会特别指向某一个分支,clone代码的时候是把这个版本的代码clone下来了(不一定的子模块最新的代码)。**如下图:

git_submodule_after_clone_state.png

不在分支上的本地工作区是不能提交同步代码的,所以这里如果后续需要对子模块修改提交并同步的话,是需要手动切换都某一个分支的,如下图:

git_submodule_checkout_branch.png

对子模块内容做修改后的提交

  • step1:当我们对子模块做了修改,比如我在L1子模块做了修改,此时查看状态:

git_submodule_modify_no_commit.png 注意看红色L1后面的状态,untracked content的意思是L1子模块里有内容修改,并且这个修改并没有被加入版本管理里。

  • step2:此时我对cd进入子模块里进行commit,主项目里的子模块的commit号就会随之改变,再看一下状态:

git_submodule_commit.png 此时L1后面跟的是new commits,这代表主项目所保存的子模块的版本号已经改变了,你需要将这个版本号在主项目也提交才行,不然就会出现不匹配的状态。

  • step3:这个时候就应该先cd进入子模块进行push,同步真正修改的内容到远程仓库,然后再回到主项目push,就是同步推送主项目指向子模块的commit号到远程仓库。

这里有个坑,大家刚开始的时候会经常遇到。甲同学对L1子模块进行了修改并且同步到远程仓库了,但是没有提交主项目对这个子模块的版本号,这时乙同学对子模块L1进行了单独的更新,这个时候问题就出现了,乙同学在主项目git status查看状态的时候会出现L1是红色的,并且是[new commits]状态,**这是因为乙同学主项目里L1子模块的版本号已经变了,子模块的版本号只由当前子模块的最新commit号决定,也就是HEAD指针指向的commit号。**所以这个时候需要请甲同学提交一下,如果不提交问题也不大,乙同学自己提交上去,只是这个时候甲同学再提交会出现L1的这commit号冲突,因为对于主项目来说这个子模块版本号两个人都做了修改,但是这个可以不解决,因为这个commit号是手动改不了了,也就是说不用解决这个冲突,保持最新就好。但是冲突总是大家不想遇到的,所以在对子模块有修改的时候尽量都把对应的主项目的版本号也提交上去,这才是最正确的操作。

多个子模块简便操作

当遇到一个功能需要多个子模块都同时做了修改,那么相应的对这几个子模块都要做一次提交,这个时候如果一个一个的cd进去再提交同步就会是个非常麻烦的事情,程序员都是懒得。这个时候用下面这个命令就可以完美解决:

git submodule foreach "<git command>"

他会对子模块一个一个的执行尖括号里的命令,例如git submodule foreach "git push"

讲完了!

转载于:https://my.oschina.net/u/1181284/blog/1553130

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git子模块相关 的相关文章

随机推荐

  • MATLAB中提高fwrite和fprintf函数的I/O性能

    提高 fwrite 和 fprintf 函数的 I O 性能 http www matlabsky com thread 34861 1 1 html 今天我们将讨论下著名的fwrite xff08 fprintf xff09 函数 xff
  • 多项式与连分式函数的计算

    2019独角兽企业重金招聘Python工程师标准 gt gt gt include 34 stdafx h 34 include lt stdlib h gt include lt stdio h gt include lt math h
  • iPad适合写作吗

    我一直感觉对着电脑不利于思考 xff0c 当需要纯粹的思考时 xff0c 我习惯让视线离开屏幕 xff0c 起身走动两圈 xff0c 再用纸和笔整理思路 xff0c 想清楚后 xff0c 开始动手编码 双手端着iPad时 xff0c 似乎也
  • Dell服务器硬件,RAID等查询和维护软件OMSA

    Dell服务器硬件 RAID等查询和维护软件OMSA 2010 09 10 14 34 OMSA OpenManage Server Administrator 是Dell主机的硬件检测和维护软件 OMSA OpenManage 下载地址
  • GVIM设置背景颜色

    首先找到GVim的安装目录 xff0c 在安装目录下你可以发现一个 vimrc文件 使用文本编辑器打开后在里面添加两行代码即可 xff1a 代码如下 set gfn 61 Courier New h14 colorscheme torte
  • 实战ASP.NET访问共享文件夹(含详细操作步骤)

    博客园找找看 xff08 http zzk cnblogs com xff09 的索引文件占用空间太大 xff0c 需要移至另外一台服务器 xff0c 所以要解决 在ASP NET中通过共享文件夹访问索引文件 的问题 假设找找看的ASP N
  • Linux 后台开发工作中常用的开源库

    后台开发 xff0c 语言主要是 c 和 c 43 43 这里简单罗列一下工作中用的很频繁的那些开源软件 1 OpenSSL openssl OpenSSL 是一个安全套接字层密码库 xff0c 囊括主要的密码算法 常用的密钥和证书封装管理
  • [转载]三款SDR平台对比:HackRF,bladeRF和USRP

    这篇文章是 Taylor Killian 13年8月发表在自己的博客上的 他对比了三款平价的SDR平台 xff0c 认为这三款产品将是未来一年中最受欢迎的SDR平台 我觉得这篇文章很有参考价值 xff0c 简单翻译一份转过来 原文在这里 x
  • VINS-Mono运行与评测

    VINS Mono运行与评测 1 修改VINS mono轨迹保存代码1 1 修改 visualization cpp1 2 修改 pose graph cpp1 3 修改VINS mono运行参数 2 EVO 显示轨迹2 1 分析单条轨迹2
  • linux 虚拟机串口通信,单片机和虚拟机里的Linux进行串口通信

    最近在做单片机的火焰传感器采集数据并且并且将危险信息发送给PC端的Linux 一直卡在Linux端的 xff0c 所以 xff0c 做了各种尝试 xff0c 参考了网上一篇大神的代码 xff0c 终于把自己的东西弄了出来 先说明设备吧 xf
  • ArUco----一个微型现实增强库的介绍及视觉应用(二)

    ArUco 一个微型现实增强库的介绍及视觉应用 xff08 二 xff09 ArUco 一个微型现实增强库的介绍及视觉应用 xff08 二 xff09 一 第一个ArUco的视觉应用 首先介绍第一个视觉应用的Demo xff0c 这个应用场
  • ssh连接失败,排错经验

    一 场景描述 ssh连接服务器 xff0c 发现连接失败 xff0c 但是对应服务器的ip能够ping通 场景 xff1a root 64 yl web ssh root 64 10 1 101 35 ssh exchange identi
  • 什么是真正的程序员?

    什么是真正的程序员 这篇文章的原文来自 xff1a A Little Printf Story 作者仿照 小王子 中的情节 xff0c 通过小printf遇见的不同类型的程序员 xff0c 最后悟出什么才是真正的程序员 xff01 第一次翻
  • gpio引脚介绍 树莓派3b_树莓派介绍

    树莓派介绍 陈拓 chentuo 64 ms xab ac cn 2018 05 16 2018 05 16 1 什么是树莓派 xff08 Raspberry Pi xff09 树莓派是由树莓派基金会研发的一种只有信用卡大小的单板机电脑 x
  • 解析kubernetes架构

    一 简介 xff1a kubernetes是一个开源的容器管理工具 xff0c 是基于GO语言开实现的 xff0c 轻量级和便携式的应用 xff0c 可以把kubernetes cluster在linux主机上部署 管理和扩容docker容
  • STM32串口/RS232/RS485

    1 串口引脚 xff0c 如果是异步通讯将UART CLK共地即可 xff0c 如果同步需要时钟 a UART RX 数据接收引脚 b UART TX 数据发送引脚 c UART CLK 时钟引脚 2 UART描述 为全双工 xff0c 异
  • 又是一年年终总结

    起 这篇年终总结草稿是在12 03起的 xff0c 那是突然之间感觉到今年不大平常 xff0c 可以考虑写个年终总结来记录一下 xff0c 但是谁能料到今年真的是太不平常了 xff0c 到了12月中 xff0c 公司就解散了 xff0c 所
  • 开源自主导航小车MickX4(七)cartographer 室外3D建图

    开源自主导航小车MickX4 xff08 七 xff09 cartographer 室外3D建图 1 cartographer 3D建图demo1 1 cartographer 安装1 2 3D数据集建图1 3 3D定位 2 小车上的3D建
  • FreeRTOS+Trace(04) Xilinx Microblaze平台使用FreeRTOS+Trace

    本章节以 Xilinx Microblaze 平台为例 介绍如何在该目标平台上使用 FreeRTOS Trace 的快照记录功能 所使用的 Xilinx SDK 版本为 2018 2 并在 SDk 中已经创建好了一个目标平台为 Microb
  • Git子模块相关

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 添加子模块 如果项目分的模块比较多 xff0c 而且对每个模块需要独立管理的话 xff0c 子模块就派上用场了 每一个子模块都是一个独立的git仓库 xff0c 有点类似于