童话说说技术创业美文职业
快好知
职业母婴
职场个人
历史治疗
笔记技能
美文纠纷
幽默家庭
范文作文
乐趣解密
创业案例
社会工作
新闻家居
心理安全
技术八卦
仲裁思考
生活时事
运势奇闻
说说企业
魅力社交
安好健康
传统笑话
童话初中
男女饮食
周易阅读
爱好两性

经验分享大型分布式团队的代码版本管理

1月13日 天浪楼投稿
  不管团队最终选用什么代码版本管理工具,只要适合自己的团队的开发流程和工作方式,并且代码管理顺畅就可以了。
  介绍这个话题,有两个原因:
  从开始工作到现在,我经历过没有代码版本管理、代码集中式管理,以及现在的分布式管理,我深刻体会到它在软件开发过程中的重要性;
  我在工作中遇到的很多客户都存在对于代码版本管理的各种问题、困惑和不同的需求。
  所以,我希望将我在这个方面的经验分享给更多人,希望能帮助更多的团队解决在代码版本控制方面的问题和疑惑。
  一、代码版本管理系统的历史
  代码版本管理系统大致可以分为三个时代:
  第一代:本地式
  这代主要的特点提供本地代码版本控制,比如SCCS(1972)、PVCS(1985)等。
  这代主要实现了基本的代码版本管理,但缺点是无法让多人同时对一个版本库进行修改。这个也和当时软件规模不够大有关,也没有这样的需求。
  第二代:客户端服务器式
  这代主要的特点是提供集中式服务器端代码版本控制,比如CVS(1986),ClearCase(1992),VisualSourceSafe(1994),Perforce(1995),Subversion(2000)等。
  这代主要是实现了中心服务器端的代码版本管理,特点是可以让多人同时对一个代码版本库进行同步和修改,但缺点也相当明显:
  在无法连接服务器的情况下,无法查看日志以及提交和比较代码版本(慢速网络和远程异地工作的程序员的痛),以及当服务或者网络出现问题的时候很多人员就会无法工作。
  不支持localbranch,导致branch创建管理复杂,并且一旦创建就很难修改(快速迭代开发中的程序员的痛)
  由于只有一个中心端服务器,一旦发生灾难性问题,那么所有日志都会丢失,所以需要经常做备份(备份需要不小的成本)
  如果软件代码量过于庞大,一般会出现速度缓慢的情况,因为每次的日志查询、不同版本之间的代码比较和代码提交等操作都需要和服务器通信,造成服务器端的负载过大。
  第三代:分布式
  这代主要的特点是提供分布式代码版本控制,比如Git(2005),Mercurial(2005)等。
  这代结合了第一代和第二代的优点并实现了分布式的代码版本管理。
  这代的优点:分布式管理,在没有和服务器有连接的情况下仍然可以查看日志,提交代码,创建分支;支持localbranch,可以快速方便的实现各种分支管理;支持分布式,从而可以实现分块管理,以及负载分流管理。
  缺点是有一定的学习曲线,比如分布方式下的代码同步,localbranch的理解与运用,分布式代码管理的理解与运用等。详细的比较可以参考:这里。
  二、大型分布式团队
  曾经有这样一个分布式团队,他们在多个城市都有小分队,并且正在开发一个大型项目,见下图:
  他们使用的代码版本管理工具是第二代代码管理工具SVN,管理方案如下:
  但是他们在使用的过程中却遇到了下面这些问题与痛点。
  由于是分布式团队,所以:
  基于团队的代码模块分离困难
  当服务器不可用时:
  不能查看提交记录
  不能比较文件
  不能提交代码
  创建代码分支时:
  分支创建速度慢
  多分支管理困难
  在提交代码时:
  希望有CodeReview
  希望有CIReview
  因为代码庞大:
  查看日志慢
  备份代码库的时候:
  需要停机备份
  备份成本高
  针对以上问题,可以使用新一代的分布式的代码版本管理系统来解决,见下图:
  其中每一个团队都有自己独立的代码库,有一个中心库用于同步这些独立的代码库,并且每个库都由团队自己管理和维护。而且代码版本管理系统需要支持轻量分支,代码评审,离线提交,离线查看日志等功能。
  但是由于当前没有一个单一的代码版本管理工具能同时满足以上所有需求,所以很多公司都基于它们开发集成管理系统,比如Gerrit,GitLab,GitHub,BitBucket等。其中的Gerrit由于其开源,免费,以及由Google开发和维护,并管理着Android,OpenStack等大型项目源代码的特点,成为了大型分布式团队优先选择的系统。
  三、Gerrit
  Gerrit是由Google开发的,用于管理GoogleAndroid项目源代码的一个系统。它是基于Java和Prolog等开发的,支持Git,权限管理,代码评审等综合的一个管理系统。它与GitLab和GitHub最大的不同是它隐藏了代码分库管理的细节,使得开发人员不需要进行fork这样的手工分库和同步操作就可以进行代码开发和提交,节省了开发人员的时间,见下图:
  由于Android本身是一个开源项目,所以贡献者非常多,开发团队也遍布多个地方(存在时差),导致“如何保证代码质量”成为一个很大的问题。为此Google在Gerrit中加入了功能强大并且十分严格的代码评审系统。
  首先当代码提交以后并不会直接merge到中心库里面,它会暂时存在一个临时库里面,同时生成一个代码评审记录,并向特定的评审人员发送请求评审的邮件。当评审者在评审代码之后,如果通过就需要在Gerrit系统里面对代码进行打分,如果通过了就可以将代码merge到中心库里面去,如果没有通过,那么这个代码提交就需要被返还给开发者进行修改。
  与此同时它还可以自动触发一次包含本次代码提交的CI构建(前提需要手工预先配置),如果CI自动构建和测试通过,也可以自动在Gerrit系统里面进行打分,可以给最终进行merge的人员进行参考。示意流程见下图:
  由于Android源代码由上百个独立的代码库组成,并且编译一个Android系统需要大部分代码库里面的代码,所以如何管理如此多的代码库也是一个难题,比如如何一次性同步需要编译一个需要支持特定设备的代码库组合。为此Google基于Python语言开发一个工具叫Repo,这个工具可以自定义你需要的代码库的组合,并且一次性对这些代码库进行同步,比如pull和push,见下图:
  四、SVN到Git的迁移
  对于想从集中式代码管理系统迁移到分布式代码管理系统的团队来讲,如果团队规模小,那么问题一般都不大,但是对于大型分布式团队却是困难重重。最主要的两个困难:
  代码量太大,很难一次性将所有的代码和日志等在短时间内迁移成功。
  由于下属团队太多,很难同一时间让所有团队都切换至新的代码管理工具。
  为了解决这些难题,一般都会首先选用1个团队来使用新的代码版本管理工具。如果这个团队转换成功,再将其作为标杆向其他团队推广,从而逐步的将所有团队切换到新的工具上去。
  SVN到Git的迁移方案一般主要会使用两种工具:
  开源免费的
  商业收费的Subgit。
  其中使用Subgit的迁移方案,如下图:
  如果团队组资源充足,还可以使用Gerrit搭建一个独立的Git服务器,从而以分布式的方式进行代码迁移,如下图:
  五、多产品线的管理
  使用同一个中心代码库管理多产品线一直是大型项目的一个困难点,特别是使用SVN这样的工具更是难以管理,因为SVN这种工具的Branch本质上是一个目录拷贝,并且速度慢,而且代码回迁也需要手动进行。但是如果使用Git的特性来管理多产品线,比起SVN是事半功倍。具体方案见下图:
  总结
  分布式代码版本管理系统并不一定适合所有团队,比如中小团队可能更关心的只是成本更低,简单易用,那么SVN等这类集中式版本管理工具还是更为适合。但是,不管团队最终选用什么代码版本管理工具,只要适合自己的团队的开发流程和工作方式,并且代码管理顺畅就可以了。
