几乎所有的版本控制工具都是出于同样的目的:开发以及维护开发出来的代码,方便读取代码的历史,记录所有的修改。这里,介绍的是当前在开源社区内非常流行的版本控制工具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. Dijkstra的双栈算术表达式的求值算法

    例如需要计算 ( 1 + (  ( 2 + 3 ) * ( 4 * 5 ) ) ) 我们以字符串的形式输入该表达式,利用两个栈来完成这个操作,其中一个栈保存运算符,一个栈保存操作数,过程是这样的: 表 ...

  2. jquery 使用方法

      jQuery是目前使用最广泛的javascript函数库.据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库.对于网页开发者来 ...

  3. excel出现错误1327 无效的驱动器

    错误描述:错误1327 无效的驱动器 错误程序:excel 2003   这是office安装源的位置被移动造 成的的,大部分时候安装时可能使用了移动硬盘或者在安装后调整了盘符就会造成这个问题.官方的 ...

  4. AOJ DSL_2_C Range Search (kD Tree)

    Range Search (kD Tree) The range search problem consists of a set of attributed records S to determi ...

  5. Day3-python基础3

    本次学习内容 元组 字典 集合 字符编码 文件处理 一.元组 定义:与列表类似,定义是使用() 特性: 1.可存放多个值 2.元组里的元素是不可变的 3.有序,下标从0开始从左往右的顺序访问 元组常用 ...

  6. python:mysql+pycharm+Django环境搭建

    1.安装mysql-python 环境:OS X Yosemite10.10.2 + Python2.7 首先网上搜了下mysql-python,说要先安装mysql客户端,然后改配置文件,可是各种改 ...

  7. java源码分析:Arrays.sort

    仔细分析java的Arrays.sort(version 1.71, 04/21/06)后发现,java对primitive(int,float等原型数据)数组采用快速排序,对Object对象数组采用 ...

  8. zabbix注入过程分析

    Zabbix jsrpc.php sql 注入过程分析 漏洞公开详情(https://support.zabbix.com/browse/ZBX-11023)中提示在insertDB() 中的inse ...

  9. 使用Spring和SpringMVC管理bean时要注意的一个小细节

    最近一直在做毕业设计...用到了Shiro和SpringMVC..用过shiro的朋友都知道shiro需要自己去写Realm,然后把Realm注入到SecurityManager中.而Security ...

  10. asp.net core 使用EF7 Code First 创建数据库,同时使用命令创建数据库

    1.首先下载vs2015的Asp.Net Core(RC2)的插件工具(https://www.microsoft.com/net/core#windows)2.创建一个asp.net Core的项目 ...