玖叶教程网

前端编程开发入门

Git分支模型,3分钟讲明白! #Git

Git 分支模型 3 分钟讲明白,应届生必备!

1. 大家有没有见过这样的 Git 分支模型?看上去分支很多,线条很多,很复杂对不对?没关系,我们一步一步来讲。先看一个简单版,在看简单版之前来看一些 Git 分支管理常见的一些问题。

·首先第一个问题:为什么分支管理上总有冲突?想要了解这个要知道为什么会有冲突。这里是一个有冲突和没有冲突的例子,我们来看一下。

→首先有冲突,第一个里面把 commitTypes 改成了 commits,删去了 tap。

→下面一个是把 commitTypes 改成了 types,上下改的是同一个文件同一行。

→如果两个人在做不同的任务,这是第一个人,下面是第二个人,这个时候就会有冲突。你改的是同一个文件同一行,或者是你改的是同一个文件名字,这个时候就会有冲突。

·什么时候没有冲突?像右边这种,第一个人改了 commitypes 改成 commits,第二个人把上面一个给改了。像这种第二种就不会产生冲突,它会自动合并。像前一种就会产生冲突,然后让你手动进行抉择到底要留哪一个功能。

2. 知道了这个冲突的原理之后,还远远不够,因为这没有办法真正能够帮我们在实际使用过程中解决那些冲突。想从根源上解决这些冲突,需要定一些规范以及规则。

首先来看一个简单版的分支模型,在这里简单给大家介绍一下。在这里管理分支模型的时候,一般会用多分支这种维度来管理,一般会拆分成以下几个:master 相当于主干分支,hotfix 相当于修复分支。当线上出现了一个问题的时候,会开一个 hotfix 分支来紧急修复,然后紧急合并 release 分支。

这是发版分支,专门用于发版的,它只干这一件事:develop 分支。这个分支是接触最常见的分支,所有的功能开发分支都会合入到 develop 分支上面去。因为 develop 开发好了之后,就会进行下一步发版上线。

下面两个是 feature 和 featureA,就是平时开发的业务功能分支。先给大家简单介绍一下链路。

·首先在这里会从 master 开一个分支叫 develop,从这开一个分支叫 develop。这个时候只有 master 和 develop 两个分支,并且它们两个分支是完全一样的,除了名字不同。这个时候 PM 下达了一个功能业务,这时候要怎么办?要开一个 featureA 分支。

·接下来要开发代码,然后提交上去,可能会提交很多次,就像这样,提交了一次,提交了两次,提交了三次。在提交的中途突然发现线上出现了问题,要赶紧建立一个新的分支叫 hotfix 里面,要赶紧把代码修修补补。

·这个时候修完要发到 master 上面去,master 里面是有一个修复的,但是 develop 好像没有解决这个问题,所以要从 master 也要往 develop 合一份。这样 master 和 develop 里面都有修复了。

与此同时 PM 又给你来了一个新的需求,要开个新的分支 featureB,要从 develop 里面开,因为 develop 里面现在保持的是和 master 一致的,并且里面还有 hotix 修复,是比较完整的分支。这个时候要在 featureB 里面进行开发了,提交了一次。

这个时候 PM 告诉我们要先发 featureB,要进行发版了,这个时候要把 featureB 往 develop 里面进行合并,develop 这个时候里面就有 featureB 了,它并没有 featureA,因为没有合入。现在 develop 里面只有一个功能,这时候要新建一个新的分支 release,release 是刚才说过的发版分支,它只有一个作用,那就是发版。

这个时候要从 develop 里面往 release 进行合并,在 release 这里可能要做一些简单的调整,比如要改一下版本号,最常见的 packagejson 里面是不是有个版本号,要把版本号修改一下,修改好之后相当于提交了一部分。这个时候万事俱备,现在只需要进行发布就可以了。

发布完成之后要把 release 合并到 master 上面去,并且要从 release 同时也要合并到 develop 里面去,这个时候 master 跟 develop 里面就完全保持一致了。可是这时候还不要忘记还有一个 featureA 正在开发,它不准备短时间上线,但是后面还是要上线的对不对?所以这个时候要从 featureA 里面往前进一步。

在 release 合 develop 之后同时也要把 develop 合入到 featureA 里面,因为要保证已经上线的内容在开发分支里面,这样就不至于等 featureA 完全开发好之后往 develop 里面合入的时候会发现大量的冲突。这里有一个原则,master 分支永远是干净不受污染的。

3. 来看一下刚才的一些问题。

1. 为什么分支管理上总有冲突?

·第二条保护分支的作用是什么?哪些是保护分支?保护分支的作用是为了防止在开发的过程中不小心将一些不必要的代码合入到了保护分支里面,污染了那些保护分支,避免不必要的麻烦。

哪些是保护分支?master 和 develop 一般会把它设成保护分支。保护分支有哪些不一样的地方?保护分支一般把它设置成只允许 merge,不允许进行 push。这样大家往 develop 或 master 合并的时候就只能进行合并,而不能进行提交代码,从流程上就限制了大家,避免这种错误。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言