W3CAPI 在线教程 | 菜鸟教程_LOGO
文档目录
文档目录
我的书签
 

版本控制

软件开发中常用的版本控制工具详解

版本控制工具是一种记录一个或多个文件(任何类型的文件)内容变化,以便将来查阅特定版本修订情况以及回溯的系统。

jesen
1
2022-07-30 11:18:09

什么是版本控制工具?

版本控制工具是一种记录一个或多个文件(任何类型的文件)内容变化,以便将来查阅特定版本修订情况以及回溯的系统。
我们可以把一个版本控制系统(VCS)抽象为一个“数据快照”,在需要的时候,它可以帮你完整地保存一个项目的快照。当你需要查看一个之前的快照(专业术语称之为“版本”)时,版本控制系统可以显示出当前版本与上一个版本之间的所有改动的细节。

为什么要用版本控制工具?

如果你是一位平面或网页设计师,可能需要保存某一幅待完成的图片或页面布局文件的每一次的修订版本,那么这时候采用版本控制系统(VCS)是个很好的选择。有了它你就可以将某个文件回溯到之前的任何修订的状态,甚至将整个项目都回退到过去某个时间点的状态,你可以比较文件的变化细节,查出最后是谁、在什么时候修改了哪个地方,从而找出在后期问题出现的原因。
使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先的样子,但额外增加的工作量却微乎其微。
如果在开发团队中没有使用版本控制,多个开发人员共同负责同一个软件文档的开发,每个人在各自的机器上有整个软件文档的备份,并对之实施编程开发,在分别完成各自任务之后,再通过文本比对工具将各自机器上的不同版本的程序整合到一台机器上。没有进行版本控制或者版本控制本身缺乏正确的流程管理,在软件开发过程中将会引入很多问题,如软件代码的一致性、软件内容的冗余、软件过程的事物性、软件开发过程中的并发性、软件源代码的安全性,以及软件的整合等问题。 
版本控制的目的是实现开发团队并行开发、提高开发效率的基础。其目的在于对软件开发进程中文件或目录的发展过程提供有效的追踪手段,保证在需要时可回到旧的版本,避免文件的丢失、修改的丢失和相互覆盖,通过对版本库的访问控制避免未经授权的访问和修改,达到有效保护企业软件资产和知识产权的目的。 
版本控制的功能在于跟踪记录整个软件的开发过程,包括软件本身和相关文档,以便对不同阶段的软件及相关文档进行表示并进行差别分析,对软件代码进行可撤消的修改,便于汇总不同开发人员所做的修改,辅助协调和管理软件开发团队。

常用的版本控制工具 之 VSS

VSS 的全称为 Visual Source Safe,是 Microsoft Visual Studio 中的一个工具组件,它主要任务就是负责项目文件的管理,几乎可以适用于其中的任何软件项目。管理软件开发中各个不同版本的源代码和文档,占用空间小并且方便各个版本代码和文档的获取,在开发小组中对源代码的访问进行有效的组织与协调。
VSS作为一款历史悠久的版本管理工具,在早期扛起了版本管理系统方面的大旗,能帮助解决一部分版本控制方面的问题,也在一定程度上帮助解决代码共享方面的难题。但是依旧存在一些不足,比如:
  • 文件大多会以独占的形势进行锁定。如果一个人在修改的时候其他人没有办法进行修改
  • VSS只支持Windows版本,且只兼容微软的开发工具
  • 文件存储缺陷,服务器必须共享文件夹,对文件的安全性没有足够保障:对于VSS的用户,可以在文件夹上设置不可读、可读、可读/写、可完全控制四级权限。但由于VSS的文件夹是要完全共享给用户后,用户才能进入,所以用户对VSS的文件夹都可以删除

常用的版本控制工具 之 SVN

一、SVN简介

SVN(全称:Subversion),是一个开放源代码的版本控制系统(目前是Apache基金会项目下的一个开放源代码的版本控制软件系统),对于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。
互联网上很多版本控制工具已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。
通俗的来说,SVN是一个开源的版本控制系统。和VSS相比,除了最基本的代码和文件管理功能外,主要的变化是提供了分支的功能,从而解决了VSS文件独占的问题。大幅提升了开发人员的工作效率,任何人写完代码,随时可以提交到自己的分支上,最后对所有分支进行合并,解决冲突即可。相比VSS而言,在工作模式上有了翻天覆地的改变。

二、SVN优点

  • 管理方便,逻辑明确,操作简单,上手快:集中式管理,管理方式在服务端配置好,客户端只需要同步提交即可,使用方便,操作简单,很容易就可以上手
  • 易于管理,集中式服务器更能保证安全性,在服务端统一控制好访问权限,利用代码的安全管理
  • 所有的代码已服务端为准,代码一致性非常高
  • 有良好的目录级权限控制系统

