Git 比较于 SVN 最强壮的一个当地就在于「分支」,Git 的分支操作几乎不要太便利,而实践项目开发中团队协作最依靠的莫过于分支了,关于分支前面的系列也提到过,可是本篇会详细叙述什么是分支、分支的详细操作以及实践项目开发中到底是怎样依靠分支来进行团队协作的。
1. 什么是分支?
我知道读者中肯定有些人对分支这个概念比较含糊,其实你们能够这么了解,你们几个人一同去游览,中心走到一个三岔口,每条路或许有不同的景色,你们约好 3 天之后在某地会聚,然后各自出发了。而这三条分叉路就能够了解成你们各自的分支,而等你们会聚的时分相当于把你们的分支进行了兼并。
2. 分支的常用操作
一般咱们默许都会有一个主分支叫 master ,下面咱们先来看下关于分支的一些根本操作:
新建一个叫 develop 的分支
git branch develop
这儿略微提示下咱们,新建分支的指令是根据其时地点分支的基础上进行的,即以上是根据 mater 分支新建了一个叫做 develop 的分支,此刻 develop 分支跟 master 分支的内容彻底相同。假如你有 A、B、C三个分支,三个分支是三位同学的,各分支内容不相同,假如你其时是在 B 分支,假如履行新建分支指令,则新建的分支内容跟 B 分支是相同的,同理假如其时地点是 C 分支,那便是根据 C 分支基础上新建的分支。
切换到 develop 分支
git checkout develop
假如把以上两步兼并,即新建而且主动切换到 develop 分支:
git checkout -b develop
把 develop 分支推送到长途库房
git push origin develop
假如你长途的分支想取名叫 develop2 ,那履行以下代码:
git push origin develop:develop2
可是激烈不主张这样,这会导致很紊乱,很难办理,所以主张本地分支跟长途分支名要保持一致。
检查本地分支列表
git branch
检查长途分支列表
git branch -r
删去本地分支
git branch -d develop
git branch -D develop (强制删去)
删去长途分支
git push origin :develop
假如长途分支有个 develop ,而本地没有,你想把长途的 develop 分支迁到本地:
git checkout develop origin/develop
相同的把长途分支迁到本地趁便切换到该分支:
git checkout -b develop origin/develop
3. 根本的团队协作流程
一般来说,假如你是一个人开发,或许只需求 master、develop 两个分支就 ok 了,平常开发在 develop 分支进行,开发完结之后,发布之前兼并到 master 分支,这个流程没啥大问题。
假如你是 3、5 个人,那就不相同了,有人说也没多大问题啊,直接能够新建 A、B、C 三个人的分支啊,每人各自开发各自的分支,然后开发完结之后再逐渐兼并到 master 分支。可是实际却是,你正在某个分支开发某个功用呢,这时分忽然发现线上有一个很严重的 bug ,不得不停下手头的作业优先处理 bug ,而且许多时分多人协作下假如没有一个规范,很简略发生问题,所以多人协作下的分支办理规范很重要,就跟代码规范相同重要,以下就跟咱们引荐一种咱们内部在运用的一种分支办理流程 Git Flow。
4. Git Flow
精确的说 Git Flow 是一种比较老练的分支办理流程,咱们先看一张图能明晰的描绘他整个的作业流程:
第一次看上面那个图是不是一脸懵逼?跟我其时相同,不急,我来用简略的话给你们解说下。
一般开发来说,大部分状况下都会具有两个分支 master 和 develop,他们的责任分别是:
master:永久处在行将发布(production-ready)状况
develop:最新的开发状况
确切的说 master、develop 分支大部分状况下都会保持一致,只要在上线前的测验阶段 develop 比 master 的代码要多,一旦测验没问题,预备发布了,这时分会将 develop 兼并到 master 上。
可是咱们发布之后又会进行下一版别的功用开发,开发中心或许又会遇到需求紧迫修正 bug ,一个功用开发完结之后忽然需求变动了等状况,所以 Git Flow 除了以上 master 和 develop 两个首要分支以外,还提出了以下三个辅佐分支:
feature: 开发新功用的分支, 根据 develop, 完结后 merge 回 develop
release: 预备要发布版别的分支, 用来修正 bug,根据 develop,完结后 merge 回 develop 和 master
hotfix: 修正 master 上的问题, 等不及 release 版别就必须马上上线. 根据 master, 完结后 merge 回 master 和 develop
什么意思呢?
举个比方,假定咱们现已有 master 和 develop 两个分支了,这个时分咱们预备做一个功用 A,第一步咱们要做的,便是根据 develop 分支新建个分支:
git branch feature/A
看到了吧,其实便是一个规范,规则了一切开发的功用分支都以 feature 为前缀。
可是这个时分做着做着发现线上有一个紧迫的 bug 需求修正,那赶忙停下手头的作业,马上切换到 master 分支,然后再此基础上新建一个分支:
git branch hotfix/B
代表新建了一个紧迫修正分支,修正完结之后直接兼并到 develop 和 master ,然后发布。
然后再切回咱们的 feature/A 分支持续着咱们的开发,假如开发完了,那么兼并回 develop 分支,然后在 develop 分支归于测验环境,跟后端对接而且测验的差不多了,感觉能够发布到正式环境了,这个时分再新建一个 release 分支:
git branch release/1.0
这个时分一切的 api、数据等都是正式环境,然后在这个分支上进行最终的测验,发现 bug 直接进行修正,直到测验 ok 达到了发布的规范,最终把该分支兼并到 develop 和 master 然后进行发布。
以上便是 Git Flow 的概念与大约流程,看起来很杂乱,可是关于人数比较多的团队协作实际开发中的确会遇到这么杂乱的状况,是现在很盛行的一套分支办理流程,可是有人会问每次都要各种操作,兼并来兼并去,有点费事,哈哈,这点 Git Flow 早就想到了,为此还专门推出了一个 Git Flow 的东西,而且是开源的:
GitHub 开源地址:https://github.com/nvie/gitflow
简略点来说,便是这个东西帮咱们省下了许多过程,比方咱们其时处于 master 分支,假如想要开发一个新的功用,第一步切换到 develop 分支,第二步新建一个以 feature 最初的分支名,有了 Git Flow 直接如下操作完结了:
git flow feature start A
这个分支完结之后,需求兼并到 develop 分支,可是直接进行如下操作就行:
git flow feature finish A
假如是 hotfix 或许 release 分支甚至会主动帮你兼并到 develop、master 两个分支。
想必咱们现已了解了这个东西的详细效果,详细装置与用法我就不多提了,感兴趣的能够看我下我之前写过的一篇博客:
http://stormzhang.com/git/2014/01/29/git-flow/
5. 总结
以上便是我共享给你们的关于分支的一切常识,一个人你或许感触不到什么,可是实践作业中大都以团队协作为主,而分支是团队协作必备技术,而 Git Flow 是我引荐给你们的一个很盛行的分支办理流程,也是咱们薄荷团队内部一直在实践的一套流程,期望对你们有学习含义。