接前篇git版本控制开发流程小结笔记(二),我们接着展示其他的开发流程。
那么接下来,完成了几个功能点的开发之后,develop分支已经达到了一个可以发布的状态,显然按照传统的流程我们首先要经过一个预发的流程。那我们,我们将最新的develop分支拉出来成为一个release分支,暂且取名为release1。
$ git checkout -b release1 Switched to a new branch 'release1' $ echo "some release configurations" >> release.config $ ls 1.txt 2.txt release.config
为了展示需要,这里写了一个release.config文件,我们假设它就是预发时候的一些环境配置,然后commit掉。
$ git add -A $ git commit -m 'release1' [release1 c005f04] release1 1 file changed, 1 insertion(+) create mode 100644 release.config
考虑最通常的情况,预发的时候可能遇到一些预发环境下的bug,这个时候我就直接在release分支下进行修复演进,如果bug问题很大,则需要 重新并入develop中,拉出新的feature进行开发重构。下面演示直接在release分支下进行bug fixs。假设是1.txt出现了问题,我们将feature1字符串修改为feature1+。
$ echo "feature1+" > 1.txt $ git add -A $ git commit -m 'release1 bug fix' [release1 661497f] release1 bug fix 1 file changed, 1 insertion(+), 1 deletion(-)
好了,预发环境终于一切正常了,下面就是激动人心的线上发布。这里我们需要将release分支同时并入master分支和develop分支,master分支供线上发布,develop分支供下次开发演进。
$ git checkout master Switched to branch 'master' $ git merge release1 Updating 26a17c8..661497f Fast-forward 1.txt | 1 + 2.txt | 2 ++ release.config | 1 + 3 files changed, 4 insertions(+) create mode 100644 release.config $ git checkout develop Switched to branch 'develop' $ git merge release1 Updating f5cb288..661497f Fast-forward 1.txt | 2 +- release.config | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 release.config
好了,一切大功告成。让我们来看一下分支节点网络图。
由图可见,develop,master,release1三个分支的head已经指向同一个节点,work tree已经保持一致。
我们经常会碰到一些线上意想不到的bug,需要紧急修复。这时,我们就直接从master分支拉出hotfixes分支进行修复,这里我们假设线上 出现了bug的问题在于1.txt的feature1+字符串的+号,我们需要删除掉+号,我们拉出hotfix1分支进行修改。
$ git checkout master Switched to branch 'master' $ git checkout -b hotfix1 Switched to a new branch 'hotfix1' $ echo "feature1" > 1.txt $ git add -A $ git commit -m 'hotfix1' [hotfix1 17692cc] hotfix1 1 file changed, 1 insertion(+), 1 deletion(-)
bug修复完毕,测试通过后我们将分支合并到master和develop中去。
$ git checkout develop Switched to branch 'develop' $ git merge hotfix1 Updating 661497f..17692cc Fast-forward 1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) $ git checkout master Switched to branch 'master' $ git merge hotfix1 Updating 661497f..17692cc Fast-forward 1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
注意这里可能出现的情况就是,由于develop分支仍在开发,所以可能出现hotfix分支合并到develop分支发生冲突的情况,这个时候我 就需要处理一下冲突啦。好了,完成这些步骤之后,我们就顺利地修复完了线上bug,一切回归正常。让我们来看一下分支节点网络图。
总得而言,博主认为git的开发流程还是非常清晰简单的,由于git方便的branch机制,我们可以不像以前使用svn那样单纯的整个项目 copy的方法去拉分支进行开发,同时清晰的节点网络图也更加有利于项目的迭代。因此再也不会svn混乱了目录结构和开发流程而让项目的熵值越来越大 了!!