为什么使用Git

“svn用了这么多年都好好的,为啥折腾搞Git?”
“Git一点都不好用,提交个代码都提交不上去!”
“Git这么复杂,命令多到记不住,而且完全用不到。哪有svn简单好用?”
 
推销任何一种新事物,无论新事物本身是否先进,最能打动客户的一点就是,能否解决客户的痛点,能否给客户带来价值。
拿软件开发过程来说,项目团队关注项目版本的可控性,包括对多个版本的开发、构建、测试、发布、特性等管理;关注持续集成的效率等;开发团队关注代码管理、回溯、合并的可控性;关注开发协同等;
在svn(目前在用的版本管理工具)的上述痛点,Git都能很大的解决或改善。推广Git,背后的目的就是提高项目产品的质量和团队开发的效率。当然,任何收益都有代价,在支持如此多的特性的同时,Git的使用复杂度也势必增加。
本文侧重讨论Git在团队的推广,所以首先回答一下,相较于svn,Git给开发中个人和开发团队带来的价值:
  • 对于开发者,可以随时提交修改到本地仓库,方便代码修改查看,回滚,终结svn时代开发阶段无代码管理工具、代码管理混乱的窘境,提高个人代码管理效率。
  • 如果一个功能需要尝试多种方案进行对比,开发者可以通过本地分支对多个方案代码进行修改、对比、查看等管理,终结svn时代手动备份代码的远古习惯,提高个人代码管理效率。
  • 如果一个功能需要多人协同开发,可以通过Git分支协同开发,驱散自己搭svn服务器、建svn仓库、代码手动同步的苦闷,提升团队协同开发效率。
  • 如果这些都没有打动你,那还有最后一点:全世界都在用Git,作为基本技能的Git你都不会的话,以后找工作都困难哦。
 

团队级Git分支模型

Git本身并没有推荐的最佳实践,但有很多非官方的最佳实践总结,比如这篇《一个成功的Git分支模型》,这个分支模型贯穿整个产品的生命周期,为整个产品项目服务。这个模型过于复杂,特别是对于特性团队级的Git来说,有点重了。
团队的Git分支策略由使用场景、任务特点、开发周期等决定,在团队2年多的Git使用实践中,主要用到了如下三种分支模型:
  • remote/master
  • remote/master, remote/dev
  • remote/master,  local dev
 
分支详情展示:
alex@alex-desktop:~/healthcheck$ git br -a
* master
remotes/origin/master

这个分支模型只有master分支。适用于在新团队中起步推广Git,避免使用复杂的分支模型,引起程序员心理不适。而且对于不需要协同开发的任务,这个分支模型也够用了。

alex@alex-desktop:~/sc/robot_framework$ git br -a
develop
* master
remotes/origin/develop
remotes/origin/master

这个分支模型有master和dev分支,master分支是稳定版本分支,用于每日自动化测试的持续集成,要保证功能稳定。dev分支是开发分支,用于新特性开发和协同开发需要。

 
alex@alex-desktop:~/sc/ci$ git br -a
* alex_dev
master
remotes/origin/master

这个分支模型除了一个master分支外,还有一个未推送的本地dev分支。这种分支模型适用于如下场景:想验证对比多个实现方案,对已有实现采用多种策略进行重构尝试;只想从主分支同步某些合入,避免不相关的同步破坏自己正在开发的功能。

 

团队级Git工作流程

Git之所以强大,主要来自其复杂的分支模型和分布式策略,这也是其复杂的原因。
Git命令是操作的是Git对象和对象间的关系。所以要掌握Git,理解Git的工作机制,首先要理解Git中的基本对象,比如远程仓库、本地仓库、远程分支、本地分支,暂存区(stage)、工作区(workspace),以及数据是如何在这些对象中流动的。在这基础上,才有可能真正掌握Git。
上图是前面介绍的几种分支模型下的Git工作流及相关命令的总结梳理。
详细的命令讲解这里不再赘述,请读者咨询Google。这里只对几个易混淆的操作命令的区别总结如下:
  • fetch只更新local repo,不修改local branch;
  • pull更新local branch,pull等价于fetch+merge,pull -r等价于fetch+rebase;
  • merge、rebase同时更新local branch、stage和workspace,只是合并策略不同;
  • reset更新local branch和stage,不更新workspace;
  • checkout更新stage和workspace,不修改local branch
 

Git推广注意事项

  • Git推广中的最大的问题往往是最简单的问题,比如软件安装、兼容。所以最好能提供工具来统一环境,包括操作系统、基础软件、Git版本、Git配置等;
  • 提前准备好各系统的安装包、安装说明,方便所有人访问查阅;
  • 制定Git使用规范,通过工具,在环境配置、分支管理、提交日志、提交策略做好统一约束;
  • 采用适合任务特点和团队的Git模型,不要盲目仿照。
 

-EOF-

 
 
 
 

