精华内容
参与话题
问答
  • 版本控制系统

    千次阅读 2015-09-12 22:08:35
    一、什么是版本控制版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。 版本控制透过文档控制(documentation control)记录程序各个模组的改动,...

    一、什么是版本控制?
    版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新。
    版本控制透过文档控制(documentation control)记录程序各个模组的改动,并为每次改动编上序号。
    这种方法是工程图维护(maintenance of engineering drawings)的标准做法, 它伴随着工程图从图的诞生一直到图的定型。
    一种简单的版本控制形式,例如,赋给图的初版一个版本等级“A”。
    当做了第一次改变后,版本等级改为“B”,以此类推。
    不仅存在着保存着工程图或者软件源代码的文本文件版本控制管理,而实际上,你可以对任何类型的文件进行版本控制。
    版本控制系统用于维护文件的所有版本,随着时间的推移,系统逐渐产生这些版本。
    使用版本控制系统,人们可以返回到各个文件以前的修订版本,还可以比较任意两个版本以查看它们之间的变化。
    通过这种方式,版本控制可以保留一个文件修订的可检索的准确历史日志,甚至将整个项目都回退到过去某个时间点的状态。
    更重要的是,版本控制系统有助于多个人(甚至位于完全不同的地理位置)通过 Internet 或 专用网将各自的更改合并到同一个源存储库,从而协同开发项目。
    而由此额外增加的工作量却微乎其微。

    二、为什么要用版本控制
    如果没有版本控制工具的协助,在开发中我们经常会遇到下面的一些问题:
    1) 代码管理混乱。
    如果是别人添加或删除一个文件,你很难发现。
    没有办法对文件代码的修改追查跟踪。
    甚至出现文件丢失,或新版本代码被同伴无意覆盖等现象。
    2) 解决代码冲突困难。
    当大家同时修改一个公共文件时,解决代码冲突是一件很头疼的事。
    最原始的办法是手工打开冲突文件,逐行比较,再手工粘贴复制。
    更高级的做法是使用文件比较工具,但仍省不了繁杂的手工操作,一不小心,甚至会引入新的bug。
    3) 在代码整合期间引入深层BUG。
    例如开发者A写了一个公共函数,B觉得正好可以复用;后来A又对这个公共函数进行了修改,添加了新的逻辑,而这个改动的却是B不想要的。
    或者是A发现这个公共函数不够用,又新做了一个函数,B却没有及时获得通知。
    这些,都为深层BUG留下隐患。
    4) 无法对代码的拥有者进行权限控制。
    代码完全暴露在所有的开发者面前,任何人都可以随意进行增、删、改操作,无法指定明确的人对代码进行负责。
    特别是产品的开发,这是极其危险的。
    5) 项目不同版本发布困难。
    特别是对产品的开发,你会频繁的进行版本发布,这时如果没有一个有效的管理产品版本的工具,一切将变得非常艰难。
    上面只是列举了一些没有版本控制系统可能带来的问题,特别是对大型项目和异地协同开发有了一个合适的版本控制工具,它可以有效解决因为代码版本不同引起的各种问题,让我们的开发人员能更多的把精力花费在开发上面。
    而不是每次都花费很多时间进行代码整合和解决版本不同带来的各种问题。
    三、版本控制系统的发展历史
    本地版本控制系统
    许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。
    这么做唯一的好处就是简单,不过坏处却不少:有时候会混淆所在的工作目录,弄错了文件丢了数据就没了退路。
    为了解决这个问题,人们很久以前就开发了许多种本地版本控制系统,大多都是采用某种简单的数据库来记录文件的历次更新差异。
    其中最流行的一种叫做 rcs,现今许多计算机系统上都还看得到它的踪影。
    甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。
    它的工作原理基本上就是保存并管理文件补丁。
    文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。
    集中化的版本控制系统
    接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?
    于是,集中化的版本控制系统( Centralized Version Control Systems,简称 CVCS )应运而生。
    这类系统,诸如 CVS,Subversion 以及 Perforce 等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。
    多年以来,这已成为版本控制系统的标准做法。
    这种做法带来了许多好处,特别是相较于老式的本地 VCS 来说。
    现在,每个人都可以一定程度上看到项目中的其他人正在做些什么。
    而管理员也可以轻松掌控每个开发者的权限,并且管理一个 CVCS 要远比在各个客户端上维护本地数据库轻松容易得多。
    事分两面,有好有坏。
    这么做最显而易见的缺点是中央服务器的单点故障。
    若是服务器当机一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作。
    如果中央服务器的磁盘发生故障,并且没做过备份或者备份得不够及时的话,还会有丢失数据的风险。
    最坏的情况是彻底丢失整个项目的所有历史更改记录,被客户端提取出来的某些快照数据除外,但这样的话依然是个问题,你不能保证所有的数据都已经有人提取出来。
    本地版本控制系统也存在类似问题,只要整个项目的历史记录被保存在单一位置,就有丢失所有历史更新信息的风险。
    分布式版本控制系统
    于是分布式版本控制系统( Distributed Version Control System,简称 DVCS )面世了。
    在这类系统中,诸如 Git,Mercurial,Bazaar 还有 Darcs 等,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。
    这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。
    因为每一次的提取操作,实际上都是一次对代码仓库的完整备份。
    更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。
    籍此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。
    你可以根据需要设定不同的协作流程,比方说层次模型式的工作流,这在以前的集中式系统中是无法实现的。
    四、常见版本控制系统
    1.Subversion
    Subversion是一个版本控制系统,相对于的RCS、CVS,采用了分支管理系统,它的设计目标就是取代CVS。互联网上免费的版本控制服务多基于Subversion。
    2.Git
    Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理。Git是Linux Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
    3.Darcs
    Darcs是新一代轻量级分布式版本控制系统。完全使用Haskell编写而成。不同于以往的版本控制系统,Darcs没有中央服务器。任何一个本地repository都可以既是客户端也是服务器,节点之间可以任意同步。这样我们可以不依赖网络离线comit任何修改。
    4.Bazaar
    Bazaar是一个分布式的版本控制系统,它发布在GPL许可协议之下,并可用于Windows、GNU/Linux、UNIX以及Mac OS系统。Bazaar由Canonical公司赞助,目前已服务于Samba、Drupal等知名的开源项目。Bazaar当前已经包含许多有用的功能,这些功能使之具有如下鲜明的特点:容易使用、稳定可靠、使用灵活。Bazaar也包括智能合并、支持插件、可与第三方工具整合、文档支持等其他特性。
    5.Mercurial
    Mercurial是一种轻量级分布式版本控制系统,采用Python语言实现,易于学习和使用,扩展性强。相对于传统的版本控制,具有如下优点:
    更轻松的管理:传统的版本控制系统使用集中式的repository,一些和repository相关的管理就只能由管理员一个人进行。由于采用了分布式的模型,Mercurial中就没有这样的困扰,每个用户管理自己的repository,管理员只需协调同步这些repository。
    更健壮的系统:分布式系统比集中式的单服务器系统更健壮,单服务器系统一旦服务器出现问题整个系统就不能运行了,分布式系统通常不会因为一两个节点而受到影响。
    更低的网络依赖性:由于同步可以放在任意时刻进行,Mercurial甚至可以离线进行管理,只需在有网络连接时同步
    6.FOssil
    Fossil是一个简单、高可靠性的分布式软件配置管理系统。值得关注的功能:Bug跟踪和Wiki、Web接口、自动同步、支持HTTP接口、嵌入式CGI、稳健而且可靠
    7.OpenCVS
    OPENCVS是自由的协作版本系统(CVS)实现,CVS是最流行的开放源代码版本控制软件。它可以用于客户端,以及服务器端的版本库,提供了对存储在版本库中的数据的细粒度访问控制。它的目标是除了完全减少系统安全性的特性之外,尽可能的与其它的CVS实现兼容。OPENCVS项目是在最近GNU CVS弱点暴露之后,经过讨论之后启动的。尽管CVS被广泛使用,但是最近几年它的开发已经基本停止了。CVS的实现和设计,已经被发现许多安全问题。
    8.Monotone
    monotone是一个分布式版本控制系统,提供了简单的、单文件事务版本存储和点对点同步协议,支持历史版本敏感的合并操作、轻量级分支处理以及集成代码评审和第三方测试工具。使用加密的版本命令方式和客户端RSA认证,很好的支持国际化,不依赖第三方工具,支持跨平台。
    9.CVS
    CVS(Concurrent Versions System)老牌的版本控制系统,它是基于客户端/服务器的行为使得其可容纳多用户,构成网络也很方便。这一特性使得CVS成为位于不同地点的人同时处理数据文件(特别是程序的源代码)时的首选。
    五、参考资料
    [1]. http://www.hudong.com/wiki/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6
    [2]. http://zh.wikipedia.org/wiki/%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6

    原文链接:
    http://www.6zou.net/tech/what-is-vcs-and-why-vcs.html

    展开全文
  •   版本控制系统(Version Control System,VCS)是一种软件,可以帮助软件团队的开发人员协同工作,并存档他们工作的完整历史记录。 为什么 在我们的实际开发过程中,经常会有这种需求或问题 我们需要在已经发布...

    是什么

      版本控制系统(Version Control System,VCS)是一种软件,可以帮助软件团队的开发人员协同工作,并存档他们工作的完整历史记录。

    为什么

    在我们的实际开发过程中,经常会有这种需求或问题

    1. 我们需要在已经发布的程序中添加新的功能,如果测试验证后没有问题,才会使用新的代码,而在测试验证期间,不能影响原来的代码。我们常用的方式应该就是备份多份源代码。这么做唯一的好处就是简单,但是特别容易犯错。
    2. 实际项目开发基本都是多个人合作完成,在多个人写代码时,就牵扯到代码合并成一份的问题。

    历史分类

      纵观版本控制系统的发展历史,《Version Control By Example》一书的作者 Eric Sink 在他的书中对版本控制进行了分类,广义上讲,版本控制工具的历史可以分为三代:

    网络 操作 并发性 示例
    第一代 仅一个文件 锁定的 RCS, SCCS
    第二代 集中式 多文件 提交之前合并 CVS, SourceSafe, Subversion, Team Foundation Server
    第三代 分布式 变更的集合 合并之前提交 Bazaar, Git, Mercurial

    Version Control By Example》可以直接在作者的网站下载电子版(PDF 或 EPUB)

    第一代

      第一代版本控制系统被称为本地版本控制系统。通过加锁将并发执行转换成顺序执行。 一次只能有一个人处理文件。具体流程如下:首先,应该把文件放在一个服务器上,方便使用者上传或下载文件;其次,任何人想对文件修改时,需要先把这个文件加锁,通过checkout指令,使得其他人无法修改;最后,当修改完成之后,需要释放锁,通过checkin指令,形成一个新的版本,存放到服务器端。
      第一代版本控制系统主要有 RCS、SCCS(1972年发布)和 DSEE(被认为是 Atria ClearCase 的前身)。目前,有些项目还在使用!

    悲观锁
      每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。

    第二代

      第二代版本控制系统被称为集中式版本控制系统(Centralized Version Control Systems,CVCS),其对同步修改更加宽容,但有一个明显的限制,用户必须在允许提交之前将当前修订合并到他们的工作中。
    在这里插入图片描述
    由上图可看到,在集中式版本控制系统中,如果服务器嗝屁了,那么所有的开发者就只能干瞪眼了!因为,SVN 对于项目的管理是依赖于服务器中的中心仓库的!我们的更改必须要提交到服务器中的中心仓库。
      第二代版本控制系统主要有 CVS、SourceSafe、Subversion、Team Foundation Server、SVK。

    乐观锁
      每次获取数据的时候,都不会担心数据被修改,所以每次获取数据的时候都不会进行加锁,但是在更新数据的时候需要判断该数据是否被别人修改过。如果数据被其他线程修改,则不进行数据更新,如果数据没有被其他线程修改,则进行数据更新。由于数据没有进行加锁,期间该数据可以被其他线程进行读写操作。
      乐观锁一般会使用版本号机制或 CAS 算法实现。

    第三代

      第三代版本控制系统被称为分布式式版本控制系统(Distributed Version Control Systems,DVCS),其允许合并和提交分开。在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用。
    在这里插入图片描述
    由上图可看到,分布式式版本控制系统也可以有个服务器端的仓库,用来同步各开发者的私有仓库!在分布式版本控制系统中,每个参与者的本地也会有一个完整的仓库。及时服务器端崩溃,我们仍然可以使用 Git(仅在本地仓库管理我们的代码),在网络具备时,再和服务器进行同步即可!
      第三代版本控制系统主要有 Bazaar、Git、Mercurial、BitKeeper,、Monotone。目前,第三代版本控制系统已经大有一同江湖的趋势(具体见 RhodeCode 在 2016 年做过的一项分析报告 Version Control Systems Popularity in 2016)!

    RCS

      修订控制系统(Revision Control System,RCS) 是第一代的版本控制系统。它是一组 UNIX 命令(暂时没有找到有 UI 界面的软件),允许多个用户开发和维护程序代码或文档。
      RCS 于 1982 年由 Purdue University 的 Walter F. Tichy 首次发布。 它是当时流行的源代码控制系统(SCCS,它几乎是第一个版本控制软件工具,早期 Unix 开发人员于1972年开发)的替代工具。 RCS 目前由 GNU 项目维护。GNU 官网介绍:https://www.gnu.org/software/rcs/;项目维护地址:http://savannah.gnu.org/projects/rcs/
      目前,我们可以从GNU RCS 的项目地址: http://savannah.gnu.org/projects/rcs/ 或者 Purdue University 的 RCS 官网 https://www.cs.purdue.edu/homes/trinkle/RCShome/ 下载最新版本的可执行程序、源码、文档。其中,GNU 官网只有源代码,没有预编译的可执行程序。Purdue University 的 RCS 官网倒是有一个旧版本的 Windows 平台的可执行程序。
    在这里插入图片描述

    CVS

      并发版本系统(Concurrent Versions System,CVS)是最初的第二代版本控制系统。大约十年间,它是最为流行的版本控制系统,直到 2000 年被 Subversion 所取代。CVS 的安装教程可以在其项目主页 上找到。由于 CVS 是集中式版本控制系统,所以它有客户端和服务端之区分。但要开始使用 CVS 的话,即使只在你的本地机器上使用,也必须设置 CVS 的服务端。
      CVS 最早是由一位名叫 Dick Grune 的荷兰科学家在 1986 年开发的,当时有一个编译器项目,他正在寻找一种能与其学生合作的方法。我在英文网站 http://dickgrune.com/Programs/CVS.orig/#History 中找到如下一段话:

    I created CVS to be able to cooperate with my students, Erik Baalbergen and Maarten Waage, on the ACK (Amsterdam Compiler Kit) C compiler. The three of us had vastly different schedules (one student was a steady 9-5 worker, the other was irregular, and I could work on the project only in the evenings). Their project ran from July 1984 to August 1985. CVS was initially called cmt, for the obvious reason that it allowed us to commit versions independently.

      Grune 于 1986 年 6 月 23 日公开发布了该代码。CVS 最初仅仅只是一个包装了 RCS( 修订控制系统(Revision Control System)) 的 Shell 脚本集合。最终演变成当前版本的 CVS 的代码始于 1989 年 4 月的 Brian Berliner 的贡献,后来由 Jeff Polk 和许多其他贡献者提供帮助。 Brian Berliner 撰写了一篇论文,介绍了他对 CVS 程序的改进 - 该程序描述了该工具是如何在 Prysma 内部扩展和使用的。 1990 年 11 月 19 日,CVS 1.0 版被提交给自由软件基金会进行开发和分发。

    关于 CVS 的使用可以参考这篇文章:https://zhuanlan.zhihu.com/p/51792519

    VSS

      VSS 的全称为 Visual Source Safe,是美国微软公司出品的版本控制系统。兼容 Check out-Modify-Check in(独占工作模式)与 Copy-Modify-Merge(并行工作模式)。它也属于集中式版本控制系统。
      VSS 通常与微软公司的 Visual Studio 产品同时发布,并且高度集成。VSS 使用文件系统作为存储方式,每次版本变更时就需要大量地读写硬盘。这也是 VSS 最广受垢弊的缺点。VSS2005 拥有Web 访问功能,不再与 Visual Studio 同时发布。
      2008 年,微软发布了 Team Foundation Server 的项目生命期管理工具,以替代 VSS。其不仅仅包含版本控制系统,还包括一系列的项目生命期管理工具。此中使用的还是集中式版本控制系统。

    • Team Foundation Server:本地版本,用户安装使用!
    • Team Foundation Service:云端版本,使用微软账户登录!

      2019 年,微软发布了全新的 Azure DevOps Server。这不仅仅是个改名,整个软件的架构都进行了重新的调整!有了它,我们就可以使用一系列的项目生命期管理工具。版本控制系统仅仅是其中的一小部分。注意其中的版本控制系统是基于 Git 的分布式版本控制系统。

    • Azure DevOps Server:本地版本,用户安装使用!是 Team Foundation Server 的升级版本。
    • Azure DevOps Service:云端版本,使用微软账户登录!是 Team Foundation Service 的升级版本。

    SVN

      SVN(Subversion 的缩写)是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统。SVN 由 CollabNet 公司于 2000 年资助并发起开发,目的是创建一个更好用的版本控制系统以取代 CVS。
      2000 年 2 月,CollabNet 联系了 Open Source Development with CVS(Coriolis, 1999)的作者 Karl Fogel,问他是否愿意为这个新项目工作。这时 Karl 已经在和他的朋友 Jim Blandy 讨论一个新的版本控制系统的设计。他不仅已经起好了名字 “Subversion”,而且有了 Subvesion 资料库的基本设计。
      经过 14 个月的编码,在 2001 年 8 月 31 号,Subversion 可以“自我寄生”了。就是说,Subversion 开发人员停止使用 CVS 管理 Subversion 的源代码,开始使用 Subversion 代替。
      2009 年 11 月,Subversion 被 Apache Incubator 项目所接收。2010 年 1 月,正式成为 Apache 软件基金会的一个顶级项目。项目地址:https://subversion.apache.org/,我们可以从中下载源代码、文档,没有预编译的可执行程序。

    以下是几款常用的 SVN 客户端图形化软件:

    • TortoiseSVN:开源软件,在 Windows 上非常受到欢迎的一套客户端软件,它与资源管理器集成得相当不错,可以透过资源管理器在文件或目录上用鼠标右键的菜单完成 SVN 的操作。官方网站:http://tortoisesvn.net/
    • SnailSVN:Mac OS X 平台下类似 TortoiseSVN 的图形化 SVN 客户端,可自动标记文件状态,并通过右键菜单提供各种常用 SVN 功能。 网站:https://langui.net/snailsvn/
    • Ankhsvn:将 subversion 的操作集成进 Visual Studio 的 SVN 客户端软件。官方网站:http://ankhsvn.open.collab.net/
    • Subclipse:将 Subversion 的操作集成进 Eclipse 的 SVN 客户端软件。官方网站:http://subclipse.tigris.org/
    • SmartSVN:同时支持 Mac、Linux、Windows。是一款收费软件。

    BitKeeper

      BitKeeper 是一套 BitMover 公司开发的分布式版本控制软件,它曾是一款专有软件。BitKeeper 是最初的分布式源代码控制系统。BitKeeper 的许多概念取自 TeamWare(Larry McVoy 在 Sun 公司时开发的产品)。
      BitMover 公司 CEO Larry McVoy 与 Linus 曾是好友, Larry 说服 Linus 在内核开发中使用 BitKeeper。而 BitKeeper 在免费使用的许可证中加入很多限制条件,惹恼了内核开发者,最终促使 Linus 开发出了毁灭 BitMove r的 Git。

    2016 年 5 月 11 日,BitKeeper 宣布以 Apache 2.0 许可证开源。

    Mercurial

      Mercurial 是跨平台的分布式版本控制软件,主要由 Python 语言实现。Mercurial一开始的主要运行平台是 Linux,现在 Mercurial 已经移植到 Windows、Mac OS X 和大多数的类 Unix 系统中。Mercurial 主要由命令行程序组成,现在也有了图形用户界面。
      Mercurial 的创建者和主要开发人员是 Matt Mackal。其源代码采用GNU通用公共许可证第二版为授权,确保了Mercurial是一个自由软件。

    Git

      在 Linux 开源的初期,Linux 开源项目的代码是 linus 本人通过 linux 命令 diff 和 patch 两条命令手动完成。随着 Linux 代码越来越壮大,靠 Linus 一个人来手动合并已经不现实。2002 年,Linus 选择了一个商业版本控制系统 BitKeeper 作为 Linux 内核的代码管理工具(BitKeeper 的开发商 BitMover 授权 linux 社区免费使用)。但是,免费使用是有很多的限制的,因此 linux 社区的大佬开始破解 BitKeeper。其中,samba 的作者 andrew 破解成功了。但是被 BitMover 公司发现,收回免费使用权。
      迫不得已,Linus 选择了自己开发一个分布式版本控制工具以替代 BitKeeper。linus 闭关一个月,写出了 Git。在一个月后,Git 成功接管了 Linux 社区的版本控制工作,并且开始开源。维基百科中,有如下历史记录:

    • 2005 年 4 月 3 日,开始开发 Git。
    • 2005 年 4 月 6 日,项目发布。
    • 2005 年 4 月 7 日,Git 就可以作为自身的版本控制工具了。
    • 2005 年 4 月 18 日,发生第一个多分支合并。
    • 2005 年 4 月 29 日,Git 的性能就已经达到了 Linus 的预期。
    • 2005 年 6 月 16 日,Linux 核心 2.6.12 发布,那时 Git 已经在维护 Linux 核心的源代码了。

      在 2005 年 7 月 26 日,Linus 功成身退,将 Git 的维护交给另外一个 Git 的主要贡献者 Junio C Hamano。

    在 Linus Torvalds 开发出 Git 分布式版本控制系统 11 年后的 2016 年,BitKeeper 宣布在 Apache 2.0 许可证下开源。

    参考

    1. https://blog.51cto.com/12805107/2089757
    2. https://www.imooc.com/article/details/id/44217
    3. https://softwareengineering.stackexchange.com/questions/35074/im-a-subversion-geek-why-should-i-consider-or-not-consider-mercurial-or-git-or
    4. https://www.jianshu.com/p/a46f1cdada53
    5. https://gotgit.readthedocs.io/en/latest/index.html
    6. https://blog.csdn.net/qq_36647038/article/details/84022363
    7. http://www.worldhello.net/gotgit/
    展开全文
  • VSS VSS 的全称为 Visual Source Safe 。作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用...VSS作为一款历史悠久的版本管理工具,在早期扛起了版本管理系统方面的大气

    VSS

    VSS 的全称为 Visual Source Safe 。作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目。管理软件开发中各个不同版本的源代码和文档,占用空间小并且方便各个版本代码和文档的获取,对开发小组中对源代码的访问进行有效的协调

    VSS作为一款历史悠久的版本管理工具,在早期扛起了版本管理系统方面的大气,能帮助解决一部分版本控制方面的问题,也在一定程度上帮助解决代码共享方面的难题。但是依旧存在一些不足,比如:

    1.文件大多会以独占的形势进行锁定。如果一个人在修改的时候其他人没有办法进行修改。

    2.VSS只支持Windows版本,且只兼容微软的开发工具。

    3.文件存储,服务器必须共享文件夹,对文件的安全性没有足够保障。

    SVN

    SVN

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。互联网上很多版本控制服务已从CVS迁移到Subversion。说得简单一点SVN就是用于多个人共同开发同一个项目,共用资源的目的。

    这是百度百科中给出的SVN的解释。SVN是一个开源的版本控制系统。和VSS相比,除开最基本的代码和文件管理功能外,主要的革新是提供了分支的功能,从而解决了VSS文件独占的问题。大幅提升了开发人员的工作效率,谁写完代码,随时可以提交到自己的分支上,最后对所有分支进行合并,解决冲突即可。相比VSS而言,在工作模式上有了翻天覆地的改变。

    而SVN作为集中式的版本管理系统,依然有他的优缺点:

    优点

    1.管理方便,逻辑明确,操作简单,上手快。

    2.易于管理,集中式服务器更能保证安全性。

    3.代码一致性非常高。

    4.有良好的目录级权限控制系统。

    ·劣势

    1.对服务器性能要求高,数据库容量经常暴增,体量大。

    2.必须联网。如果不能连接到服务器上,基本上不可以工作,如果服务器不能连接上,就不能提交,还原,对比等等。

    3.不适合开源开发。

    4.分支的管控方式不灵活

    Git

    请点击此处输入图片描Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。作为一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。

    分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

    Git的优缺点如下:

    1.适合分布式开发,每一个个体都可以作为服务器。每一次Clone就是从服务器上pull到了所有的内容,包括版本信息。

    2.公共服务器压力和数据量都不会太大。

    3.速度快、灵活,分支之间可以任意切换。

    4.任意两个开发者之间可以很容易的解决冲突,并且单机上就可以进行分支合并。

    5.离线工作,不影响本地代码编写,等有网络连接以后可以再上传代码,并且在本地可以根据不同的需要,本地新建自己的分支。

    展开全文
  • 版本控制系统概述

    千次阅读 2016-10-29 12:53:38
    版本控制系统VCS(version control system),是一种记录若干文件变化,以便将来查阅特定版本修改记录的系统。对于编程开发人员来说,我们常使用版本控制系统来对程序源代码进行版本管理。但实际上,我们可以对任何...

    最近再次认真学习下 Git,参照《Pro Git》中文版和网易云课堂的 Git 教程,写下学习笔记,也当是做个记录,以便日后可以参阅。

    版本控制系统 VCS(version control system),是一种记录若干文件变化,以便将来查阅特定版本修改记录的系统。对于编程开发人员来说,我们常使用版本控制系统来对程序源代码进行版本管理。但实际上,我们可以对任何类型的文件进行版本控制。

    根据版本控制系统的实现方式,我们可以对版本控制系统划分为以下几种类型:

    • 本地版本控制系统
    • 集中式版本控制系统
    • 分布式版本控制系统

    本地版本控制系统

    在没有使用版本控制系统之前,许多人习惯用文件名标识的方式来对不同版本的文件进行管理。例如,对于如下文件的版本管理:

    foo.txt -> foo-修订版.txt -> foo-最终版.txt -> foo-最终版-1.txt -> foo-绝对不改版.txt -> …

    这么做的好处是简单,不过却容易混淆不同文件之间的区别,最终只能通过手工对比文件的差别来辨别不同的文件。
    为了解决这个问题,人们开发了本地版本控制系统,大多都是采用某种简单的本地数据库来记录文件的历次更新差异。例如图 1。
    一个流行的本地版本控制系统叫做 RCS

    这里写图片描述
    图 1:本地版本控制系统

    集中式版本控制系统

    本地版本控制系统的一个问题是,多个人如何进行协同工作?因为所有文件提交的记录都在提交者本地的计算机,他人无法获取文件最新状态。于是,集中式的版本控制系统出现了。
    这类版本控制系统,都有一个单一的集中管理的版本控制管理服务器,保存所有文件的修改版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新后的文件。

    这里写图片描述
    图2:集中式版本控制系统

    集中式的版本控制系统,可以允许多个人协同工作,每个人都可以看到其他人的修改记录。但是集中式版本控制系统最大的一个问题是版本服务器的单点故障问题。如果服务器宕机一小时,那么在这一小时内,谁都无法提交更新,也无法从服务器获取最新的文件。最坏的情况是,如果服务器的硬盘发生故障,并且没有做过备份或者备份不及时,还会有丢失数据的风险。

    分布式版本控制系统

    分布式版本控制系统的特点是客户端并不只提取最新版本的文件快照,而是把原始的代码仓库镜像完整地提取下来。这样一来,当版本控制服务器发生故障,事后可以用本地计算机的任何一个代码仓库镜像来恢复。因为每一次的撮操作,实际上都是对代码仓库的完整备份,见图 3。

    这里写图片描述
    图 3:分布式版本控制系统

    另外,由于大部提交的操作都是在本地进行而不需要经过服务器,因为提交的速度也更加快。
    现在非常流行的 Git,就是一种分布式版本控制系统。

    参考资料

    1. Git Pro, https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control
    2. Java Web开发第五章 Git, 郑海波, 网易云课堂
    展开全文
  • GIT(分布式版本控制系统)入门

    千次阅读 2017-12-20 22:10:22
    什么是GIT Git是目前世界上最先进的分布式版本控制系统(没有之一)。    那么问题来了,什么是分布式版本控制系统。    这里举个例子,你需要编写一个文档,这个文档呢财务部需要,产品部也需要。那么你要...
  • CVS及SVN都是集中式的版本控制系统,而Git是分布式版本控制系统。集中式和分布式版本控制系统有什么区别呢?   先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以...
  • 版本控制和版本控制系统的区别

    千次阅读 2016-08-08 20:10:57
    版本控制和版本控制系统的区别  转载必须声明转载地址http://write.blog.csdn.net/postedit 一、何谓版本控制 它是一种软件工程籍以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它透过文档控制...
  • RCS版本控制系统简介

    千次阅读 2009-10-08 19:50:00
    版本控制是指跟踪和管理源代码文件变化的自动过程。RCS(Revision Control System),是最常用的版本控制解决方案,之后有两个工具可以替代RCS,一个是SCCS(Source Code Control System),另外一个是CVS(Concurrent ...
  • 甚至早在踏上程序员的工作岗位的第一天之前,我就开始使用版本控制系统了,那时候,使用的是SVN。而现在工作五年多了,我使用的版本控制系统,换成了Git。现在,我试图通过一个分享,将我的同事,或者一般的小伙伴,...
  • 【git】—集中式与分布式版本控制系统

    千次阅读 热门讨论 2017-02-19 21:49:35
    从此,Linux系统不断发展,已经成为最大的服务器系统软件了,之前的linux代码是由Linus本人通过手工方式合并代码,后来为了切合Linux的开源精神,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!...
  • 几种版本控制系统比较

    千次阅读 2010-06-14 14:17:00
    CVS(Concurrent Versions System),SVN(Subversion),ClearCase
  • 版本控制

    2018-06-29 09:23:54
    关于版本控制版本控制(Version ...实现版本控制的软件有很多种类,大致可以分为: 本地版本控制系统 集中式版本控制系统 分布式版本控制系统。1. 本地版本控制系统借助软件我们可以记录下文件的每一次修改,...
  • SVN是Subversion的简称,开源的集中式管理代码的版本控制系统 2. 原理 原理是把代码都保存到一个固定的位置(仓库),每次从这个位置拷贝更新代码,进行编辑;再把修改后的代码提交到该目录中。多人协作开发也是如此...
  • 前言扯淡 新入公司,发现公司用的是Git进行代码管理,以前所呆的公司都是用的SVN,对于Git也不是完全不了解,之前多多少少了解过,但是毕竟没有用做实际开发中...Git是是目前世界上最先进的分布式版本控制系统 首先是
  • 在一篇介绍Git的文章中,作者说版本控制系统是为懒人准备的,它让懒人们比那些善于备份文档的勤劳人拥有更干净的文件系统以及更多的可以活着的时间。对此我深表赞同。同时在现在快节奏的社会中,
  • 1. 几个基本概念 SCM:软件配置管理,用来追踪和控制软件的变化的任务。 SCI:软件配置项,软件中发生变化的基本单元(例如:文件)。 Baseline:基线,软件持续变化过程中的“稳定时刻”(例如:对外发布的版本...
  • 版本控制系统(Version Control System,以下简称VCS)就是一个用来记录文件变动历史的系统,便于之后切换回去查看你修改的历史;举个最简单的例子,我们大家写毕业论文的时候,应该不会是一次就写好了,中间会有...
  • 【VCS】-常见的版本控制系统(VCS)

    千次阅读 热门讨论 2017-01-08 22:57:46
    一、什么是版本控制系统?  版本控制是一种记录一个或者若干个文件内容的变化,以便将来查阅特定版本修订情况的系统 1、作用  记录文件的所有历史变化  随时可回复到任何一个历史状态  多人协作开发或者修改  ...
  • 如果你连分布式版本控制系统都不知道,那说明你有点low了,自己该反思反思了(手动狗头)。这篇文章呕心沥血的带你从零开始Git之旅。 PART Ⅰ 分布式版本控制系统简介 1. 什么是分布式版本控制系统? 背景带入:...
  • <!-- @page {margin:2cm} ...使用版本控制系统Git(三) git的强大之处在于能很好的处理多人的协同工作。下面我介绍一下怎样在QtCreator下怎样使用git进行多人的协同工作。我也是最近学会的,有不对的地方
  • CVS及SVN属于集中式版本管理系统的代表 Git属于分布式版本管理系统的代表
  • Git就是分布式版本控制系统,对应的是集中式的版本控制如SVN。简单的说,分布式的版本控制就是每个人都可以创建一个独立的代码仓库用于管理,各种版本控制的操作都可以在本地完成。每个人修改的代码都可以推送合并到...
  • 什么是版本控制系统(VCS)?

    千次阅读 2014-02-09 16:04:41
    什么是版本控制系统(VCS)?  因为最近准备开始使用Git管理自己的项目,所以把在学习Git的过程中看到的帮助文档、网友的一些经验心得等内容整理下来,逐步形成自己的使用笔记,以便日后查阅。 版本控制系统是一种...
  • git分布式版本控制系统

空空如也

1 2 3 4 5 ... 20
收藏数 1,436,802
精华内容 574,720
关键字:

版本控制系统