git submodule 使用教程

2023-05-16

1 submoude 介绍

(1)项目很大参与开发人员多的时候,需要将各个模块文件进行抽离单独管理。

(2)使用git submodule来对项目文件做成模块抽离,抽离出来的文件可单独成为一个git仓库。整个主项目对抽离出来的子项目(子模块)有依赖关系,却又并不关心子项目(子模块)的内部开发流程细节;

(3)代码如果全员可见,可以做成分支进行管理;如果代码不可见,可以创建为子仓库(独立一个git 仓库);子仓库管理模块代码,主仓库定时更新

(4)简单理解:项目工程为一个仓库;模块为一个仓库;主仓库操作git module命令来使用这个模块子仓库;主项目,子模块可由不同的开发人员维护。

2 带Submodule 模块的主项目仓库环境搭建

(1)克隆一个主项目仓库git_test

命令:git clone git@gitee.com:monkeyqiyu/git_test.git

 

(2)添加模块子仓库的路径到主项目中

执行添加子仓库的命令:

 git submodule add git@gitee.com:monkeyqiyu/git_submodule.git 

 //其中模块即子仓库的路径为:git@gitee.com:monkeyqiyu/git_submodule.git

子模块仓库:

注:git submodule 还支持嵌套开发

(3)提交代码到远程仓库

git add .

git commit - m  “添加子仓库到主仓库” 

git push origin master

3 带Submodule 模块的主项目开发操作流程

3.1主仓库开发人员A克隆代码进行开发

(1)克隆主仓库代码,子仓库代码为空

 git clone git@gitee.com:monkeyqiyu/git_test.git   

 

(2)执行以下命令,获取子仓库代码:

git submodule init  //初始化子仓库

git submodule update   //获取子仓库最新代码

或者直接执行:git submodule update --init --recursive

 

3.2子仓库和主仓库修改后操作

(1) 非子仓库代码修改跟普通git操作一样提交代码

(2)主仓库由开发人员A开发,子仓库由开发人员B进行开发:

【1】发人员B开发完后提交代码到远程仓库;

【2】开发人员A要对submodule 模块进行更新

要执行下限命令对submodule进行更新,会更新最新的内容和commit id:

git submodule update --remote   

再回到主项目仓库,对主项目进行一次提交,推送;把关联子仓库新的commit id提交推送到远程,下次克隆使用才不会出错!

远仓库主仓库中的子模块commit id有更新,点击会跳到子仓库

3. 3 开发人员A同时管理主仓库和子仓库:

【1】子仓库代码有修改,要进入子仓库目录进行一次代码提交,推送远程

git add .

git commit -m "修改index = 100"

git push origin HEAD:master

【2】再回到主项目仓库,对主项目进行一次提交,推送

git add .

git commit -m "更新子仓库index = 100"

git push origin master

注:

     如果直接在主仓库目录执行git add .是不起作用的(可以使用git status查看 生效情况,只要子项目有修改,当我们进入主项目使用 git status查看状态 都会有子项目修改的记录);

      必须先提交推送子仓库代码,然后到主仓库路径提交一次子仓库的更新;

4 主仓库中删除子仓库

(1)执行要删除的部分

rm -rf 子模块目录 //删除子模块目录及源码

vi .gitmodules  //删除项目目录下.gitmodules文件中子模块相关条目

vi .git/config   //删除配置项中子模块相关条目

