version control

什么是版本控制

要了解什么是git,首先需要了解什么是版本控制(Version Control),版本控制系统(Version Control System,简称VCS)是一种记录一个或多个文件的变化的系统,这样的系统能够方便你今后调用找回某个特定时期(或版本)的文件。 版本控制系统广泛地应用于程序开发等领域,它可以协助你将某个指定的文件(甚至是一整个项目)返回至某个之前记录的状态,查看发生了哪些变化、对变化进行比较或者是修正致命错误。 版本控制系统主要经历了本地版本控制,集中式版本控制到分布式版本控制的发展:

  • 本地版本控制(Local Version Control System)顾名思义就是本地化的版本控制系统,没有网络协作等较为先进的版本控制的概念
  • 集中式版本控制意(Centralized Version Control System)为有一台版本控制服务器运行在那边存放并提供一个项目中所有版本文件的服务,在很长一段时间内占据主流,其中CVS与Subversion(SVN)为其代表
  • 分布式版本控制(Distributed Version Control System)克服了集中式版本控制可能因为单点失败造成的巨大损失的缺点,让每一台客户端在每一次checkout操作后都完全镜像整个版本控制中的项目。在分布式版本控制系统中,任何一台机器都可以视为版本控制服务器。即使有一台服务器失去服务能力,其它机器与系统可以继续协作维持版本控制系统的正常运转。git就是分布式版本控制系统

git的历史

在2005年,Linux内核开发团队与其使用的分布式版本控制系统BitKeeper的开发公司关系破裂,他们没有了免费使用BitKeeper的特权。这直接催生了Linux开发社区自己开发一套分布式版本控制系统的想法。 Linux开发社区借鉴了之前使用BitKeeper时看到的闪光点,并希望能够在版本控制系统的速度、架构设计与各类特性支持中作出较好的改进与提升,于是,git诞生了。

基础概念与机制

git与其它主流的VCS最大的区别就是,在项目版本更新的过程中,git记录的并非是基于初始文件的变化数据,而是通过一系列快照(Snapshot,就像是个小型的文件系统)来保存记录每个文件。如果有些文件在版本更新后没有发生任何变化,那么在新的版本中它会是一个指向最近一次更新的文件版本的链接。 此外,几乎所有git的操作都是在本地进行的,所以,没有了“延迟”,几乎所有的操作都是瞬间完成的。例如,当你想要查看项目历史时,不需要特地去服务器上抓取历史记录,直接在本地浏览即可。这意味着,你可以在本地对比两个不同版本的文件的差别,可以在本地查看过去有哪些人对指定文件作出了修改与更新,可以……几乎完全本地化的操作也让这样一种场景成为了可能: 当一个人在飞机、火车上,或者是任何因素导致没有网络连接条件但是又必须抓紧时间对自己的项目进行修改与开发,同时又需要有版本管理系统来记录每次他commit的历史,这时,git提供了他所有需要的便利。

git使用SHA-1 Hash算法加密生成的40位字符串(而不是文件名)来记录代表git中的每样东西。格式就像这样:

??6bafcdc09f3d6d416f6572f82082987a486d3098

git中的文件主要会处于三种状态,它们分别是:

  • Committed: 文件或数据已经安全的存放在了git本地数据库中
  • Modified: 文件或数据已经修改但是尚未commit到数据库
  • Staged: 文件或数据已被标记要放入到下一次commit中

这样的机制致使git的镜像会由三个部分组成(假设有一个git目录叫git-repo):

  • Git directory: 存放项目中所有元数据以及对象的地方(git-repo/.git/)
  • Working directory: 在这里是从git项目数据库中checkout出的一个单独的(默认情况下是最新的)项目版本,用于对指定项目版本中的文件进行修改和编辑(git-repo/)
  • Staging area: 一般是存放在Git directory中的一个简单的文件,里面存放着下一次需要commit的文件的信息(在git-repo/.git/中)

非原创,来源:http://www.cnblogs.com/shenhaocn/archive/2011/03/13/1982957.html

原文地址:https://www.cnblogs.com/guanven/p/10479687.html