团队Git工作流总结的更多相关文章

  1. 开发环境之git:团队协作git工作流与常用命令

    此篇文章只是一篇傻瓜式的,记录工作中比较规范且常见的一个git工作流需要用到的命令,让你可以快速的开始工作.而不是一些长篇大论的理论知识,如果你有用过sourcetree或者其它图形化工具,结合你正在 ...

  2. Git工作流总结

    引用自:https://github.com/xirong/my-git/blob/master/git-workflow-tutorial.md 说明: 个人在学习Git工作流的过程中,从原有的 S ...

  3. 深入理解学习Git工作流

    http://blog.csdn.net/hongchangfirst/article/list/3 //可以看看 http://blog.csdn.net/hongchangfirst/articl ...

  4. [转]深入理解学习GIT工作流

    深入理解学习Git工作流 字数13437 阅读2761 评论3 喜欢70 个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心 ...

  5. 深入理解学习Git工作流(转)

    个人在学习git工作流的过程中,从原有的 SVN 模式很难完全理解git的协作模式,直到有一天我看到了下面的文章,好多遗留在心中的困惑迎刃而解,于是我将这部分资料进行整理放到了github上,欢迎st ...

  6. Git工作流:中心工作流(翻译)

    使用Git作为版本控制器,有众多可能的工作流(Workflow),这使得我们这些新鸟不知道在实际工作中不知道该选择哪种工作流.这里我们对最常见的Git工作流做一个对比,为企业团队提供一个参考. 正如你 ...

  7. git 工作流介绍

    GIT Git工作流你可以理解为工作中团队成员遵守的一种代码管理方案,在Git中有以下几种工作流方案作为方案指导: 集中式工作流 功能开发工作流 Gitflow工作流 Forking工作流 下面针对性 ...

  8. 【学习总结】Git学习-GIT工作流-千峰教育(来自B站)

    Git工作流指南 - av32575602 文档资料 目录: 1-什么是版本控制系统 2-工作流简介 3-集中式工作流 4-功能分支工作流 5-GitFlow工作流 小记: 初看差点放弃了,不过后面还 ...

  9. 四种常见 Git 工作流比较

    BY 童仲毅(geeeeeeeeek@github) 这是一篇在原文(BY atlassian)基础上演绎的译文.除非另行注明,页面上所有内容采用知识共享-署名(CC BY 2.5 AU)协议共享. ...

随机推荐

  1. 动力节点Java培训告诉你Java线程的多功能用法

    现在的java开发可谓是八仙过海各显神通啊!遥想当下各种编程语言萎靡不振,而我Java开发异军突起,以狂风扫落叶之态,作为Java培训行业的黄埔军校,为了守护Java之未来,特意总结了一些不被人所熟知 ...

  2. Python学习笔记——集合类型

    集合类型有两种不同的类型——可变集合(set)和不可变集合(frozenset) 可变集合不是可哈希的,不能用作字典的键,也不能用做其他集合中的元素 不可变集合是有哈希值的,能被用做字典的键或者是作为 ...

  3. ExtJs 实现表单联动

    最近做的项目使用Extjs.遇到表单联动的业务.下面来说说主要实现思想: 说明:表单联动一般存在从属关系,有大范围的对象和大范围中的小对象.比如地理位置的选定(例:浙江省-杭州市-某某县).在这里,我 ...

  4. C#模拟鼠标键盘控制其他窗口(一)

    编写程序模拟鼠标和键盘操作可以方便的实现你需要的功能,而不需要对方程序为你开放接口.比如,操作飞信定时发送短信等.我之前开发过飞信耗子,用的是对飞信协议进行抓包,然后分析协议,进而模拟协议的执行,开发 ...

  5. 亲历腾讯WEB前端开发三轮面试经历及面试题

    [一面]~=110分钟  2014/09/24 11:20  星期三 进门静坐30分钟做题. 填空题+大题+问答题 >>填空题何时接触电脑 何时接触前端运算符 字符串处理        延 ...

  6. PHP正则表达式详解(二)

    前言: 在本文中讲述了正则表达式中的组与向后引用,先前向后查看,条件测试,单词边界,选择符等表达式及例子,并分析了正则引擎在执行匹配时的内部机理. 本文是Jan Goyvaerts为RegexBudd ...

  7. MySQL Cluster在线添加数据节点

    增加或减少数据节点的数量和 NoOfReplicas(即副本数,通过管理节点的config.ini配置文件来设置)有关,一般来说NoOfReplicas是2,那么增加或减少的数量也应该是成对的,否则要 ...

  8. Codeforces 699D Fix a Tree 并查集

    原题:http://codeforces.com/contest/699/problem/D 题目中所描述的从属关系,可以看作是一个一个块,可以用并查集来维护这个森林.这些从属关系中会有两种环,第一种 ...

  9. ASP.NET 操作Excel中的DCOM配置方式

    具体配置方式如下: 1. 组件服务管理窗口 在运行栏中输入命令:dcomcnfg,打开组件服务管理窗口,在组件服务->计算机->我的电脑->DCom配置->找到Microsof ...

  10. celery 异步任务小记

    这里有一篇写的不错的:http://www.jianshu.com/p/1840035cb510 自己的"格式化"后的内容备忘下: 我们总在说c10k的问题, 也做了不少优化, 然 ...