rm .git/module/* //删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可

git rm --cached 子模块名称

(2)重新提交推送到远程仓库

5、submodule 注意事项

(1)当远程仓库的 submodule 进行了新的提交,父代码仓库的 submodule 不会自动更新 (执行git pull 或gitsubmodule update也无用)

(2)主工程并不直接跟踪子模块的代码,而仅仅只跟踪子模块的 commit id 的改动。在执行 git submodule update 更新子模块代码时,Git 就是根据主工程所维护的 commit id 来更新子模块到指定状态的。

(3)在子模块中修改并提交了代码,必须到主工程把子模块的 commit id 提交一下提交一次;否则其它开发人员还是停留在老的commit id所致的状态

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

git submodule 使用教程 的相关文章

  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • Jenkins git 插件 - 有时太慢

    以下内容摘自 Jenkins 日志 00 00 03 135 gt git fetch tags progress email protected cdn cgi l email protection some org some repo
  • 重新打包存储库对于大型二进制文件有用吗?

    我正在尝试将大量历史记录从 Perforce 转换为 Git 并且一个文件夹 现在是 git 分支 包含大量大型二进制文件 我的问题是运行时内存不足git gc aggressive 我的主要问题是重新打包存储库是否可能对大型二进制文件产生
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • git - 更新 fork 的 master 并将我的分支重新建立到它之上?

    我分叉了一个 github 项目 然后将其克隆到本地 然后我在新分支中做了一些更改my github the project repo 然后我添加并提交了更改 并推送到我的 github 存储库并提交了拉取请求 所有者已收到我的请求 并希望
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • 如何合并两个连续的 git 存储库

    我有一个相当独特的情况 我有一个名为 Project1 的存储库 我在其中工作了一些时间 几个月 一年后 我创建了存储库 Project1 Again 从 Project1 停止的地方开始 现在 我希望修订历史记录是连续的 因此我希望它们合
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • Git - 创建拉取请求而不分叉

    使用 git 已经有一段时间了 关于 git pull request 有很多教程和解释 其动机是什么等等 我遇到两种情况 1 分叉 git 仓库 我查看了一些公共 git 存储库并决定我想要做出贡献 所以我 通过以下方式创建重复的存储库F
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My
  • git 提交错误:检测到大文件

    您好 我正在为 ios 8 1 开发一个应用程序 xcode 我已经使用 googleMaps 框架来实现自动完成功能 当我尝试在 Git 中推送我的项目时 我收到大文件检测错误 后来尝试使用 git lfs 并跟踪 git 检测到的文件
  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • Git difftool 未启动外部 DiffMerge 程序

    我一直遵循 戴夫的博客条目 http www davesquared net 2009 05 setting up git difftool on windows html 链接在此answer https stackoverflow co
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • Git 在哪里存储标签?

    Git 在哪里存储标签 我执行 git tag v0 1 0 v0 10 0 v0 11 0 但目录 git refs tags是空的 Git 将这些标签存储在哪里 谢谢 它们也可以存储在 git packed refs
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with

随机推荐

  • npm安装报错 rollbackFailedOptional verb npm-session 解决办法

    该问题一般情况是因为代理问题 xff0c npm代理和git代理都要设置 首先确认网络是否需要设置代理 如果是公司网络需要设置代理 xff0c 则设置npm代理和git代理 1 设置npm代理 1npm config set proxy a
  • Docker 安装C#编译环境

    Docker 是一个开源的应用容器引擎 xff0c 让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中 xff0c 然后发布到任何流行的 Linux或Windows操作系统的机器上 xff0c 也可以实现虚拟化 本文主要介绍Docke
  • 关于句柄中带命名空间对实际程序运行中的影响

    ROS头文件 include lt ros ros h gt 自定义msg产生的头文件 include lt topic demo gps h gt int main int argc char argv 用于解析ROS参数 xff0c 第
  • 部署Redis集群

    部署Redis集群 span class token comment 创建网卡 span span class token function docker span network create redis subnet span clas
  • ROS编译出现generate_messages() must be called after add_message_files()错误

    新人小白 xff0c 刚刚开始学ROS 编译出现这个错误 xff0c 搞了好久也没找到这个问题 xff0c 后来偶然发现了问题所在 CMake Error at opt ros kinetic share genmsg cmake genm
  • SLAM因子图构建笔记

    因子图简介 最近在读了Joan Sola所写的Course on SLAM中有关因子图部分的介绍后 xff0c 发现其中有关于因子图构建的思路觉得很有意思 xff0c 因此在这里记录一下 DBN网络 首先简单地介绍一下如何将一个SLAM问题
  • xmanager关闭linux命令,Linux下xmanager passive功能无法使用的解决技巧

    xmanager Passive可以在仅登陆ssh字符界面的情况下传输图形 xff0c 为很多开发者所喜爱 有一用户因需要调整了防火墙 xff0c xmanger passive功能便无法正常使用了 xff0c 我们该如何处理这个问题呢 到
  • liteos内核驱动和linux,移植RTOS必备基础知识

    1 基础知识 移植内核对技术的要求比较高 比较细 1 1 单片机相关的知识 栈的作用 加载地址 链接地址 重定位 几个简单的硬件知识 串口 定时器 中断的概念 1 2 Linux操作相关的知识 Linux常用命令 简单的脚本 xff1a 脚
  • matlab subs什么意思,什么是matlab subs函数?

    matlab中subs 是符号计算函数 xff0c 详细用法可以在Matlab的Command Windows输入 xff1a help subs subs 函数表示将符号表达式中的某些符号变量替换为指定的新的变量 xff0c 常用调用方式
  • 虚拟机linux装无线网卡驱动,linux无线网卡驱动安装

    环境 在笔记本里的虚拟机10 0版本 xff0c centos 6 5 无线网卡fast fw300um 第一步要查看芯片 lsusb 当你得到芯片之后接下来查看内核 xff0c 如果内核已经有芯片模块就不用再装了 xff0c 如果不支持的
  • 使用Altium Designer 20绘制双层板以及四层板

    直接入正题 1 按照正常的绘制双层板的方式新建工程文件 xff0c 加入原理图和PCB文件 xff08 如果会绘制双层板请直接看第二步 xff09 xff08 1 xff09 新建工程文件 xff08 2 xff09 选择工程类型 xff0
  • 1.1 Ubuntu18.04 ROS tcp/ip Server通信实现

    Ubuntu18 04 ROS tcp ip Server通信实现 此小节介绍tcp ip Server收发数据 xff0c 并将截取到底信息通过话题方式发布出去 下一节介绍Ubuntu18 04 ROS tcp ip client通信实现
  • 1.2 Ubuntu18.04 ROS tcp/ip Client通信实现

    Ubuntu18 04 ROS tcp ip Client通信实现 此小节介绍tcp ip Client收发数据 xff0c 测试平台为为Ubuntu18 04 与Windows系统上的网络调试助手进行通信测试 xff0c 调试助手采用的有
  • 使用Gazebo对PX4飞控进行SITL仿真

    在仿真之前 xff0c 首先需要搞清楚每个模块所代表的含义 xff0c 在这个操作中扮演什么角色 Gazebo xff1a 可以理解成对我们实际飞行物理环境的一个仿真 QGC xff1a 地面站 xff0c 不用多说 Firmware xf
  • GitLab统计代码量

    gitlab官方文档 xff1a https docs gitlab com ee api index html 1 生成密钥 登录gitlab xff0c 编辑个人资料 xff0c 设置访问令牌 2 获取当前用户所有可见的项目 接口地址
  • 【树莓派】(2)网络连接、IP设置、屏幕大小设置、VNC安装与配置

    目录 1 网络连接 1 1有线网连接 SSH协议 1 2 无线网连接 VNC 方法1 xff1a 不能联网 方法2 xff1a 能联网 2 VNC安装与配置 3 IP WiFi配置 4 屏幕大小 屏幕黑屏时间设置 1 网络连接 分为有屏幕和
  • Linux服务配置 配置VNC远程桌面

    一 VNC简介 VNC Virtual Network Console 是虚拟网络控制台的缩写 它 是一款优秀的远程控制工具软件 xff0c 由著名的 AT amp T 的欧洲研究实验室开发的 VNC 是在基于 UNIX 和 Linux 操
  • 异常检测 and 自编码器(2)

    文章目录 前言一 自编码器用于异常检测的网址推荐1 自编码器AutoEncoder解决异常检测问题2 基于自编码器的时间序列异常检测算法3 深度学习实现自编码器Autoencoder神经网络异常检测心电图ECG时间序列 总结 前言 上篇文章
  • python树莓派3控制蜂鸣器_树莓派3 modelB型 连接HC-SR501人体红外感应模块和蜂鸣器模块...

    连接前准备 树莓派3 modelB型一个 HC SR501传感器一只 低电平蜂鸣器模块 有源 即接上电就会响 xff0c 低电平触发 母对母杜邦线三根 实物图如下 xff1a 博主连接的不是特别美观 两个传感器的连接图分别如下 HC SR5
  • git submodule 使用教程

    1 submoude 介绍 xff08 1 xff09 项目很大参与开发人员多的时候 xff0c 需要将各个模块文件进行抽离单独管理 xff08 2 xff09 使用git submodule来对项目文件做成模块抽离 xff0c 抽离出来的