代码版本管理系统的历史
代码版本管理系统大致可分为三个时代:
**代:本地风格git和svn哪个好用。
这一代的主要特征是提供本地代码版本控制,如SCCS()、PVCS()等。
这一代人主要实现了基本的代码版本管理,但缺点是很多人无法同时修改一个版本库。这也与当时软件规模不够大有关,没有这样的需求。
第二代:客户端-服务器式
这一代的主要特点是提供集中式服务器端代码版本控制,如CVS(),ClearCase(),VisualSourceSafe(),Perforce(),Subversion()等。
这一代主要实现了**服务器端的代码版本管理,其特点是允许多人同时同步和修改代码版本库,但缺点也相当明显:
当服务器无法连接时,无法查看日志、提交和比较代码版本(慢速网络和远程程程序员的疼痛),以及当服务或网络出现问题时,许多人将无法工作。
不支持localbranch,branch创建管理复杂,一旦创建,就很难修改(程序员在快速迭发中的痛苦)
因为只有一个中心端服务器,一旦发生灾难性问题,所有日志都会丢失,所以需要经常备份(备份成本不小)
如果软件代码太大,速度通常会很慢,因为每个日志查询、不同版本之间的代码比较和代码提交都需要与服务器通信,导致服务器端负载过大。为什么用svn不用git。
第三代:分布式git和svn收费。
这一代的主要特点是提供分布式代码版本控制,如Git(),Mercurial()等。
这一代结合了**代和第二代的优势,实现了分布式代码版本管理。
这一代的优势:分布式管理,在没有连接到服务器的情况下,仍然可以查看日志,提交代码,创建分支机构;支持localbranch,各种分支管理可以快速方便地实现;支持分布式,实现分块管理和负载分流管理。
缺点是有一定的学习曲线,如分布下的代码同步,localbranch理解与应用,分布式代码管理的理解与应用等。详细比较可参考:此处。
二、大型分布式团队
曾经有这样一个分布式团队,他们在很多城市都有小团队,正在开发一个大型项目,如下图所示
他们使用的代码版本管理工具是第二代码管理工具SVN,管理方案如下:svn与git的优缺点及区别。
但他们在使用过程中遇到了以下问题和痛点。
因为是分布式团队,所以:svn和perforce。
基于团队的代码模块难以分离
当服务器不可用时:git跟svn的区别。
无法查看提交记录
无法比较文件
不能提交代码
创建代码分支时:idea如何导入gradle项目。
分支创建速度慢
多分支管理困难
提交代码时:
希望有CodeReviewsvn和Git企业哪个用的多。
希望有CIReview
因为代码巨大:svn版本回溯。
查看日志慢syncthing与git区别。
备份代码库时:
需要停机备份
备份成本高
新一代分布式代码版本管理系统可用于解决上述问题,如下图所示:idea插件安装在哪个目录。
每个团队都有自己独立的代码库,中心库用于同步这些独立的代码库,每个库由团队管理和维护。此外,代码版本管理系统还需要支持轻量级分支、代码评审、离线提交、离线查看日志等功能。
然而,由于目前还没有一个单一的代码版本管理工具可以同时满足上述所有需求,许多公司基于它们开发集成管理系统,如Gerrit,GitLab,GitHub,BitBucket等。由于Gerrit的开源、免费、Gogle的开发和维护,以及管理Android,OpenStack大型项目源代码等特点已成为大型分布式团队的**系统。
三、Gerritgit软件版本管理。
GerritGoogle开发,用于管理GoogleAndroid一个系统的项目源代码。以Java和为基础Prolog等待开发,支持Git,综合管理系统,如权限管理、代码评审等。与Gitlab和GitHub**的区别是,它隐藏了代码库管理的细节,使开发人员可以开发和提交代码,而无需进行fork等手动库和同步操作,节省了开发人员的时间,如下图所示。svn与本地文件对比。
因为安卓本身就是一个开源项目,贡献者很多,开发团队遍布很多地方(有时差),导致“如何保证代码质量”成为一个大问题。为此,谷歌在Gerrit增加了一个功能强大、非常严格的代码评审系统。
首先,当代码提交时,它不会直接传输到**数据库。它将暂时存储在临时数据库中,生成代码评审记录,并向特定的评审人员发送要求评审的电子邮件。评审员评审代码时,如果通过,需要在Gerrit系统中对代码进行评分。如果通过,可以将代码merge转移到中心库。如果没有通过,则需要将代码提交返回开发人员进行修改。svn是什么工具。
同时,它还可以自动触发包含代码提交的CI构建(如果需要手动预配置)。如果CI自动构建和测试通过,也可以自动在Gerit系统中进行评分,供最终Merge人员参考。示意流程见下图。
由于Android源代码由数百个独立的代码库组成,编译Android系统需要大多数代码库中的代码,因此如何管理这么多代码库也是一个难题,例如如何一次性同步需要编译需要支持特定设备的代码库组合。为此,Google基于Python语言开发了一种叫做工具的工具Repo,该工具可以定制您需要的代码库的组合,并同步这些代码库,如pull和push,见下图。
四、SVN迁移到Git
对于想要从集中代码管理系统转移到分布式代码管理系统的团队来说,如果团队规模小,问题一般不大,但对于大型分布式团队来说很困难。主要有两个困难:
代码量太大,很难在短时间内成功迁移所有代码和日志。什么是svn。
由于下属团队太多,所有团队很难同时切换到新的代码管理工具。idea安装gradle。
为了解决这些问题,通常首先选择一个团队来使用新的代码版本管理工具。如果团队成功转换,将其作为基准推广给其他团队,从而逐步将所有团队转换为新工具。
SVN两种工具通常用于Git的迁移方案:
开源免费的git-svn;
商业收费的Subgit。
Subgit的迁移方案如下图所示:
如果团队组有足够的资源,也可以使用Gerit构建独立的Git服务器,以分布式方式迁移代码,如下图所示:
五、管理多产品线svn卸载再安装。
使用同一中心代码库管理多产品线一直是大型项目的难点,尤其是使用SVN等工具,因为SVN的Branch本质上是目录副本,速度慢,代码返回也需要手动进行。但是如果用Git的特点来管理多产品线,比SVN事半功倍。具体方案如下图所示:分布式代码版本管理系统不一定适合所有团队。例如,中小型团队可能更关心成本低、易于使用,因此SVN等集中版本管理工具更合适。但无论团队最终选择什么代码版本的管理工具,只要适合自己团队的开发过程和工作模式,代码管理顺利。git commit和push的区别。
中企动力是一家专业的网络推广公司,我们拥有丰富的网络推广经验和专业的团队,能够为企业提供全方位的网络推广服务。我们为企业提供网站建设、网站优化、平台推广等服务,帮中企动力业在网络上提升知名度、扩大影响力、提升销售额。如果您有网络推广的需求,欢迎联系中企动力加微信:CE4006608066,我们将竭诚为您服务。