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 命令。

 

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

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

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

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启

gitlab多节点开启 gitlab多级子项目_CI/CD_02

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

gitlab多节点开启 gitlab多级子项目_CI/CD_03

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

gitlab多节点开启 gitlab多级子项目_TortoiseGit_04

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

gitlab多节点开启 gitlab多级子项目_CI/CD_05

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

注:启动 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 分支信息如下:

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_06

注:

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

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

 

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

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

1、克隆主项目代码

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_07

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_08

2、拉取子模块代码:

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

gitlab多节点开启 gitlab多级子项目_项目管理_09

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

gitlab多节点开启 gitlab多级子项目_gitlab_10

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

gitlab多节点开启 gitlab多级子项目_CI/CD_11

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

gitlab多节点开启 gitlab多级子项目_项目管理_12

 

3、提交子模块代码:

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_13

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

gitlab多节点开启 gitlab多级子项目_CI/CD_14

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

gitlab多节点开启 gitlab多级子项目_项目管理_15

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_06

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_17

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

gitlab多节点开启 gitlab多级子项目_gitlab_18

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

 

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

 

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_19

 

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

gitlab多节点开启 gitlab多级子项目_gitlab_20

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

gitlab多节点开启 gitlab多级子项目_项目管理_21

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_22

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

gitlab多节点开启 gitlab多级子项目_gitlab多节点开启_23

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

gitlab多节点开启 gitlab多级子项目_CI/CD_24

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

gitlab多节点开启 gitlab多级子项目_项目管理_25

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

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