Git 是一个免费的、开源的『分布式版本控制系统』,可以快速高效地处理从小型到大型的各种项目。官网为:https://git-scm.com/。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性,其性能优于 Subversion、CVS、Perforce 和 ClearCase 等版本控制工具。


一、何为版本控制系统

   版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。最重要的其实在于可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。
   版本控制系统分为『集中式』和『分布式』两种,下面会详细讲到。


1.1 集中式版本控制工具

   集中式版本控制工具:CVS、SVN(Subversion)、VSS 等。
   集中式版本控制系统都具有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人都通过客户端连接到这台服务器,取出最新的文件或者提交更新。

  • 好处:每个人都能在一定程度上看到其他人在做什么,管理员也能轻松掌握每个开发者的权限,并管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松。
  • 缺点:中央服务器的单点故障会使得整个系统陷入瘫痪,无法工作。

1.2 分布式版本控制工具

   分布式版本控制工具:Git、Mercurial、Bazaar、Darcs 等。
   分布式版本控制系统没有单一的集中管理的服务器,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像到本地库,实际上是对整个文件仓库的一次完整备份。

  • 好处:任意一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复;服务器断网的情况下也可以进行开发,因为版本控制是在本地进行的;每个客户端保存的是整个完整的项目,包含了历史记录,因此更加安全。

   更进一步,许多这类系统都可以指定和若干不同的远端代码仓库进行交互。因此,你就可以在同一个项目中,分别和不同工作小组的人相互协作。 你可以根据需要设定不同的协作流程,比如层次模型式的工作流,而这在以前的集中式系统中是无法实现的。


二、Git 工作四大特点

   Git 究竟是怎样的一个系统呢? 若你理解了 Git 的工具特点、思想和基本工作原理,用起来就会知其所以然,游刃有余。

① 直接记录快照,而非差异比较

   Git 和其它版本控制系统的主要差别在于 Git 保存数据的方式。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 。


   而 Git 不按照以上方式保存数据,而是像一个快照流,对小型文件系统保存一系列快照。 在 Git 中,每当你提交更新或保存项目状态时,它基本上就会对当时的全部文件创建一个快照并保存这个快照的索引。 为了效率,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。

② 近乎所有操作都是本地执行

   在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。因为你在本地磁盘上就有项目的完整历史,所以大部分操作看起来瞬间完成。

③ Git 保证完整性

   Git 中所有的数据在存储前都计算校验和,然后以校验和来引用。 这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 这个功能建构在 Git 底层,是构成 Git 哲学不可或缺的部分。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
   Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符组成的字符串,基于 Git 中文件的内容或目录结构计算出来的。Git 中使用这种哈希值的情况很多,你将经常看到。 实际上,Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名

④ Git 一般只添加数据

   你执行的 Git 操作,几乎只往 Git 数据库中添加数据。 你很难使用 Git 从数据库中删除数据,也就是说 Git 几乎不会执行任何可能导致文件不可恢复的操作


三、Git 的基本工作原理

   在了解 Git 工作原理之前,我们需要介绍一些相关的概念,再过渡到 Git 的基本工作原理。

① Git 文件的三种状态

  • 已修改(modified):表示修改了文件,但还没保存到数据库中。
  • 已暂存(staged):表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。
  • 已提交(committed):表示数据已经安全地保存在本地数据库中。

② Git 项目的三个阶段

  • 工作区:对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
  • 暂存区:是一个文件,保存了下次将要提交的文件列表信息,一般在 Git 仓库目录中。 按照 Git 的术语叫做“索引”,不过一般说法还是叫“暂存区”。
  • Git 仓库目录:Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,复制的就是这里的数据。

③ 基本的 Git 工作流程

  • Step1:在工作区中修改文件。
  • Step2:将你想要下次提交的更改选择性地暂存,这样只会将更改的部分添加到暂存区。
  • Step3:提交更新,找到暂存区的文件,将快照永久性存储到 Git 目录。

注意: 如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果文件已修改并放入暂存区,就属于已暂存状态。 如果自上次检出后,作了修改但还没有放到暂存区域,就是已修改状态。


四、代码托管中心

   代码托管中心是基于网络服务器的远程代码仓库,一般简称为 远程库

  • 局域网

    • GitLab
  • 互联网
    • GitHub(外网)
    • Gitee 码云(国内网站)

