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

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流水线。

 

<think>好的,用户想了解如何在GitLab中修改子模块的成员权限。首先,我需要明确GitLab子模块的权限管理机制。子模块通常是另一个独立的Git仓库,这意味着它们的权限设置是独立于父项目的。所以,修改子模块的权限需要在子模块自己的项目中进行调整,而不是在父项目里直接设置。 接下来,我需要分步骤解释这个过程。首先,用户需要确认他们是否有权限访问子模块的项目。如果没有管理员权限,可能需要联系项目管理员。然后,进入子模块的项目设置,找到成员管理部分,添加或修改成员的权限级别,比如Guest、Reporter、Developer、Maintainer或Owner。 还需要提醒用户,父项目中的成员权限不会自动继承到子模块,必须分别在每个子模块项目中设置。另外,如果子模块是内部或公开项目,权限可能会有所不同,需要注意可见性设置的影响。可能还需要提到使用群组来批量管理权限,这样更方便,尤其是当多个项目共享相同的成员时。 用户可能会遇到的常见问题包括:误以为父项目权限会影响子模块,或者不知道在哪里找到子模块项目的设置。需要确保步骤清晰,避免术语混淆,比如明确区分父项目子模块项目。此外,要强调权限修改的即时性,一旦保存就会生效,避免用户操作后未及时看到效果而产生困惑。 最后,总结关键点,确保用户理解权限管理的独立性,并建议使用群组来简化管理。如果有必要,可以建议查阅GitLab官方文档获取更详细的信息。整个思考过程需要逻辑清晰,步骤明确,同时预判用户可能遇到的问题并提前解答。</think>在GitLab中修改子模块(submodule)的成员权限,需要注意子模块本质上是独立的Git仓库项目。以下是具体操作步骤注意事项: --- ### **步骤 1:理解权限继承关系** - **子模块权限独立**:子模块的成员权限由其自身项目设置决定,**不会继承父项目的权限** - **父项目权限仅控制**:父项目只能控制是否允许用户克隆/查看子模块的代码(当用户无子模块权限时,子模块目录会显示为灰色不可用状态) --- ### **步骤 2:修改子模块权限** 1. **访问子模块项目** - 在父项目的`.gitmodules`文件中找到子模块的仓库地址 - 直接通过浏览器访问该子模块项目的GitLab页面 2. **进入权限设置** -子模块项目中点击左侧菜单 `Settings` → `Members` - 或直接访问URL:`https://gitlab.example.com/group/submodule-project/-/project_members` 3. **添加/修改成员** - 输入用户名/邮箱 ➔ 选择角色(Guest/Reporter/Developer/Maintainer/Owner) - 点击 `Add to project` 保存 - 修改现有成员权限:点击成员右侧下拉菜单 ➔ 选择新权限 ➔ 点击 `Update access level` --- ### **关键注意事项** 1. **最小权限原则**: - 开发者需要 `Developer` 及以上权限才能推送代码到子模块 - 仅查看代码分配 `Reporter` 角色即可 2. **可见性影响**: ```mermaid graph LR A[子模块可见性] -->|私有| B[需显式授权] A -->|内部| C[组织成员自动可见] A -->|公开| D[所有人可读] ``` 3. **批量管理建议**: -子模块放入父项目所在的群组(Group) - 通过群组`Members`统一管理权限(适用于多个相关项目) --- ### **常见问题解决** - **Q:为何修改权限后未生效?** - 检查浏览器缓存,尝试强制刷新(Ctrl+F5) - 确认用户未同时属于其他有冲突权限的群组 - **Q:如何防止误操作?** - 开启「强制双重认证」(2FA) - 使用「受保护分支」控制子模块合并权限 建议通过 `https://gitlab.example.com/help/user/project/members/index` 查看GitLab官方文档获取最新配置细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值