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

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 创建.emacs.d目录和.emacs文件

    1.双击bin下的addpm.exe 2.HKEY_CURRENT_USER->Software->GNU->Emacs 新建字符串值HOME,数值数据为emacs的安装路径 3.创 ...

  3. c# DES加密解密

    class DESHelper { string _iv = "9AUP"; string _key = "9d"; /// <summary> / ...

  4. Leetcode 39. Combination Sum

    Given a set of candidate numbers (C) (without duplicates) and a target number (T), find all unique c ...

  5. C#把DataTable中数据一次插入数据库的方法

    现在实际的情况是这样的: 客户有一台打卡机,员工打卡的信息全部储存在打卡机的Access数据库里面,现在客户引入了一种新的管理系统,需要将Access数据库中的打卡数据同步到SQL Server数据库 ...

  6. 增量关联规则挖掘—FUP算法

    一.背景介绍 关联规则( Association rule)概念最初由Agrawal提出,是数据挖掘的一个重要研究领域, 其目的是发现数据集中有用的频繁模式. 静态关联规则挖掘,是在固定数据集和支持度 ...

  7. Android开发笔记之《远程控制(MQTT|mosquitto) && (ProtocalBuffer | GRPC)》

    Android推送方案分析(MQTT/XMPP/GCM): http://www.open-open.com/lib/view/open1410848945601.htmlMQTT官网: http:/ ...

  8. C# winform开发:Graphics、pictureBox同时画多个矩形

    C#的System.Drawing 命名空间提供了对 GDI+ 基本图形功能的访问 重点在于获取Graphics对象,例如: Graphics g = panel1.CreateGraphics 事实 ...

  9. React.js入门笔记(续):用React的方式来思考

    本文主要内容来自React官方文档中的"Thinking React"部分,总结算是又一篇笔记.主要介绍使用React开发组件的官方思路.代码内容经笔者改写为较熟悉的ES5语法. ...

  10. [NHibernate]O/R Mapping基础

    系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) 引言 对象和关系数据库 ...