幼儿饰品瑜伽美体用品微软
投稿投诉
微软创意
爱情通信
用品婚姻
爱好看病
美体软件
影音星座
瑜伽周边
星座办公
饰品塑形
搞笑减肥
幼儿两性
智家潮品

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

  不管团队最终选用什么代码版本管理工具,只要适合自己的团队的开发流程和工作方式,并且代码管理顺畅就可以了。
  介绍这个话题,有两个原因:
  从开始工作到现在,我经历过没有代码版本管理、代码集中式管理,以及现在的分布式管理,我深刻体会到它在软件开发过程中的重要性;
  我在工作中遇到的很多客户都存在对于代码版本管理的各种问题、困惑和不同的需求。
  所以,我希望将我在这个方面的经验分享给更多人,希望能帮助更多的团队解决在代码版本控制方面的问题和疑惑。
  一、代码版本管理系统的历史
  代码版本管理系统大致可以分为三个时代:
  第一代:本地式
  这代主要的特点提供本地代码版本控制,比如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的迁移方案一般主要会使用两种工具:
  开源免费的gitsvn;
  商业收费的Subgit。
  其中使用Subgit的迁移方案,如下图:
  如果团队组资源充足,还可以使用Gerrit搭建一个独立的Git服务器,从而以分布式的方式进行代码迁移,如下图:
  五、多产品线的管理
  使用同一个中心代码库管理多产品线一直是大型项目的一个困难点,特别是使用SVN这样的工具更是难以管理,因为SVN这种工具的Branch本质上是一个目录拷贝,并且速度慢,而且代码回迁也需要手动进行。但是如果使用Git的特性来管理多产品线,比起SVN是事半功倍。具体方案见下图:
  总结
  分布式代码版本管理系统并不一定适合所有团队,比如中小团队可能更关心的只是成本更低,简单易用,那么SVN等这类集中式版本管理工具还是更为适合。但是,不管团队最终选用什么代码版本管理工具,只要适合自己的团队的开发流程和工作方式,并且代码管理顺畅就可以了。

