Git系列讲解(二):项目子模块submodule

2023-05-16

Git支持在项目中添加别的项目为子模块,这篇文章将详细讲解其中用法

目录

  • 一. 为Git项目添加子模块
    • 1. 先将主项目克隆到本地
    • 2. 使用git命令添加子模块
    • 3. 添加完子模块后目录的变化
    • 4. 把变化提交到远程仓库
  • 二. 克隆包含子模块的项目
    • 1. 克隆项目
    • 2. 同步子模块的url信息
    • 3. 初始化本地配置文件
    • 4. 将子模块更新到本地
  • 三. 在子模块中修改内容并上传到其远程仓库

一. 为Git项目添加子模块

这里说的子模块其实就是另外一个Git管理的项目。假设现在已经有了名为subsampleproject的项目,将其作为sampleproject的子模块。

1. 先将主项目克隆到本地

克隆sampleproject项目到本地

sun@sun-pc:~/myProjects/codechina$ git clone git@gitcode.net:In_engineer/sampleproject.git

2. 使用git命令添加子模块

进入sampleproject目录中,将subsampleproject添加到sampleproject的3rd_party中,注意这里的3rd_party不需要手动创建。这一步执行完就可以看到3rd_party中就已经包含了subsampleproject的内容了。

sun@sun-pc:~/myProjects/codechina/sampleproject$ git submodule add git@gitcode.net:In_engineer/subsampleproject.git 3rd_party
正克隆到 '/home/sun/codechina/sampleproject/3rd_party'...
remote: Enumerating objects: 73, done.
remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73
接收对象中: 100% (73/73), 128.83 KiB | 2.01 MiB/s, 完成.
处理 delta 中: 100% (1/1), 完成.

3. 添加完子模块后目录的变化

① 项目中多了子模块的内容
在这里插入图片描述
② 多了一个.gitmodule隐藏文件
在这里插入图片描述
.git/config发生改变
在这里插入图片描述

4. 把变化提交到远程仓库

这里不需要git add,因为git submodule会自动将变化更新到暂存区
在这里插入图片描述远程仓库的变化如下:
在这里插入图片描述

二. 克隆包含子模块的项目

1. 克隆项目

sun@ubuntu:~/myProject$ git clone git@gitcode.net:In_engineer/sampleproject.git

2. 同步子模块的url信息

sun@ubuntu:~/myProject/sampleproject$ git submodule sync'3rd_party' 同步子模组 url
...

3. 初始化本地配置文件

如果第二步不做,有可能会报错:子模组 ‘3rd_party’ (git@gitcode.net:In_engineer/subsampleproject.git) 未对路径 ‘3rd_party’ 注册

sun@ubuntu:~/myProject/sampleproject$ git submodule init

4. 将子模块更新到本地

sun@ubuntu:~/myProject/sampleproject$ git submodule update
正克隆到 '3rd_party'...
remote: Enumerating objects: 73, done.
remote: Total 73 (delta 0), reused 0 (delta 0), pack-reused 73
接收对象中: 100% (73/73), 128.83 KiB | 0 bytes/s, 完成.
处理 delta 中: 100% (1/1), 完成.
检查连接... 完成。
子模组路径 '3rd_party':检出 '8c63ff33ccb67b51078ddf09f3054cb068b680aa'

三. 在子模块中修改内容并上传到其远程仓库

子模块也是单独的一个仓库管理,所以大体步骤和正常提交一致,可以参考: Git系列讲解 —— 同一分支下多人协同开发.
这里需要注意的是通过上面克隆下的子模块仓库没有在一个特定的分支,需要先创建个本地分支,然后提交的时候merge到master分支进行提交

