几乎所有的版本控制工具都是出于同样的目的:开发以及维护开发出来的代码,方便读取代码的历史,记录所有的修改。这里,介绍的是当前在开源社区内非常流行的版本控制工具Git。它是由Linus Torvalds发明的,最初是为了方便管理linux内核的开发工作。

Git的诞生:

通常来说,当工具跟不上项目需求时,开发人员就会开发一个新的工具来替代它。大部分工具在发明之前,都会已经存在一些类似的工具,新工具则是在原有工具的思想上进行了更加合理的修改。那么在Git之前,有哪些版本控制工具呢?它们都有哪些特点呢?

1、源代码控制系统SCCS:

这是有证可查的可以运行在UNIX上最早的VCS,它提供了一个数据存储中心作为版本库,提供了一个简单的锁模型。该锁模型需要锁定-检出-解锁,是一个串行修改的版本控制系统。

2、修订控制系统RCS:

引入了双向差异的概念,来提高文件不同版本的存储效率。

3、并行版本系统CVS:

1986年由Dick Grune设计并实现,新概念包括分布式开发、提出一个关于锁的新范式。CVS给予每个开发人员对于自己私有版本写的权限,不同开发人员的改动可以自动合并。当两个开发人员试图修改同一行时,会提示冲突,并要求手动修改。

4、SVN:

提出了以原子方式提交改动部分。

5、BitKeeper和Mercurial:

淘汰了中心版本库的概念,数据的存储变成分布式的,每个开发人员都拥有自己刻共享的版本库副本。

6、Mercurial和Monotone:

首创了用散列指纹来唯一标识文件的内容。

Git在设计之初,或多或少的借鉴了上述几个版本控制工具的想法。

Git的特性:

1、有助于分布式开发:

它允许并行开发,不需要与一个中心版本库时刻同步,允许许多开发人员在不同的地方,甚至是离线的情况下,无障碍的开发。个人认为这个特点正是SVN所欠缺的。

2、能够胜任上千开发人员的规模:

3、性能优异。

4、保持完整性和可靠性:

Git使用了安全散列函数SHA1来命名和识别数据库中的对象。

5、强化责任:

Git对每一个有文件改动的提交强制使用改动日志,定位谁改动了文件,以及改动的原因。

6、不可变性:

Git版本库中存储的数据对象均为不可变的。

7、原子事务:

让一系列不同诞生相关的操作要么全部执行,要么全部失败,确保版本数据库不会陷入部分改变或者破损的状态。

8、支持并鼓励基于分支的开发。

9、完整的版本库:

可以让每个开发人员不需要查询中心服务器就可以得到历史修订信息。

Git版本控制管理学习笔记1-介绍的更多相关文章

  1. Git版本控制管理学习笔记3-基本的Git概念

    为了更近一步的学习和理解Git的理念,这一节介绍一下Git中的一些基本概念. 基本概念 对象库图示 Git在工作时的概念 一.基本概念: 1.版本库:     Git的版本库就是一个简单的数据库,其中 ...

  2. Git版本控制管理学习笔记5-提交

        这个标题其实有些让人费解,因为会想这个提交是动词还是名称?     提交动作是通过git commit命令来实现的,提交之后会在对象库中新增一个提交对象.提交过程中会发生哪些变化,在上一篇笔记 ...

  3. Git版本控制管理学习笔记4-文件管理和索引

        可以认为使用Git时,我们会遇到3个空间:工作目录.索引.版本库.我们关心的,就是在新建.修改等操作时,这三者之间发生了怎样的变化.     笼统的讲,就是在工作目录下编辑,在索引中积累修改, ...

  4. Git版本控制管理学习笔记2--起步

    首先确保系统中已经安装了git,这里使用的linux系统. 一.命令行初步使用: 1.git命令: 列出它的选项和最常用的子命令.标准命令格式中,COMMAND代表的就是下面列出的子命令. [root ...

  5. Git 版本控制工具(学习笔记)

    GIT(分布式) 一.Git 初始版本控制工具 1. 安装Git Ubuntu系统下,打开shell界面,输入: sudo apt-get install git-core  之后回车输入密码,即可完 ...

  6. Git版本控制管理教程(一):介绍

    我的个人博客地址:damienzhong.com 原文链接:点击打开链接 1.1 背景 数据是短暂的,且容易丢失的,特别是作为开发人员的我们每天频繁的对项目代码进行更新,容易产生错误代码的变更或者项目 ...

  7. C++内存管理学习笔记(5)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  8. C++内存管理学习笔记(7)

    /****************************************************************/ /*            学习是合作和分享式的! /* Auth ...

  9. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

随机推荐

  1. 【USACO 2.3】Cow Pedigrees(DP)

    问n个结点深度为k且只有度为2或0的二叉树有多少种. dp[i][j]=dp[lk][ln]*dp[rk][j-1-ln],max(lk,rk)=i-1. http://train.usaco.org ...

  2. ORB-SLAM(四)追踪

    最近在读ORB-SLAM的代码,虽然代码注释算比较多了,但各种类和变量互相引用,看起来有点痛苦.索性总结了一下Tracking部分的代码结构,希望能抓住主要思路,不掉坑里. 追踪 追踪部分的主要思路是 ...

  3. noip2016十连测round1

    A:String Master 题目:所谓最长公共子串,比如串 A:"abcde",串 B:"jcdkl",则它们的最长公共子串为串 "cd" ...

  4. iOS提交后申请加急审核

    链接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 在i would like to里选择加急审核 然后填 ...

  5. 在写junit test 的时候出现的java.lang.UnsupportedClassVersionError问题

    今天在写为一些project 写 一些junit  test  的时候,出现下面的异常: java.lang.UnsupportedClassVersionError: moneytest/Money ...

  6. [NHibernate]关联映射

    系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate ...

  7. [UML]UML系列——类图class的依赖关系

    相关文章          [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列—— ...

  8. 如何在ASP.NET MVC和EF中使用AngularJS

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) AngularJS作为一个越来越流行的前端框架,在使用ASP.NET MVC和实体框架开发W ...

  9. Bash 中 SHLVL 变量为 1000 的时候

    SHLVL 环境变量代表 Shell 嵌套执行的深度. $ echo $SHLVL 1 $ bash $ echo $SHLVL 2 $ bash $ echo $SHLVL 3 在 Bash 里,这 ...

  10. Node.js Stream-进阶篇

    作者:美团点评技术团队链接:https://zhuanlan.zhihu.com/p/21681115来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 上篇(基础篇)主要 ...