git(gitlab)子模块功能在团队协同开发和生产环境中的应用(git,gitlab,TortoiseGit,CI/CD,Jenkins,docker-compose,分支合并,开发环境,测试环境)

将git上多模块的项目的子模块拆分为独立项目 项目一开始把很多模块都放在一个git库里面。后续需要将某个目录单独出一个项目来开发,此时就可以利用这个subtree的功能分离里。 使用subtree的方式可以将源码子目录作为一个新的仓库,并且需要保留和子目录相关的log记录。 假设父目录为 folder-parent 两个子模块为 module-a module-b 目录结构为 /folder-parent/module-a /folder-parent/module-b 拆分项目的方式 # 进入父目录 cd folder-parent #为模块b 阅读详情

git(gitlab)子模块功能在团队协同开发和生产环境中的应用

 

目录

git(gitlab)子模块功能在团队协同开发和生产环境中的应用

 

一、前言

二、先决条件

三、创建gitlab项目(项目管理员操作)

四、关联子模块(项目管理员操作)

五、开发环境提交代码(团队开发人员操作)

六、生产或测试环境合并代码(项目管理员操作)


 

一、前言

gitlab不仅能够提供便捷的CI/CD流程控制的方式,也能为开发团队提供便捷的版本库控制方式。

在多人协同开发时,如果一个大型的开发项目仅使用一个gitlab项目会务必会引起不必要的更新等待,甚至导致整个团队几十号人停工等待漫长更新是正常的事,git的子模块功能能够有效解决这一问题,在一个大项目里面嵌入多个git子模块,化整为零、各个为政,使得开发工作效率更加的高效便捷。

另外,无论代码是否可编译、是否可调试或生产,开发人员每天一次或者多次提交代码至仓库以备版本回滚所需是必要的,也是代码安全备份的一种方式,但必须有别于开发和生产环境,否则一旦触发CI/CD流程那么后果将不堪设想,当然本人也不建议自动触发CI/CD流程。

本文写作目标即为解决前述两种问题。

 

二、先决条件

1、阅读者有一定的git、gitlab操作经验

2、已经安装gitlab(私有或公有云服务器)

3、已经安装git(windows,所有团队成员)

4、已经安装git可视化工具TortoiseGit(windows,所有团队成员),当然您也可在命令行直接使用 git 命令。

git工具可参考下载(git、TortoiseGit、TortoiseGit中文语言包及安装说明):

https://download.youkuaiyun.com/download/GuestCode/12713817

 

三、创建gitlab项目(项目管理员操作)

其实 git 子模块也是一个 git 项目,一样具有独立的 pull 和 push 等功能。本文中,我们建立三个 gitlab 项目:TestProject、TestModuleA、TestModuleB,这三个项目仅是命名上的区别而已,其中项目 TestModuleA、TestModuleB 将作为附属在项目 TestProject上 的子模块,TestProject 成为主项目,子模块 TestModuleA、TestModuleB 在 TestProject 项目中并未有真实的物理空间,它们仅是映射关联的关系。

注:有关 gitlab 创建项目的具体操作方法不在本文讨论范围。

1、依次在 gitlab 创建项目 TestModuleA 及自述文件 readme.md,并在 master 分支下创建 dev 分支

2、依次在 gitlab 创建项目 TestModuleB 及自述文件 readme.md,并在 master 分支下创建 dev 分支

3、依次在 gitlab 创建项目 TestProject 及自述文件 readme.md,并在 master 分支下创建 dev 分支

至此,我们演示的三个 gitlab 项目信息如下:

 

四、关联子模块(项目管理员操作)

注:启动 windows 命令行工具,cd 至您需要的测试目录,依次执行以下命令

1、克隆主项目

克隆主项目:

git clone http://192.168.223.100:8929/lusir/testproject.git  

这时当前目录下生成主项目目录 testproject,cd 至主项目目录 testproject:

cd testproject

拉取dev分支:

git pull origin dev 

选择dev分支:

git checkout -b dev origin/dev

 

2、为主项目增加子模块A

在主项目目录 testproject 下执行命令:

git submodule add http://192.168.223.100:8929/lusir/testmodulea.git TestModuleA

这时主项目目录 testproject 下生成子模块目录 TestModuleA,cd 至子模块目录 TestModuleA:

cd TestModuleA

拉取子模块 TestModuleA 的 dev 分支:

git pull origin dev 

选择子模块 TestModuleA 的 dev 分支:

git checkout -b dev origin/dev

返回主项目目录:

cd ..

 