Git 详细教程之一: Git 简介及其基本工作原理相关推荐

  1. Git 详细教程之五:SSH 免密登陆 GitHub

       由于每次 Git 对远程库 GitHub 进行推送(push)等操作时都需要进行登陆验证才可以进行,比较麻烦.本篇博客提供了一种新的链接方式:『Git 详细教程之五:SSH 免密登陆 GitHu ...

  2. Git使用教程(二) — Git安装和使用

    Git使用教程(二) - Git安装和使用 使用目的:通过git管理github托管的项目代码 一.下载安装 GIt官网下载:https://www.git-scm.com/download/win ...

  3. 以太网 DHCP(简介、DHCP工作原理、租期时间)

    2.14.0 以太网 DHCP(简介.DHCP工作原理.租期时间) DHCP的作用:企业网络中存在大量的终端设备(PC),管理员配置设备上网参数工作量大,而且效率不高,手动配置容易出错,DHCP服务将 ...

  4. Intellij IDEA下载安装配置GIT详细教程 [超详细]

    一.背景. 这篇文章主要介绍了IDEA配置GIT的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下. 二.IDEA配置GIT的详细教 ...

  5. 小白入门Git详细教程

    分享我所学到的git命令基础 以及各种坑 首先来下载git 我用的是liunx系统 window系统直接去官网下载就行 , liunx 系统输入命令apt-get install git等待安装 gi ...

  6. 在Buffalo LS-WVL/E上安装git详细教程

    Buffalo LS-WVL/E是一个双盘位的网络存储器NAS,硬件配置不错,价格也比较便宜,网上有很多改机的教程,可玩度比较高. 为了给它装上git,我花了几天的时间,在网上搜寻许久,终于成功装上了 ...

  7. mac系统安装git 详细教程

    0.概述 记录一下mac系统安装git环境 首先我们看一下自己的mac系统是否有git , 打开终端输入git --version 2.我们进入git官网 git官网下载界面https://git-s ...

  8. Git(1)-- Win10 安装 Git 详细教程(超详细纯小白教程)

    文章目录 一.下载 二.安装 1.使用许可声明 2.安装路径 3.选择安装组件 4.选择开始菜单目录 5.选择Git文件默认的编辑器 6.选择Git初始化分支的名称 7.调整您的PATH环境 8.选择 ...

  9. Linux配置安装 git 详细教程

    引言 Git是目前流行的非常好用的版本控制工具,这里介绍两种安装方式,1.yum安装,2.从github上下载最新的源码编译后安装 一.环境介绍 系统:linux 镜像:CentOS-7-x86_64 ...

最新文章

  1. 配置 influxDB 鉴权及 HTTP API 写数据的方法
  2. Keil MDK 中利用串口及c标准库函数printf为cortex-m3做调试输出(lpc1788)
  3. 辛苦了一个下午和晚上,给Blog换了个新皮肤
  4. 卷机神经网络的可视化(可视化中间激活)
  5. php中post,php中post的用法是什么
  6. linux 嗅探密码,Linux下嗅探又一实例截取
  7. Linux内核的启动过程分析
  8. (三)pscc学习笔记
  9. python中re怎么念_Python,Re模块的学习
  10. 数据清洗中的缺失值处理
  11. Xcode5 创建模板和UIView 关联XIB
  12. 第一水上软件 Hypack v10.05b 海洋调查和水道测量 HYPACK 2011
  13. 设置chrome浏览器访问http服务时使用麦克风
  14. 中国经济衰退 周期投资风向标
  15. python 打包命令以及使用方法
  16. Mybatis测试运行异常之Type interface com.testmybatis.dao.bill.BillMapper is not known to the MapperRegistry.
  17. 【雷达通信】雷达探测项目仿真(Matlab代码实现)
  18. Invalid attempt to spread non-iterable instance. In order to be iterable, non-array objects must hav
  19. 将彩色图片分离为RGB三个通道的灰度图,并输出
  20. PyCharm安装中文包

热门文章

  1. C#实例——求周长面积
  2. android7.0隐藏标题栏,大佬,7.0.22设置后只有标题栏和状态栏能改背景颜色,其它的没变化,要怎么处理一下...
  3. BetaFlight模块设计之十七:pinioBox任务分析
  4. ABBYY FineReader 14的新增功能有哪些?
  5. 常用代码编辑工具简单记录
  6. 微课录屏软件哪个好?小白也能快速上手
  7. 如何免费把OFD格式转换成WORD
  8. 2017php免杀大马,cs 免杀 payload 绕过 360 全家桶
  9. 2016天津软件沙龙GIT培训会议总结
  10. 手把手教你在STM32上实现OLED视频播放(很简单也很硬很肝!)