已高造句用已高造句大全(61)语云,鹬蚌相持而渔人伺于其侧,渔人今已高举其网矣。(62)进了正堂,却见孔非子早已高冠博带端容而坐,身后挂着一副巨幅画像。(63)我因年事已高,特作书面发言……疫情所致经济损失可获赔偿新冠疫情所致经济损失到底有多少可能通过财产保险产品获得补偿,不妨从财产保险保什么,或者说财产保险的保险标的有哪些说起。财产保险的保险标的十分宽泛,几乎涵盖所有可被评价的社……小花猫的想法文赵元波黄牛爷爷开了一家超市,得经常开着车子去补货。这天,超市里的咸鱼卖完了,它冒着大雨赶紧去进货。下雨天,路滑,刹车不太灵,这不,在一个转弯的地方,黄牛爷爷拉鱼的……为人处事的十二个说话技巧1、小事情幽默说当讲述小事情时候要用笑话的形式说出来,让人容易接受,还能增强彼此的亲密感。2、急事要慢慢说如果是比较紧急的事情,要慢慢说清楚,要给听者留下稳重……乐乐茶德芙经典巧克力脏脏茶多少钱乐乐茶德芙经典巧我们都知道,乐乐茶是比较受欢迎的一个奶茶饮品店,它每年都会推出很多的新品,最近和德芙联名推出了一系列新品,德芙经典巧克力脏脏茶就是其中一款新品。那么乐乐茶德芙经典巧克力脏脏茶多……校园的小道真美爸爸妈妈带我游览过许多有名的山川大河,我也见识过多很美景,但我依然觉得校园的小道最美。春天,小道很美,到处生机勃勃。小草迫不及待地探出头来;樱花树上的樱花微笑着,风一吹,……南燕往如果遇到本年度风调雨顺,这个季节总是季节分明。春季、夏季的分工其实不太很明显,按照历书上的记录,6月22是夏至,而我们这里才开始真正的夏天。那冬季呢,最初一夜二夜最冷,霜降严重……喝水有讲究不同水温效果不同不同水温有不同效果35~40温水:护胃养肠道35~40的温水,是胃肠道感觉最舒服的温度。俗话说十胃九病,胃作为人体重要的消化器官,非常容易得病的,必须小心呵护……新能源动力工程专业中的风能发电技术【摘要】能源与环境已经成为影响社会发展的重要问题。新能源比常规能源在环境保护,节能减排方面更具有优势,而新能源发电技术具有广阔的发展空间。详细阐述了太阳能发电,风力发电,地热发……圆顶造句用圆顶造句大全1这里有游牧部落,圆顶帐篷,健壮而饱经风霜的牧人,他们是真正的现代牛仔;这里还有壮丽而亘古不变的山脉,是瑞士之外的瑞士。2一碧千里的草原上,散落着一个圆顶的蒙士包。……哈尔造句用哈尔造句大全61、李颖,女,1973年8月出生,汉族,哈尔滨医科大学地方病控制中心副研究员,硕导,主要从事碘缺乏病预防控制研究。62、烟花了天空光,开始于每年1月5日冰雪节在哈尔滨,……临汾心灵花园心理咨询孩子长不大的症结在哪里近几年,有关儿童青少年成长心理咨询多了起来,而且呈现大龄化的趋势。有白发苍苍的老爸老妈带着三十好几的儿子来咨询孩子的求职、恋爱问题的;有年近三十的女儿在家紧闭房门一月不出要求心……
播种希望的种子新的一年来临,就意味着希望的种子已经长出了嫩芽。上周我种了许多黄豆。我给黄豆浇了水,猛然想到这不正是一个希望的种子吗?这个种子被埋入土著居民里后,会发出嫩嫩的小芽,绿油油……人生的旅途中有太多的岔口一转身也许就是一辈子一、有些事,有些话,我没说,并不是我不懂,我只是看在眼里,埋在心里。二、要有最朴素的生活,与最遥远的梦想。即使明日天寒地冻,路远马亡。三、只有咒语可以解除咒语,只有……让走下神坛节液化工具打造完美身材大家好,本节教程聊一个神奇的工具液化。它可以在人像作品中给人物瘦身,打造完美脸型和身材。也可以在其他主题的照片中,改变某个物体的形状。先看一下这个工具的位置:液化工具在菜……初中历史教师工作总结〔寄语〕初中历史教师工作总结为好范文网的会员投稿推荐,但愿对你的学习工作带来帮助。本学期上课时间短,而教学任务重也不算太多。因此,基于这种情况,每次上课前,我都要认真钻研……摆小摊攒经验开店铺赚大10多平方米的小店,十余个货架上摆满了各式各样的女装、男装、女包、鞋子这就是一名大三学生自主创业的服装店。店主李颖说,创业是他的梦想,大学生服兵役退伍回到学校后,他就再也没向家……长安诺萧承煦结局是什么为何放弃皇位在《长安诺》当中,萧承煦和贺兰茗玉两人之间可以说是有诸多的磨难,原本萧承睿还活着的时候,贺兰茗玉是萧承睿的妃子,而萧承睿死后,萧承煦也是想要夺回皇位的。但萧承睿临死之前怎么会这……吃火龙果对人的好处和坏处有哪些火龙果营养丰富,功用独特,对人体健康有绝佳的功效。在此三农网整理了吃火龙果对人的好处和坏处,以下列举出来供网友们参考。一、吃火龙果对人的好处1、预防和消除金属中毒:……观察蚂蚁今天,我在小区里观察蚂蚁,发现有一群蚂蚁在搬粮食。有两只蚂蚁站在最高处,触角不停地动,好像是在传递信息说:快点搬,红蚁要来了。果真,远方来了一群红蚁,黑蚁和红蚁打了起来,……北京限行这几天专车那点事北京从8月20日开始实行单双号限行,在成功减少了路面上的机动车数量,缓解了拥堵的同时,却也将运力紧张问题推到了台前。这一次,翘首以待专车合法化政策落地的专车企业角色变得颇……身边的爱爱,是一张温暖而舒服的床,让我们幸福地睡着;爱是一座宽敞的房子,让我们拥有温暖舒适的家;爱,是世界上最最强大的力量,让全世界所有的人感到温暖。我们身边也有爱,我们要学会发现身边……张学友的经典歌词大全导读:张学友的名字想必是大家都不会忘记的了,他那独特的嗓音和充满磁性的音质一直是大家难以忘怀的,他的演唱会总是场场爆满,不管过去了多少年听到他的歌还是会让人觉得热血沸腾,现在就……姓常女孩有寓意的名字大全一个好听的女孩名字往往能给大家留下美好的印象,因此准爸妈们在给女孩起名字的时候,都讲究好听悦耳。而一个有寓意的名字又能体现出女孩独有的美,所以如果能给女孩起个好听又有寓意的名字……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网