如何让Git适应敏捷开发流程?
一旦涉及到版本控制系统,Git实际上代表敏捷开发的水平。Git作为一款强大的开源系统,有较强的灵活性,可以按需匹配任何开发团队的工作流程。而这种分布式相比较集中式来说,可以赋予系统更好的性能特征,且允许开发人员在本地自由实验,在他们修改到自己认为没有问题时再发布到团队。
除了灵活性和分布式等优点外,Git的主要职能是支持和强化敏捷开发。将Git视为敏捷开发的一部分,与单片发布和集中版本控制系统相比,所有变更可以更快部署。
专家提示:
Git是分布式版本控制系统(DVCS)。与CVS或Subversion (SVN)等工具不同,Git允许开发人员在团队资源库中创建个人独有的分支,并与主代码库并行存储。这些自创副本被称为fork。fork上的工作完成后,开发人员可以很轻松地将更改上传至主代码库。
方法一:将开发任务视为Git的分支
在产品功能细化并添加至产品路线图,开发团队做好开工准备后,Git开始发挥作用。但在正式开发之前,团队需要有一个敏捷功能开发速成课:产品、设计、质保(QA)、研发要开一个功能启动会就具体的功能、项目范围以及为了确保完成这些功能该被分解成什么样的任务等方面达成共识。在这些被称为用户故事的任务拆解完成之后,任务会分配给各个开发人员。Git也是在这个时候参与到我们的敏捷开发流程中。
在Worktile,我们会为每个独立的任务创建一个新的分支,无论是新的功能,BUG修复还是对现有代码的调整,每次代码的更改都会创建新的分支作为开发分支,等我们把功能完全做完之后,会提交Pull Request 到develop分支或者其他我们稳定的分支中,有管理员或者其他有合并权限的成员进行代码 Review,之后合并代码。
分支的应用使任务变得直观易懂,同时允许团队在一个中央代码库内轻松协作。开发人员一旦创建了分支,就意味着他们实际上拥有独立于中央代码库之外的个人代码库。
对敏捷团队而言,将功能拆分为用户故事后创建相应的分支,意味着开发团队的成员可以单独处理各自的任务,基于相同的代码库在不同的仓储下工作。开发工作量并未因此增加,因为开发人员能够更专注在与主仓储分开的小块任务,这样也避免因为存在过多依赖关系而减缓开发进程。
专家提示:
除了设置任务分支之外,还可以设置其他类型的Git分支,且它们之间可以兼容并存。例如,我们可以为单个版本的发布设置不同的分支,这样可以让开发人员为特定版本进一步制定稳定和强化的工作计划,而同时也不会影响到其他开发人员开发未来的版本。
创建单个版本发布的分支之后,需要定期将其融合到主分支任务中,确保所涉及的功能都能兼容到未来的版本中并发挥作用。为了最大限度地减少积压,所创建的单个版本发布的分支最好尽可能接近计划发布日期。
方法二:充分利用多分支可单独测试的优势
分支一旦被认为已经完成并可以进行代码review后,Git就开始在敏捷开发流程中扮演另外一个关键角色:测试。成功的敏捷团队会进行代码review并进行自动化测试(持续集成)。为了更好地完成代码review和测试工作,开发人员可以直接通知团队其他成员该分支已经完成可以review,然后提交Pull Request。简单来讲,Pull Request就是请求其他开发人员将你已经做好可以进行测试的分支合并到主分支上。
如果工具使用得当,持续集成服务器就可以在合并之前创建并检测你提交的Pull Request。这样做能确保合并分支不会出现问题。通常情况下,还能让我们更轻松地重新定位Bug修复和冲突,因为在各分支之间存在分歧时,Git能够区分各分支与主代码库之间的差异。
专家提示:
一个长期运行且未合并到主分支的分支,可能会影响团队的敏捷性和迭代能力。如果存在一个长期运行的分支,就意味着实际上存在两个不同版本的代码库,而这将直接带来更多的bug修复工作和冲突。最好的解决方式是设定短期的分支,可以通过将用户故事拆分为较小的任务、更为细致的sprint规划以及尽早合并代码作为隐性特征(dark features)等这些方式来实现。
方法三:Git确保敏捷开发的透明度和质量
Git/敏捷故事通常与效率、测试、自动化和整体敏捷性有关。将分支合并到主分支后,敏捷的工作流程就完成了。同样,通过提交Pull Request将代码合并后,意味着在代码完成的同时,所有文档中的工作也已经完成,团队其他成员已经停止代码活动,且已经可以进行发布。这使得敏捷团队可以快速而自信地进行频繁的发布:这也是成功敏捷团队的一个标志。
专家提示:
定期发布是敏捷开发的关键。要让Git适应敏捷工作流程,就要确保主分支一直是健康畅通的。这意味着,如果某个功能尚未做好,就可以等到下次再发版。如果团队想尝试较短的发版周期,也是可以的。
文章来源:Worktile敏捷博客
欢迎访问交流更多关于技术及协作的问题。
文章转载请注明出处。
如何让Git适应敏捷开发流程?的更多相关文章
- 小谈Scrum敏捷开发流程
一晃眼,有两年没有写博客了,回顾前两年,各种奔波,各种忙碌,也有不少的收获.从今天开始,我要把这些收获都分享在这里. 其实这两年,对我影响最大的是开发流程.总所周知,一个好的开发流程,对于项目的进行, ...
- git 一般的开发流程中的代码管理
一般的开发流程中的代码管理 1. 从版本库中下载代码 git clone ssh://wenbin@192.168.1.3:29418/mustang-web 2. 针对某个feature(比如ins ...
- 敏捷开发 and 敏捷测试
名词解释 agile: 敏捷的:灵活:敏捷开发. scrum: 扭打,混打:并列争球:参加并列争球. sprint: 冲刺,全速跑. backlog: 积压的工作:积压待办的事务. retrospe ...
- IPD体系向敏捷开发模式转型实施成功的四个关键因素
文/杨学明 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Development)是当前国内外企业产品研发管理的最常用的3种模式.随着创新环境的快速发展,许多企业都会 ...
- 敏捷开发——User Story
敏捷开发流程: 1.我们首先需要确定一个Product Backlog(按优先顺序排列的一个产品需求列表),这个是由Product Owner 负责的: 2.Scrum Team根据Product B ...
- 杨学明老师推出全新课程--《敏捷开发&IPD和敏捷开发结合的实践》
课时:13小时(2天) 敏捷开发&IPD和敏捷开发结合的实践 讲 师:杨学明 [课程背景] 集成产品开发(IPD).集成能力成熟度模型(CMMI).敏捷开发(Agile Developmen ...
- 浅谈Scrum敏捷开发:4个输入/输出、3个关键物、3个会议
文章对Scrum敏捷开发流程进行系统的分析,希望借此文能够加深你对敏捷开发的认知,更好的展开产品工作. Scrum敏捷开发,是一种敏捷开发框架,是一个增量的.迭代的开发过程,具备可视.可集成和可运行使 ...
- 20175316 盛茂淞 2018-2019-2 《Java程序设计》实验三《敏捷开发与XP实践》 实验报告
实验内容与要求 1.XP基础 极限编程(Extreme Programming,XP)是一种全新而快捷的软件开发方法.XP团队使用现场客户.特殊计划方法和持续测试来提供快速的反馈和全面的交流: XP是 ...
- 环信联合创始人: Saas敏捷开发实践!
马晓宇 --环信联合创始人/执行总裁 我们是一个做云服务的创业公司,所以我就云服务创业公司的角度,来谈谈我们是怎么去实践敏捷开发的.确切地说,就是讲讲我们这几年的这些教训... 1-创业公司敏捷开发流 ...
随机推荐
- c# HttpWebRequest https的一些处理
先看下请求方法 public string Get_Request( string strUrl, CookieContainer _cookie = null, string strHost = & ...
- Qt4编译生成VS静态库(静态编译),有三个bat文件 good
开发环境:vs2008+Qt4.8.4源码库 其他环境请自己尝试,原理应该是差不多的 Qt编译生成静态库 1. 本教程只针对在win32平台,使用VS开发工具(例子以VS2008为例) ...
- Android native进程间通信实例-binder篇之——HAL层访问JAVA层的服务
有一天在群里聊天的时候,有人提出一个问题,怎样才能做到HAL层访问JAVA层的接口?刚好我不会,所以做了一点研究. 之前的文章末尾部分说过了service call 可以用来调试系统的binder服务 ...
- Spark学习之路(八)—— Spark SQL 之 DataFrame和Dataset
一.Spark SQL简介 Spark SQL是Spark中的一个子模块,主要用于操作结构化数据.它具有以下特点: 能够将SQL查询与Spark程序无缝混合,允许您使用SQL或DataFrame AP ...
- 【Mysql】细节补充,约束、索引等
约束: 显示建表语句:show create table 表名 查询表中的约束:SELECT * FROM information_schema.`TABLE_CONSTRAINTS` where ...
- Java多线程学习(吐血超详细总结)
Java多线程学习(吐血超详细总结) 林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实 ...
- PATB 1032 挖掘机技术哪家强(20)
#include <cstdio> #include <vector> using namespace std; const int N = 100001; vector &l ...
- Spring Boot 整合 Freemarker,50 多行配置是怎么省略掉的?
Spring Boot2 系列教程接近完工,最近进入修修补补阶段.Freemarker 整合貌似还没和大家聊过,因此今天把这个补充上. 已经完工的 Spring Boot2 教程,大家可以参考这里: ...
- Dubbo源码学习之-SPI介绍
前言 学习之路还是要戒骄戒躁,一以贯之的积累前行.之前的公司部门技术达人少,自己总向往那些技术牛人多的团队,想象自己进去之后能跟别人学到多少东西.如今进到一个这样的团队之后,却发现之前自己的想法过于幼 ...
- RABC权限控制(二级菜单实现)
目前大部分系统由于用户体验,基本上菜单不会做的很深,以二级菜单为例,做了一个简单的权限控制实现,可精确到按钮级别(基于django),下面具体看看实现 1.表结构的设计 无论开发什么都需要先梳理清楚需 ...