三、SVN缺点

  • 对服务器性能要求高(所有操作都需要通过服务端进行同步,这会导致服务器性能要求比较高。如果服务器宕机了就无法提交代码了),数据库容量经常暴增,体量大
  • 必须联网。如果不能连接到服务器上,基本上不可以工作,如果服务器不能连接上,就不能提交,还原,对比等等;如果在内网还好,网速比较稳定,同步相对比较快,如果是通过外网同步,有可能就需要同步很久
  • 不适合开源开发(开发人数非常非常多,但是Google app engine就是用svn的)。然而一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题
  • 分支的管控方式不灵活:svn分支是一个完整的目录,且这个目录拥有完整的实际文件,这些操作都是在服务端进行同步的,不是本地化操作,如果要删除分之,也是需要将远程的分支进行删除,这会导致大家都得同步
  • 速度没有git快,如果有五个分支,是把五个分支的文件全部拷下来

 

常用的版本控制工具 之 Git

一、Git 简介

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,项目越大越复杂,协同开发者越多,越能体现出 Git 的高性能和高可用性。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

二、Git优点

  • 适合分布式开发,每一个个体都可以作为服务器(可以git clone克隆一个本地版本,然后在本地进行操作提交,本地可以完成一个完整的版本控制)。每一次Clone就是从服务器上pull到了所有的内容,包括版本信息;在发布的时候,使用git push来推送到远程即可
  • 公共服务器压力和数据量都不会太大
  • 速度快、灵活,分支之间可以任意切换:git分支的本质是一个指向提交快照的指针
  • 冲突解决:多人开发很容易就会出现冲突,任意两个开发者之间可以很容易的解决冲突,并且单机上就可以进行分支合并(可以先pull远程到本地,然后在本地合并一下分支,解决好冲突,在push到远程即可)
  • 离线工作,不影响本地代码编写,等有网络连接以后可以再push代码、合并分支等,并且在本地可以根据不同的需要,本地新建自己的分支

三、Git缺点

  • git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制
  • 工作目录只能是整个目录,而svn可以单独checkout某个有权限的目录
  • 不符合常规思维,学习周期相对而言比较长,git学习周期可能没有svn顺利
  • 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息

四、Git 与 SVN的区别

  • GIT 是分布式的,SVN 不是(这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别)
  • GIT 把内容按元数据方式存储,而 SVN 是按文件(所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里)
  • GIT 分支和 SVN 的分支不同(分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录)
  • GIT 没有一个全局的版本号,而 SVN 有(目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征)
  • GIT 的内容完整性要优于 SVN(Git 的内容存储使用的是 SHA-1 哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏)

版本控制工具的历史

一、起源与雏形

版本控制工具的最开始雏形:最原始的版本控制是纯手工的版本控制:修改文件,保存文件副本;保存副本命名随意,版本难辨新旧,不能辨别每一版的修改内容。
在最初的版本控制软件出现之前,其实已经有了比较好用的源码比较与打补丁的工具:diff和patch。Linus Torvalds(Linux之父)也对这两个工具偏爱有加。在1991-2002年之间,即使CVS出现之后,Linus一直使用diff和patch管理着Linux的代码。diff与patch是用于源码版本控制中的两个最基本的概念。CVS(Concurrent Versions System):协作版本系统。
  • diff用来比较两个文件或者目录之间的差异
  • patch是diff的反向操作我们把上述差异结果保存到文件中,例如:diff.txt中,那么这个diff.txt就可以用来从left.c推算出right.c的内容,反之亦可

二、历史节点

  1. 版本控制的雏形:diff & patch
  2. 最早期的本地版本控制工具:RCS(Revision Control System)RCS作为非常古老的版本工具,远远在SVN和已经退役的CVS之前,它的古老程度应该比Web开发的ASP前代的CGI还要更久远。如果想对版本管理实现方式进行深入研究的话,研究RCS是一种最为简单的入手方式。RCS采用把diff的集合,采用RCS自己的格式保存到磁盘中(可以通过diff -n left.c right.c产生RCS格式的diff内容),能通过这些diff集合,重新回到文件修改的任何历史中的点
  3. 集中式版本控制工具:CVS & SVN
  4. 分布式版本控制工具:Git
  5. 未完待续...

如何选择版本控制工具?

如果对访问控制、权限分配和代码安全性等要求比较高的,建议使用svn。
如果是分布式,多人开发,版本迭代比较快的项目,建议使用git。
未完待续...
相关提问
敬请期待