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.csdn.net/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流水线。

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

  1. Intellj IDEA 配置Git/码云插件,团队协同开发

    老师今天下午讲了怎么协同开发,特地做了下笔记,可以给需要的人一些帮助,自己日后也可以用到 图片有点多. Intellj IDEA 配置Git/码云插件,团队协同开发 1.1.在码云官网上注册账号 ht ...

  2. IntellJ IDEA配置Git/码云插件实现团队协同开发

    IntellJ IDEA配置Git/码云插件实现团队协同开发 2019-3-21 热水 术语  公钥和私钥是什么,他们分别起到什么作用? 一句话:公钥和私钥是成对的,它们互相解密. 公钥加密,私钥解密 ...

  3. 根据开发提供的svn更新版本号从开发分支合并代码到测试分支工作目录的部分脚本...

    最近在做发布流程相关事情.当开发需要将更改的代码提交到测试环境测试之前,需要开发给出一个版本号,如418或418:419或者418:419,420这种格式.然后将开发分支合并到测试分支工作目录.如果给 ...

  4. Jenkins 流水线 获取git 分支列表_CI/CD 工具选型:Jenkins 还是 GitLab CI/CD?

    原标题:CI/CD 工具选型:Jenkins 还是 GitLab CI/CD? 作者 | Rahul Jain 策划 | 田晓旭 近十年来,持续集成(Continuous Integration,CI ...

  5. winform 项目 发布后比本地运行慢_前端团队基于 GitLab CI/CD 的自动化构建、发布实践,快来学习吧...

    在公司搭建内部 GitLab 平台后,前端活动项目从 SVN 迁移到 GitLab.本文介绍如何基于 GitLab CI/CD 实现自动化构建及发布. 在从 SVN 迁移到 GitLab 和接入 Gi ...

  6. jenkins 增量发布插件_CI/CD工具:Jenkins还是GitLab CI/CD?

    十年来,持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)领域都取得了很大的进步.DevOps 测试的兴起导致了对 CI/CD 工 ...

  7. 开发人员必知的5个CI/CD工具

    一旦你选择了最好的CI/CD工具,你将继续你的DevOps生命周期.如果操作得当,它将能够提高产品质量并鼓励你的团队充满自信地进行发布游戏. 软件工程的最新规范是"以更快的速度同时保证产品质 ...

  8. CI/CD之Jenkins+Gitlab

    文章目录 一.Jenkinx+Gitlab持续集成环境概述 (1)什么是CI/CD (2)Jenkins概述 (3)Gitlab概述 (4)Gitlab和Github的区别 (5)Jenkins配合G ...

  9. Jenkins和GitLab CI/CD:CI/CD工具之战

    持续集成(CI)和持续交付(CD)在过去十年左右时间里取得了长足的进步.DevOps测试的兴起引发了针对CI/CD工具的强烈需求.现有的解决方案一直在与时俱进,无数的新产品或新版本正在进入质量检查领域 ...

最新文章

  1. 深度详解ResNet到底在解决一个什么问题?
  2. 决策树和随机森林(下)
  3. Kafka消息的可靠性
  4. linux 抓包工具_03-Python爬虫工程师-抓包工具
  5. MMO游戏War Riders宣布将于基于区块链的游戏开发公司Immutable集成
  6. win10计算机网络共享设置密码,win10系统清除网络共享密码的方法介绍
  7. Qt 中使用librdkafka librdkafka++ 创建消费者
  8. Java常用日志框架介绍(转载)
  9. 金融工程python报告期权_金融工程专业详细解析
  10. 如何修复cdn服务器异常,cdn服务器连接异常解决方法
  11. stm32项目实战ST7735环境质量检测仪
  12. ARPG游戏设计制作随笔
  13. 生活随记 - 火星梦
  14. Java教程——软件开发基础
  15. sharding-jdbc系列之常见问题(十四)
  16. 基于核概念的KCCA算法
  17. vue修改预设preset
  18. 向量的加减(输出重载)
  19. 搭建react项目并配置路由
  20. 大厂offer | 2022年C++开发面试题库

热门文章

  1. vue在新页面打开docx文件
  2. 材料工程与科学和计算机的关系,这6大工科专业名称相同,不同高校的培养方向却截然不同...
  3. 【USACO 2.3.2】奶牛家谱
  4. 【Spring杂烩】探讨Spring向容器注册Bean的三种方式
  5. Differentially Private Spatial Decompositions
  6. 国内高校超级计算机排名,上海交大上线国内高校最快超级计算机
  7. 【池化技术】内存池技术原理和C语言实现
  8. 构建哈夫曼树及求它的带权路径长度
  9. 《Python编程:从入门到实践》第七章7.3节课后作业
  10. 使用 ESP32 设计智能手表 – 第 1 部分制作表盘