介绍基于Git 两种协做开发模式,GitHub Flow & Git Flowhtml
对于Github 一些好用的特殊操做技巧 ,能够见GitHub 特殊操做技巧 和Git的基本操做git
GitHub Flow —— 以部署为中心的开发模式,经过简单的功能和规则,持续且高速 安全地进行部署。在实际开发中每每一天以内会实施几十次部署,而支撑这一切的,就是足够简单的开发流程以及彻底的自动化。程序员
GitHub Flow 特色:github
2
新建的本地仓库分支中进行提交使用Github Flow 的前提条件:web
荷兰程序员 Vincent Driessen 曾发表了一篇博客,让一个分支策略广为人知。具体流程见下图(引用该博客的一幅图片)api
这一流程最大的亮点是考虑了紧急Bug的应对措施,整个流程显得过于复杂,因此在实施该方案前,须要对整个开发流程进行系统的学习。也须要借助Git flow 等工具的辅助。安全
下面根据上图,按不一样分支 进行 说明:工具
在Git Flow 中,这两个分支相当重要,它们会贯彻整个流程始终,绝对不会被删除。post
master 分支学习
master 分支时常保持着软件能够正常运行的状态。因为要维护这一状态,因此不容许开发者直接对master 分支的代码进行修改和提交。
其余分支的开发工做进展到能够发布的程度后,将会与master分支进行合并,而且这一合并只在发布成品时进行。发布时将会附加版本编号的Git标签。
develop分支
develop分支是开发过程当中代码中心分支。与master 分支同样,这个分支也不容许开发者直接进行修改和提交。
程序员要以develop分支为起点新建feature 分支,在feature 分支中进行新功能的开发或者代码的修正。也就是说develop分支维系着开发过程当中的最新代码,以便程序员建立feature分支进行本身的工做。
feature 分支以develop分支为起点,是开发者直接更改代码发送提交的分支。开发流程:
具体指令:
$ git checkout develop $ git pull $ git flow feature start add-user //add branch feature/add-user $ git branch // feature/add user start commit commit .... $ git push orgin feature/add-user //到github 上去代码审查,切到develop分支,进行pull request $ git checkout develop $ git pull // 当feature/add-user 合并到 develop后,本地develop 须要更新到最新状态
注意,默认状态是pull request 到master。这时须要手动切换到develop分支,再进行pull Request 操做。
若是采用该开发策略,那么能够在setting 中 Option 中,修改Default Branch 为 develop ,这样就省去了手动修改的麻烦。
与develop分支合并后,已经完成工做的feature分支能够在适当的时机删除
咱们发送的pull request 在github 端与develop 合并后,为了让其反应到本地的develop分支中,咱们须要进行如下操做:
每当须要从develop分支建立feature等分支时,记得必定要先执行上述操做,保证develop分支处于最新状态。
建立 release分支 ,在这个分支,咱们只处理与发布前准备相关的提交,好比版本编号变动的元数据的添加工做。若是软件部署到预演环境后测试出bug,相关修正也要提交到这个分支。
注意:该分支绝对不能包含需求变动或者功能变动等重大修正。这一阶段的提交数应该限制到最低。
$ git checkout develop $ git pull $ git flow release start '1.0.0'
当全部修正处理完后,咱们结束这分支
$ git flow release finish '1.0.0' //期间会须要填写 提交信息、这个版本的提交信息、合并的提交信息。无特殊状况,通常默认。
所有结束后,会显示以下
$ git flow release finish '1.0.0' Switched to branch 'master' Your branch is up-to-date with 'origin/master'. Merge made by the 'recursive' strategy. README.md | 2 ++ 1 file changed, 2 insertions(+) Switched to branch 'develop' Your branch is up-to-date with 'origin/develop'. Already up-to-date! Merge made by the 'recursive' strategy. Deleted branch release/1.0.0 (was d3f54a0). Summary of actions: - Release branch 'release/1.0.0' has been merged into 'master' - The release was tagged '1.0.0' - Release tag '1.0.0' has been back-merged into 'develop' - Release branch 'release/1.0.0' has been locally deleted - You are now on branch 'develop'
查看版本tag
经过前面一系列的操做,咱们建立了与发布版本号相同的Git标签
$ git tag 1.0.0
更新到远程仓库
对此,咱们对多个分支进行了修改,因此须要利用push操做将修改更新到Github端的远程仓库。先从develop开始
$ git push origin develop
而后是master
$ git checkout master $ git push origin master
再push 标签信息
$ git push --tags
这样版本号 1.0.0 的标签信息就已经push 完成
下述状况须要建立 hotfix 分支
假设修复BUG 后的版本至 1.0.1
$ git fetch origin
如今以1.0.0的标签信息为起点,建立名为1.0.1 的hotfix分支。
$ git flow hotfix start '1.0.1' '1.0.0'
修复工做结束后,将hotfix 分支push 到github端的远程仓库,并向master分支发起Pull Request
$ git push origin hotfix/1.0.1
建立标签和进行发布
在Github项目主页,点击release ,为本次hotfix 建立1.0.1标签。点击 Draft a new release 按钮,输入相关标签信息,在Target中指定master分支(master分支已经合并了hotfix1.0.1的修改)。而后填写相关信息,点击Publish release 进行发布
1.0.1发布后,以前发布的成品也就完成了生命周期
$ git fetch origin
从 hotfix 分支合并到develop 分支
登陆到Github,从hotfix1.0.1分支向develop分支发送Pull Request便可。审查后便会被合并到develop分支
建议把开发流程图放大贴在墙上,这样可以有效帮助团队成员理解流程内容
版本号的分配规则 x.y.z
x: 在重大功能变动,或者版本不向下兼容+1,此时y z归零 y: 在添加新功能或者删除已有功能+1 此时z归零 z: 只在进行内部修改后+1.