日期: 2016年7月 2日数据库
谷歌和 Facebook 都只有一个代码仓库,全公司的代码都放在这个库里。缓存
我一直很困惑,为何要这样作,不一样语言的项目放在一个库有什么好处?分布式
最新一期的《ACM通讯》(59卷第7期)有一篇论文《为何 Google 要把几十亿行代码放在一个库?》,做者是谷歌基础设施小组的工程师,能够看做官方对这个问题的详细解答。我读后感到收获很大,下面就是摘录。测试
谷歌最先使用 CVS 进行代码管理,1999年改成 Perforce。那时是一台 Perforce 主机,加上各类缓存机。google
当时,全公司的代码就在一个仓库里面,后来一直沿用这种作法。因为规模不断增加,Perforce 已经没法知足需求,谷歌就开始使用本身开发的版本管理系统 Piper。spa
Piper 架设在谷歌本身的分布式数据库系统(之前叫 Bigtable,如今更名 Spanner)之上,分布在全世界10个数据中心,保证世界各地的谷歌员工都有良好的访问速度。设计
目前,这个代码仓库包含10亿个文件、3500万次提交记录,大小为86TB,用户达到几万人。工做日每秒有50万次请求,高峰时80万次,大部分来自自动构建和测试系统。日志
谷歌90%以上的代码,放在 Piper 里面。对于那些开源的、须要外部协做的项目,代码放在 Git,主要是 Android 项目和 Chrome 项目。Git 的特色是,全部历史记录都会复制到用户的本地机器,因此不适合大型项目,必须拆分红更小的库。以 Android 为例,该项目一共包含800多个独立的仓库。code
整个仓库采用树状结构。每一个团队有本身的目录。目录路径就是代码的命名空间。每一个目录都有负责人(owner),他负责批准该目录的文件变更。blog
Piper 支持文件级别的权限控制。99% 的代码对全部用户可见,只有少部分重要的配置文件和机密的关键业务,设有访问限制。
若是机密信息不当心放上了 Piper,文件能够被快速清除。而且,全部的读写都有日志,管理员可以查到谁读过这个文件。
Piper 的工做流(workflow)以下图。
开发者先建立文件的本地拷贝,这叫作"工做区"(workspace)。完成开发后,工做区的快照共享给其余开发者进行代码评审。只有经过了评审,代码才能合并到中央仓库。
阅读全文直接点击:http://click.aliyun.com/m/9974/