公司分支与版本管理 - 简书

字数 1735阅读 877

什么是代码分支

在代码开发中,我们为了方便版本管理和开发、bug修复等工作,将代码分开不同的版本,开发人员使用不同的版本开发时,看到的文件可以完全不冲突,各自开发各自的功能。叫做不同的代码分支。

创建分支时总是在以前的分支基础上复制出来的

分支创建后,在新创建的分支上开发虽然不影响原来分支的代码,但并不意味着新分支的代码是凭空产生的,两者完全不搭边。新分支总是从旧分支中复制出来的,然后才在上面修改。我们当然可以将新分支的文件全部改成面目全非,但这样有意义吗?这样做这两个分支还怎么合并呢?所以,新分支与旧分支之间其实最终差异应该都不大。比如,新分支是用来开发一个小功能的,两个分支最终只有十几个文件发生了修改,合并起来也不会有太多的冲突。

开发人员应重视版本管理

上次大众创新奖的开发影响到立项的测试,就是因为我们一直没有重视版本和分支管理导致的。我认为我们应该吸取这次教训。相对规范的分支管理有助于我们更好的管理代码,甚至大家开发时可以互不影响,也方便测试。

创建分支的原则

那么,我们应该如何使用分支呢?我们应该用什么样的原则去创建和使用代码分支?

开发互不影响

创建分支是为了开发人员开发新功能时互不影响。这是最基本的原则。如果A和B两个开发各自正在开发不同的新功能,那么他们应该各自在本地创建出各自的分支,并在各自的分支上进行开发。那么,他们开发的中间各自是不会产生冲突文件的。

修改bug不需要创建专门的分支

有些开发人员可能会有疑问:难道改一个bug也要专门创建一个分支吗?我认为这大可不必,一方面,这太麻烦,也不是不可以;另一方面,分支是添加新功能时用到的,这不符合这个原则。

合并分支时,冲突应该是很少的

分支合并是分支管理最常用到的功能。如果没有合并,分支也就失去了意义。然而,合并分支一个麻烦事就是文件冲突了。两个分支同时修改了同一个文件的同一行,合并分支时就会发生文件冲突。然而,好的分支管理这种冲突应该是很少的,否则开发人员应仔细分析冲突代码后再合并。

生产环境版本上去后,应立即创建新的代码分支

原来的代码分支属于历史分支,可以用来进行代码历史版本备份。

我们的项目如何进行分支管理

赢百万彩票注册以我们双创为例,我们应当如何进行分支管理呢?这里没有绝对正确的意见,我以我自己的角度,结合项目实际,谈谈自己的想法。

主分支保持跟生产环境代码一致

赢百万彩票注册我们把生产环境目前的代码所在的分支称为主分支。只有生产环境进行版本变更时,主分支的代码才会发生改变。而且,开发人员一般不会直接修改主分支的代码,主分支代码的变更都是通过合并其他分支产生的。

创建一个bug修复分支,用来修改已发现的主分支上的bug

赢百万彩票注册当生产环境版本发生变更后,我们马上创建一个新的分支作为主分支(原来的主分支作为历史分支,备份代码了,我们不会再修改它)。这时候主分支的代码跟目前生产环境的代码一致。现在,在主分支的基础上,我们又复制一个新的分支,称为bug修复分支。开发人员可以在这个bug修复分支上修复bug。

开发新功能

一般情况,开发人员需要同时开发新功能和修复旧版本bug的任务。修复bug的分支上面已经讲过了,那么,开发人员如何在开发新功能时,跟其他人的任务不发生冲突呢?最好的办法就是开发新功能时,在修复bug的分支基础上checkout出新功能的开发分支来(本地创建即可)。开发并自测完成后,再切到修复bug分支上,将新功能分支合并过来。这样,修复bug的分支bug被修复,同时新功能也不断被合并过来。

合并修复bug分支到主分支

开发人员在修复bug分支上产生多个beta版本供测试人员测试。当测试人员认为版本测试通过,可以打包到生产环境时,开发人员切到主分支,正式将修复bug分支合并到主分支。这时候主分支的代码应该会跟当前测试环境的代码一致(修复bug分支与主分支代码一致)。这时候,相当走完了一个生产环境版本变更流程,之后按照上述的方法进行版本管理即可。

hotfixs

最后,我们讨论一下hotfixs。hotfixs我们用得比较少,其实很多规范的项目都有这个概念和做法。
当版本上生产环境后,如果我们发现的影响很大的bug时,不可能又上一个新版本解决这个问题。这时候我们通常在主分支的基础上创建出一个hotfixs分支,然后在这个分支上紧急修复bug,然后将修改过的文件直接替换到生产环境(注意,不会重新打包)。替换完成后,再将hotfixs分支合并到主分支。这时候,主分支再一次跟生产环境保持一致了。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
  • Git常用语法 [TOC] Git简介 描述 ​ Git(读音为/gɪt/。)是一个开源的分布式版本控制系统,...
  • 远程仓库 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题...
  • 【天幻风云】目录(连载更新中) 第009章静恩 时间已经是将至深夜,但是这有着双城连壁之称,其中之一的炎阳城,此刻...
  • 日课22:请根据以下材料中的一点,回顾自己“错爱”过的经历。参考资料:《拆掉思维的墙》爱是我们最常听到的话,却也是...