投诉 评论 转载

作为P2PPM,你应该知道的之资金操作相关互联网金融的领域很广泛,但是既然是金融,则离不开最基础的支付。下文就将从基础的支付知识说起,重点对P2P领域会涉及的一些方面进行阐述。主要根据我的项目经验,不一定权威,不一定准……五年后,产品经理真的会消失么?前段时间,产品经理圈有个很有意思的话题:5年后,产品经理会消失。当然,我看到这样的一个话题以后,就笑笑不说话,但是仔细想想,这却是一个有意思的现象,而这样现象的背后却是:产品圈……思考:作为产品初学者,如何有效地开展产品讨论交流会?本文作者是有心的产品人,他把日常的话题讨论比作了一款产品,从产品思维去探讨产品初学者如何有效地开展一场有关产品的交流会。值得一读我加了一个产品求职交流群,群里的朋友都是在……产品方案应是简单粗暴,还是精耕细作?产品方案是简单粗暴,亦或是精耕细作,还是根据具体维度(时间、成本、用户、产品周期)做对应处理,需要各个产品经理的判断。在讨论产品方案时,经常会遇到这样的情景:这个方……实战经验如何找到小程序的最佳切入点?我能做的就是,做好手头的事情确保,就算这事对公司来说又黄了,我也要通过这事有所收获。(一)产品定位:微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷……那场人机对弈,为什么让20多岁的产品经理感到焦虑?柯洁下的是围棋,我们待的是围城。柯洁已经输给AlphaGo两局了。围棋是没怎么看懂,然而一个同样是产品经理的朋友突然在微信上跟我说:“看了比赛,觉得非常焦虑。……你挂个“产品经理”的title,还真以为自己是“经理”了?产品经理,从来就是一个门槛极高的岗位,人人都是产品经理,只是一个美好的愿望。产品经理,互联网行业中本身就自带光环的岗位,在乔帮主与张小龙等大神的光芒的映射下,仿佛每一位“……停下来思考,最适合你的产品经理方向是什么?本文作者将站在空间维度,谈谈产品人如何选择适合自己的产品方向和产品形态。互联网每天影响着大家的生活的细枝末节,我们发现越来越离不开了,科技改变生活的时候,也充斥着燥热和虚……经验分享大型分布式团队的代码版本管理不管团队最终选用什么代码版本管理工具,只要适合自己的团队的开发流程和工作方式,并且代码管理顺畅就可以了。介绍这个话题,有两个原因:从开始工作到现在,我经历过没有代码……神器来了这神器可以追寻各大网站的历史版本,2008年的京东居欢迎收看:神器来了该栏目旨在搜罗产品经理、运营宝宝需要的各大神器工具,每周一荐。来源起点学院(微信公众号:qidianxueyuan666)最近天天听起点学院……“三教九流”的产品江湖:你可了解自己的产品段位?互联网火了以后,产品经理也跟着火了。互联网水深,随着不断的发展,产品的工作越来越精细化,产品方法论及产品工作体系也越来越成熟。相对于原始时期产品分工的“大而全”,产品工作当下偏……产品策略算法神奇的对数在产品策略公式中,如果加减乘除实在搞不定,那么你可以试着用一下对数。1。生活中的对数作为一个数学渣,实在无力从对数的起源开始一番复杂的推导然后再得出结论。直接给出一……
怎么新建网站才有理想的体验创建网站想要成功不得不顾及的条件设计公司网站拿什么来吸引眼球怎么样建网站才有营销的效果电脑网页设计与移动页面的问题建网站设计时提升速度的方式做网页选网址时有什么诀窍响应式网页设计能否适合企业的需求?做网站要排除的隐患有哪些响应式设计中要把握的细节公司网站怎么做才能拓展访问量做网站的时候应加入一些利于转化的元素
男人必读电动飞机杯的使用攻略详解watchOS6概念设计欣赏全新Siri表盘睡眠追踪舌红舌瘦,是阴虚吗?2022休赛期得失第八期丹佛掘金在我国冒充专利处罚依据是什么读了圆明园的毁灭有感邓文迪晒17岁女儿毕业照!浓妆艳抹打扮成熟,90岁富豪前夫罕TrendForce元宇宙带动VR应用内容,预计2025年市试析美声唱法中国化秉承传统,洋为中用惠科hkc显示器怎么样hkc显示器性能评测详解学校的教学工作计划幼儿开水烫伤后怎么好得快

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找作文动态热点娱乐育儿情感教程科技体育养生教案探索美文旅游财经日志励志范文论文时尚保健游戏护肤业界