3、为主项目增加子模块B

在主项目目录 testproject 下执行命令:

git submodule add http://192.168.223.100:8929/lusir/testmoduleb.git TestModuleB

这时主项目目录 testproject 下生成子模块目录 TestModuleB,cd 至子模块目录 TestModuleB:

cd TestModuleB

拉取子模块 TestModuleB 的 dev 分支:

git pull origin dev 

选择子模块 TestModuleB 的 dev 分支:

git checkout -b dev origin/dev

返回主项目目录:

cd ..

至此,您的主项目目录结构如下:

testproject
│
├─.gitmodules
├─README.md
│
├─TestModuleA
│ └─README.md
│
└─TestModuleB
  └─README.md

 

4、提交和上传主项目和子模块至远程 gitlab 仓库

在主项目目录 testproject 下执行命令,提交代码至本地仓库:

git commit -am "test commit submodule"

上传代码至远程 gitlab 仓库的 dev 分支:

git push origin dev

至此,我们移步至 gitlab,看到 gitlab上的主项目 TestProject 的 dev 分支信息如下:

注:

1、子模块 TestModuleA 和 TestModuleB 的图标并非是真实的目录图标,它们仅是项目 TestModuleA 和 TestModuleB 的映射。

2、.gitmodules 文件是子模块信息的配置文件。

 

五、开发环境提交代码(团队开发人员操作)

注:团队成员可以使用 TororiseGit 来克隆项目代码,TororiseGit 提供了便捷的右键菜单操作,本文以中文版 TororiseGit 为例,具体操作说明不在本文讨论范围。

1、克隆主项目代码

在本地测试目录下点击右键,选择“git克隆”菜单,克隆主项目,URL 可以从 gitlab 主项目 TestProject 上获取:

克隆主项目代码后,进入主项目目录 testproject,这时尚未拉取子模块代码:

 

2、拉取子模块代码:

在主项目目录 testproject 下,点击鼠标右键选择“git同步”菜单,远端分支请选择 dev,点击“拉取”按钮:

至此,主项目目录下增加了两个子模块的文件夹 TestModuleA 和 TestModuleB:

进入子模块文件夹 TestModuleA 中,目录是空的,点击右键选择“git同步”菜单(团队成员可以根据自己需要,进入子模块文件夹拉取相应的子模块代码),远端分支选择 dev ,然后点击“更新子模块”按钮:

至此,子模块 TestModuleA 代码已经拉取,您可以打开Readme.md看看里面是不是“This is TestModuleA”,子模块 TestModuleA 目录信息如下:

 

3、提交子模块代码:

在子模块T estModuleA 文件夹下新建文件a.txt,内容为 aaaa,模拟开发人员新增代码文件:

点击鼠标右键选择“git提交子模块”菜单,要是“提交至”的信息框里没有分支信息,请勾选“新建分支”并输入 dev ,勾选要提交的文件,点击“提交并推送”按钮(如果“提交并推送”按钮,可以点下图相同位置右边的黑色三角形按钮选择):

如果弹出推送设置窗口,请在“远端”信息框处输入 dev 分支,然后点击“确定”:

移步至gitlab的主项目 testproject 的 dev 分支下,点击 TestModuleA 目录,gitlab自动跳转到TestModuleA项目下:

点击目录 TestModuA 之后自动跳至 项目 TestModuA 项目的下(注意 dev 分支):

点击并编辑a.txt文件,看到如下信息,正是前面开发人员提交的代码 aaaa :

至此,开发团队成员分工开发并提交代码的步骤说明完毕。

 

六、生产或测试环境合并代码(项目管理员操作)

 

1、在 gitlab 主项目 TestProject 信息页面的右边栏,点击“合并请求”:

 

2、点击“新建合并请求”:

3、选择合并源分支为 dev ,目标分支(合并到)为 master,然后点击“Compare branches and continue”:

4、直接点击“Submit 合并请求”:

5、不要勾选“删除源分支”,保留以便继续开发时用,点击“合并”:

6、经过等待之后,合并完成:

7、查看主项目 TestProject 的 master 分支(我们从 dev 分支合并到 master 分支),可以看到子模块 TestModuleA 和 TestModuleB 合并到 master 分支来了:

至此,您可以用 master 分支触发CI/CD流水线了。

注:本人不建议自动触发CI/CD流水线,无论是至生产环境还是测试环境。代码正式提交合并之后,应该由人工再做一次确认之后再手工触发CI/CD流水线。

 

