上一篇文章介绍了常用的版本控制工具以及git的基本用法,从基本用法来看git与其它的版本控制工具好像区别不大,都是对代码新增、提交进行管理,可以查看提交历史、代码差异等功能。但实际上git有一个重量级的功能“分支”,git的分支与其它工具的分支不同,git分支的操作完全在本地进行,所以可以快速的创建和切换。
版本控制工具除了对代码进行管理外,实际上它还影响了整个软件编码的工作流程,git因为其分支特性使得开发流程发生了变化,本文将从以下几点来介绍分支和git的工作流程:
版本控制管理分支简介
Git的分支
分支的基本操作
远程分支
Git基于分支的工作流程
集中式工作流
功能开发工作流
Git Flow工作流
Git的分布式工作流
再谈集中式工作流
集成管理者工作流
司令官与副官工作流
Pull Request
Git常用的GUI工具
小结
版本控制管理分支简介 在使用集中式的版本管理工具时,一般会在项目的仓库中创建Trunk(主干)、Branches(分支)、Tag(标记)几个目录,分别用于放置开发代码、代码分支以及代码里程碑,分支的目的是为了开发一些测试性功能或者修复Bug时从开发主线上分开避免互相影响,但是要注意的是集中式的工具创建分支的过程是由服务器完成的,当服务器完成分支的创建后,使用者还需要将分支代码checkout到本地,如果项目较大或者网络较慢,那么checkout将是一个漫长的过程,所以使用集中式工具时分支的创建是相对谨慎的。
对于Git来说分支就是整个仓库的基础(注:当使用git init命令创建一个仓库时,默认会创建一个名为master的分支),由于Git的本地处理特性,分支的创建基本是一瞬间完成的,正因为这一特性,使用git来进行代码开发的工作流程就有了巨大的变化,如开发功能时创建对应的分支、修复bug(不仅仅是生产bug,任何测试产生的bug都可以创建分支)以及开源项目任何人都可以创建自己的分支进行开发。
查看分支:(git branch)
分支的创建:(git branch TranslateMainPage)
分支的切换:(git checkout TranslateMainPage)
注:git checkout -b TranslateMainPage相当于执行了创建和切换两个命令。
分支的合并:(git merge TranslateMainPage)
分支的删除:(git branch -d TranslateMainPage)
将本地分支上传到远程服务器:(git push -u origin version0 注:-u是--set-upstream的缩写)
远程分支以其基本操作
Git的操作都是基于分支的,同时Git作为一个分布式的版本控制工具可以使用远程托管平台来进行代码库托管,那Git的分支是如何在远程平台上体现的呢?
Git中有一个remote命令,它可以用来管理一系列被跟踪或者说被关联的远程仓库(注:remote管理的是仓库),如下图通过git remote以及 git remote show origin来查看远程仓库的信息:
这里要注意的是“origin”,它实际上是远程仓库的一个名称,通过容易记忆名称来代替仓库的URL地址更加容易使用,另外如果使用git clone命令来克隆一个远程仓库,那么远程仓库名称会默认为origin。
对于远程分支常用的操作有:
添加新的远程仓库:(git remote add Myblog https://github.com/yqszt/Myblog.git,Myblog是本地用来代替后面Url的名称)
克隆一个远程仓库:(git clone https://github.com/yqszt/MyBlog.git)
默认创建一个名称为origin的远程仓库:
将数据(commit)提交到远程仓库:(git push origin)
从远程仓库拉取更新:(git fetch)
注:使用git fetch后,并不会将新的内容更新到工作区域的文件中,所以可以通过git diff master origin/master命令来比较差异:
同时也可以使用git merge命令来将更新合并到工作区域:
注:git pull命令相当于执行了git fetch和git merge两个命令。
Git基于分支的工作流程