sun@ubuntu:~/myProject/sampleproject/3rd_party$ git branch dev
sun@ubuntu:~/myProject/sampleproject/3rd_party$ git checkout dev
sun@ubuntu:~/myProject/sampleproject/3rd_party$ touch test.c
sun@ubuntu:~/myProject/sampleproject/3rd_party$ git add test.c
sun@ubuntu:~/myProject/sampleproject/3rd_party$ git commit -m "add test.c"
sun@ubuntu:~/myProject/sampleproject/3rd_party$ git checkout master
sun@ubuntu:~/myProject/sampleproject/3rd_party$ git push origin master
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git系列讲解(二):项目子模块submodule 的相关文章

  • docker安装图形化界面

    分享第一份Java基础 中级 高级面试集合 Java基础 xff08 对象 43 线程 43 字符 43 接口 43 变量 43 异常 43 方法 xff09 Java中级开发 xff08 底层 43 Spring相关 43 Redis 4
  • 嵌入式软件开发岗面试题

    1 单片机IO口开漏输出和推挽输出有什么区别 xff1f 答 xff1a 开漏输出 xff1a 开漏输出只能输出低电平 xff0c 如果要输出高电平必须通过上拉电阻才能实现 就类似于三极管的集电极输出 推挽输出 xff1a 推挽输出既可以输
  • pytorch 查看模型结构 网络参数

    用法比较简单 xff0c 不过容易忘 xff0c 记录一下 假设已定义好模型 xff0c 名为model 查看模型结构 xff1a gt gt gt print model 查看网络参数 xff1a for name parameters
  • 【Linux网络编程】select函数实现TCP并发服务器

    I O多路复用 应用程序中同时处理 多路 输入输出流 xff0c 若采用 阻塞模式 xff0c 将得不到预期的目的 xff1b 若采用 非阻塞模式 xff0c 对多个输入进行轮询 xff0c 但又太浪费 CPU 时间 xff1b 若设置 多
  • 【校招】面试_华为_通用软件工程师_二面

    1 面试信息 面试形式 xff1a 视频面试 面试时间 xff1a 2020 03 25 11 30 00 AM 面试时长 xff1a 40分钟 面试职位 xff1a 软件技术开发部 通用软件工程师 xff08 无线网络产品线 通用软件开发
  • 你必须会的启发式搜索算法--A*算法

    一 算法原理 A 算法 xff0c 就是解决在一个平面 grid地图中寻找起点到终点的最短路径问题的算法 xff0c 类似于Dijkstra算法和BFS算法一样 xff0c 属于广度优先搜索 实际上它还是一个启发式搜索算法 xff0c 什么
  • C/C++/LINUX 资源网站

    C C 43 43 LINUX 资源网站 本博客记录学习 开发中常用的网站 http www cplusplus com c 43 43 官网 xff0c 包含c 43 43 介绍以及一些简单的使用样例 目前主要用来查询 STL 的使用 h
  • 焊接单片机最小系统板,驱动lcd1602

    今天分享一些我制作单片机最小系统板的过程以及遇到的问题和解决办法 本人萌新一枚 xff0c 写文章就是我们大家互相学习交流 之前学习的是郭天祥的tx 1c单片机 xff0c 书中的例程都写的差不多了 xff0c 就想着自己焊接一个最小系统板
  • [ROS]极简开发环境建立流程(新手适用)

    ROS开发环境的建立 一 前言二 操作系统环境1 Ubuntu2 VMWare 可选 三 ROS运行环境1 ROS2 ROS周边设置3 ROS开发包及帮助获取方式 四 ROS开发环境1 建立工作空间 workspace2 Original开
  • 伽马函数与贝塔函数的定义

    伽马函数 称以下函数 61 0
  • Linux kernel development

    这几天一直在读经典的linux入门书 Linux kernel development 第三版即LKD xff0c 这是我第一次读英文版的技术书 xff0c 颇有些高兴 之所以读 xff0c 一是因为学过操作系统的理论知识 xff0c 想看
  • Windows + Ubuntu20.04双系统详细安装教程

    Windows 43 Ubuntu20 04双系统安装 1 制作启动盘1 1 从ubuntu官网下载ubuntu ISO文件1 2 下载启动Rufus1 3 将ISO文件写入启动盘1 3 1 设备 xff08 Device xff09 1
  • 程序员的成长之路

    1 初识编程 清楚的记得2008年上大学 xff0c 当时学的第一门编程语言是汇编语言 xff0c 第一堂课上 xff0c 老师就说这个学科的挂科率是最高的 xff0c 大家做好心理准备 xff0c 后来证明 xff0c 这并不是下马威 x
  • 关于协方差矩阵的理解

    转载自 关于协方差矩阵的理解
  • ubuntu下vscode配置C++环境-clang

    之前一直采用gcc xff0c 说不上多好用 xff0c 一直在凑活 xff0c 一次偶然的机会听说了clangd xff0c 就尝试了clang作为前端 xff0c 还挺好用 xff0c 这里分享给大家 xff08 踩了很多坑bushi
  • PID控制系统阶跃响应图-参数整定过程,matlab代码真实可用

    PID控制系统阶跃响应图 参数整定过程 xff0c matlab代码真实可用 点个赞呗 clear all clc close all PID span class token operator 61 span span class tok
  • c语言 查找指定字符

    本题要求编写程序 xff0c 从给定字符串中查找某指定的字符 输入格式 xff1a 输入的第一行是一个待查找的字符 第二行是一个以回车结束的非空字符串 xff08 不超过80个字符 xff09 输出格式 xff1a 如果找到 xff0c 在
  • 解决 UP Squared* Grove 物联网开发套件和 Arduino Create* 的连接问题

    如果您发现采用默认方法无法连接 UP Squared 主板和 Arduino Create xff0c 可以尝试另外一种方法 xff1a 使用串行终端连接主板 请执行以下步骤 开始前须知 确保主板已连接至电源和以太网 xff0c 如下所示
  • 解决 UP Squared* Grove 物联网开发套件和 Arduino Create* 的连接问题

    如果您发现采用默认方法无法连接 UP Squared 主板和 Arduino Create xff0c 可以尝试另外一种方法 xff1a 使用串行终端连接主板 请执行以下步骤 开始前须知 确保主板已连接至电源和以太网 xff0c 如下所示
  • PX4无人机offboard开发之旅

    目录 xff08 随进度更ing xff09 无人机OFFBOARD开发仿真步骤思路 真机PX4固件刷新连接pre arm策略修改 相机 图片慢慢补 xff0c 进度慢慢更 无人机OFFBOARD开发 使用无人机进行风力发电机叶片自动巡检任

随机推荐