GitLab:将项目拆分为独立的子项目 通过使用GitLab和Git的命令行工具,您可以将一个大型项目拆分为独立的子项目。拆分子目录并创建新项目后,记得更新依赖和配置文件,并进行全面的测试和验证。如果您希望保留原项目的完整代码历史,可以将历史提交导入到新项目中。希望本文对您理解如何拆分项目并转移子目录有所帮助。 阅读详情

相关推荐

gitlab 拆分某项目的子项目到独立的git项目

git gitlab

yy的博客 1314

如何在gitlab中使用子模块

在gitlab中创建和删除子模块的方法

普普通通程序猿的博客 5624

【STM32】CubeMx系列教程之移植FreeRTOS

本文详细介绍了在STM32F429上通过CubeMX工具移植FreeRTOS的方法。主要内容包括:1)配置系统时钟源,将TIM1替换SysTick作为时钟基准;2)FreeRTOS的创建与配置,包括任务创建、堆栈大小设置等;3)关键配置参数说明,如堆大小建议设为RAM的50%-70%;4)常用函数如堆栈监控、任务挂起/恢复等。文章提供了从基础配置到深入优化的完整移植指南,适合STM32开发者参考使用。

JackieJin123的博客 785

git项目中的子git项目_使用子模块和子树管理Git项目

git项目中的子git项目 如果您从事开源开发,则可能与Git一起管理源代码。 您可能遇到过具有大量依赖项和/或子项目的项目。 您如何管理它们? 对于开源组织,为社区和产品实现单源文档和依赖性管理可能很棘手。 文档和项目通常最终都是零散的和多余的,这使得它们难以维护。 需要 Git子模块和子树 如果您可以使用一个命令将一个项目放在另一个项目中怎么办? 如果您可以将子项目添加到任意...

cumj63710的博客 5593

【自然语言处理】【聚类】TELL:可解释神经聚类

超越分类的XAI:可解释神经聚类 《XAI Beyond Classification: Interpretable Neural Clustering》 论文地址:https://www.jmlr.org/papers/volume23/19-497/19-497.pdf 一、简介 ​ 本文研究了可解释AI(XAI\text{XAI}XAI)和数据聚类这两个挑战性问题。第一个问题是如何设计一种具有固定可解释性的神经网络,而不是给出一个黑盒模型的事后解释。第二个问题是,使用可微分神经网络来实现离散的k-me

bqw的博客 4133

从信号到振镜:STM32F103 + XY2-100协议 + AM26LS31芯片的激光打标/雕刻系统信号链搭建指南

本文详细介绍了基于STM32F103微控制器和XY2-100协议的激光打标/雕刻系统信号链搭建方法。从数字振镜控制协议解析、AM26LS31差分驱动电路设计到信号完整性优化,提供了一套完整的解决方案,帮助工程师实现高精度激光控制系统的开发与调试。

weixin_42536058的博客 234

翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南

当格陵兰岛的雪山上还在漫天飞雪时,我已经安静的坐在空调房里,吹起了冰爽的风。为了满足组内的代码仓库实时编译的需求,我不得不部署了N个gitlab runner,来实现代码的编译工作。 当然编译代码是个很简单的事情,只需要我们了解我们的代码类型,然后选择适合他们的编译命令即可。 而难住我的不是这个,而是子模块的下载。

网尘的技术专栏 2053

从放弃到再入门之拉格朗日对偶问题推导

