因为公司项目用git submodules托管,子模块的提交涉及hash值得变化,hash提交不当导致代码覆盖及Jenkins部署问题,真天下人苦git子模块久矣,现开一篇文章详细讲讲使用SourceTree来去管理git得子模块。

一、前言

本篇文章需要有一定的git submodules基础认知,包括子模块创建,子模块映射文件.gitmodules等,具体可以看《【Git】Git Submodules 介绍(通俗易懂,总结了工作完全够用的 submodule 命令)》这篇文章

接下来先看看sourceTree的安装

二、SourceTree安装

下载地址:

  1. 官网:https://www.sourcetreeapp.com/
  2. gitee安装包:gitee

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、SourceTree使用

1、克隆仓库&拉取代码&推送代码

因为前面讲git submodules命令创建过子模块项目,gitee仓库地址,这边直接拿来用。

在这里插入图片描述

目录如图,分为公共模块和子模块,子模块分为1和2;

找到主仓库url

在这里插入图片描述
克隆

在这里插入图片描述

在这里插入图片描述
随便写点内容,然后暂存到本地

在这里插入图片描述

然后写点提交信息,推送到远程仓库

在这里插入图片描述
对于不想要的文件,可以进行移除,或者丢弃本次修改的内容。
在这里插入图片描述
如果远程仓库有代码更新,可点击拉取最新代码。

在这里插入图片描述

2、创建分支&合并分支代码

实际开发中,不可能直接在main或者master分支上开发,而是从master分支new一个release/1120-learn-git-submodules分支进行开发,开发完合test分支,测试通过以后发merge请求,merge到master/main分支

创建release/1120-learn-git-submodules分支

在这里插入图片描述

写点内容提交

在这里插入图片描述

合并release/1120-learn-git-submodules分支代码到test分支

在这里插入图片描述

合并完了记得推送到远程仓库

在这里插入图片描述

在这里插入图片描述
如果遇到冲突(即2个人在同一文件同一位置修改了内容)

在这里插入图片描述

打开此冲突文件进行合并修改再提交即可

测试通过,将release/1120-learn-git-submodules合到master/main分支,创建merge请求

首先点分支:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

然后我们更新sourceTree上的main分支

在这里插入图片描述

能看到merge的请求
在这里插入图片描述

3、标签

用于对项目重要里程碑节点标识记录 ex:线上发版1.0.0

在这里插入图片描述
在这里插入图片描述

4、子模块

我们现在来重点讲讲子模块操作

首先新建一个git-learn-submodules3模块,并添加一个init提交

在这里插入图片描述

我这以前有两个子模块,如果项目中没有子模块,右击空白区域出现添加子模块

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
主项目中的.gitmodules文件会有子模块3的映射
在这里插入图片描述
在这里插入图片描述

4.1、创建开发分支

现在我们模拟下面情况,需要你在子模块3下开发代码,还需要你在公共模块开发代码,我们先新建开发分支,我们将公共模块和子模块3的main分支迁出一个开发分支,1,2两个子模块保持在main分支不要动

在这里插入图片描述
创建release/1120-xxx分支,git-learn-submodules3同理
在这里插入图片描述

4.2、开发分支操作

创建一个文件,然后推动至远端的release/1120-xxx分支

在这里插入图片描述

公共模块有两个改变有,一个是修改的代码,一个是hash变化

在这里插入图片描述

这个是开发分支的模块3的hash

在这里插入图片描述
在这里插入图片描述
发现两个hash不一样,这就是hash冲突,我们把公共模块hash提交到远端

在这里插入图片描述

这样就保证了hash的一致

4.3、开发分支合test分支操作

如果其他子模块有变动,接受他变更就行,只用管自己修改的地方

将子模块开发分支合并到test环境,并推送到远端:

在这里插入图片描述
在这里插入图片描述
将公共模块代码推动到test环境:

在这里插入图片描述
在这里插入图片描述

hash一致,推送成功

4.4、开发分支合main分支操作

点击子模块3 git目录merge请求

在这里插入图片描述

在这里插入图片描述

拉取到本地

在这里插入图片描述
能看到我们的merge操作

在这里插入图片描述

公共模块推送main分支时,先保证其他子模块的分支全部都在main分支下,且没有hash冲突,且开发分支合过最新的main分支

如下图

在这里插入图片描述

保证开发分支为最新分支

在这里插入图片描述

在这里插入图片描述

保证hash一致

在这里插入图片描述

这样完整的子模块合代码流程完成!

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