普通同学的解法 无约束条件:求导就可以了 等式约束:代入消元,再求导 不等式约束:分情况讨论(在边界上和不在边界上),分别对应1,2的情况 然而发现,有些情况消元特别复杂,甚至不能求解 聪明同学的解法 发现:在最优点的情况下,约束曲面的法向量和目标函数的梯度反向必相同或相反 拉格朗日乘子法如何理解? (在2维里可以形象的解释为z=f(x,y)在约束条件g(x,y)=c中,极值...

qq_34564612的博客 1万+

gitlab 添加/修改子模块

gitlab 添加/修改子模块。

Pou光明的博客 572

【实战】——零代码玩转Supervisely人像分割:从标注到模型训练的数据流水线搭建

本文详细介绍了如何零代码使用Supervisely平台搭建人像分割数据流水线,从智能标注到数据集格式转换,再到模型训练与优化。Supervisely的智能标注工具和协作功能大幅提升了人像分割项目的效率,特别适合视频会议背景虚化、虚拟试衣等应用场景。

weixin_30694389的博客 413

Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈

Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。

士多啤梨先生の博客 990

gitlab 创建子模块 git submodule 教程

最好理解的submodule教程,最符合逻辑的思维方式创建子模块教程 (1)在gitlab上创建一个空的仓库,这个称为主模块,在这个模块里面再创建子模块。 (2)在gitlab上再次创建一个空的仓库,这个空仓库是子模块,子模块最好创建一个文件夹,方便辨认是否是你的子模块。(如果你已经有了子模块,可以不用创建) (3)在本地的位置去把步骤(1)创建的主模块git clone 到本地 git clone http://******************** (4)进入到主文件夹里面 (5)这一步要添加子模块了

Youngboy007的博客 8098

Kile5报错—> ARM-Compiler ‘Default Compiler Version 5‘ which is not available安装使用Compiler Version 5 的办法

Kile5报错—> ARM-Compiler ‘Default Compiler Version 5‘ which is not available安装使用Compiler Version 5 的办法

weixin_72050316的博客 1173

GitLab 子模块添加流程(项目嵌套),一令拉取

可以使用以下命令一次性拉取所有子模块内容(适用于已初始化。

weixin_51304589的博客 645

(2-4-01)目标检测与分割:地面提取(1)

请看下面的例子,生成了虚拟 LiDAR 点云数据,然后使用 DBSCAN 聚类方法进行 LiDAR 地面提取,并根据聚类结果可视化地面和非地面点云。首先生成虚拟 LiDAR 点云数据,然后基于设定的高程阈值进行地面提取,并通过 Open3D 可视化地面和非地面点云。地面提取是LiDAR(激光雷达)数据处理中的一个重要步骤,其目标是从点云数据中分离出地面点,即地面表面上的点。LiDAR点云数据通常包含地面点和非地面点(例如建筑物、树木等),地面提取的目标是从这些点中准确识别和提取地面点。

码农三叔 697

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Git子模块使用-管理多个git项目

子模块 需求1:某个工作中的项目需要包含并使用另一个项目。 也许是第三方库,或者你独立开发的,用于多个父项目的库。 你想要把它们当做两个独立的项目,同时又想在一个项目中使用另一个。 需求2:想要通过控制权限来控制各个项目的使用者,但又要各个项目能在一个目录中使用。 Git 通过子模块来解决这个问题。 子模块允许你将一个 Git 仓库作为另一个 Git 仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。 开始使用子模块 如何在一个被分成一个主项目与几个子项目的项目上开发。

yinshuilan的专栏 5801

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

GitLab介绍、安装、创建第一个项目

GitLab是一个基于Web的DevOps平台,提供了Git仓库管理、问题跟踪、代码审查、CI/CD等一系列功能。它由Dmitriy Zaporozhets和Valery Sizov于2011年创建,旨在为开发团队提供一个集中式的项目管理解决方案。本文介绍gitlab的安装和windows开发环境下发布项目到GitLab

TradingAgents-CN专栏 5223

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Git子模块创建多项目共用组件库

代码】Git子模块创建多项目共用组件库。

日渐肥胖的左 896

深入解析Git子模块:管理复杂项目依赖的终极指南

Git子模块详解/深入解析Git子模块

寂夜了无痕的博客 2945

Git 试用 submodule 管理子项目

这里写自定义目录标题Git 试用 submodule 管理子项目1 准备事项1.1 安装git1.2 配置用户名和邮箱1.3 仓库位置2 主仓库引入子仓库2.1 初始化子仓库2.2 引入子仓库到主仓库中2.3 删除外部的项目3 修改子项目更新后本地主仓库3.1 更新子项目3.2 更新主仓库4 如何同步别人的更改4.1 当其他人更新了子项目4.2 当其他人新增了子项目5 在新的电脑上克隆主仓库 Gi...

轻步玉阶 853

【Git】在Git项目中添加子模块项目 - submodule

拉取/clone带有子模块的Git项目,直接拉取后子项目中可能没有任何内容,需要进行子模块初始化同步设置后,才能拉取完整的Git项目。

咋个办呢 zgbn 3748

代码源第四周

div501-507、div601-603

m0_74038690的博客 759

gitlab 工程添加子模块

git submodule add *.git(子模块git)

Pou光明的博客 601

Git学习和使用

git使用

mayue_web的博客 1571
上一篇: 小团队大开发:iogo微服务集群框架(golang/grpc/http/protobuf/etcd/freetoo/5G物联网/服务发现/负载均衡/一致性哈希/码客/卢益贵)
下一篇: 插件式模块化软件框架的思想图解一(框架篇)
ygluu
博客等级 码龄17年 300粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值