关于版本控制

什么是版本控制?为什么要版本控制?

版本控制是记录文件内容变化,以便在将来查阅特定版本的系统.有了版本控制,我们就可以将某个文件或是整个项目回退到之前的某个时间段,查看现在和之前相比项目所有的变化,甚至比较文件的变化细节.

本地版本控制

最简单的版本控制就是本地版本控制,我们可以复制一份当前的工作,并在备份上修改做增添新的内容.对单个或几个文件来说这样做是很简单的,但对大的项目就无能为力了.



还有一种流行的一种叫做 rcs,现今许多计算机系统上都还看得到它的踪影。甚至在流行的 Mac OS X 系统上安装了开发者工具包之后,也可以使用 rcs 命令。它的工作原理基本上就是保存并管理文件补丁(patch)。文件补丁是一种特定格式的文本文件,记录着对应文件修订前后的内容变化。所以,根据每次修订后的补丁,rcs 可以通过不断打补丁,计算出各个版本的文件内容。

集中化的版本控制系统

本地版本控制最大的问题就是不能多开发者协作.于是有个集中化的版本控制系统(Centralized Version Control Systems,简称 CVCS ),例如CVS.

所有人的工作都上传到服务器,服务器保存版本更改,而人们同样通过下载来获取最新的更新.



这样做最大的问题是,所有的数据,历史记录都只保存在中央服务器上,如果中央服务器出问题,人们就没法上传下载,即便客户端有当前最新项目的备份,历史更新记录也会丢失.

分布式版本控制系统

为了解决上面提到的问题,人们又发明了分布式版本控制系统(Distributed Version Control System,简称 DVCS).例如Git,客户端并不只是提取最新版本的文件,而是完成的镜像代码仓库.这样一来,客户端和服务器只是担任的功能不同,保存的文件是完全一样的,如果服务器出现故障,客户端仍保存完整的文件和历史记录.

Git基础知识

Git和其他版本控制系统的差别

传统的CVS的版本控制系统每次更新时会记录哪些文件做了更新,以及更新了什么内容,如下图:

而Git并不会保存差异数据(Δ),而是直接记录文件的快照.当提交更新时,Git会总览所有文件的指纹信息,如果文件有更新就会做一个快照并保存一个指向快照的索引,因此Git更像一个微型的文件系统.为了提高性能,若文件没有变化,Git不会再次保存而是做一个对上次保存的快照的链接.如下图:

近乎所有操作都在本地执行

由于Git在本地保存了完整的仓库,因此Git中的大多数操作都是无需联网的,除非你需要多人合作,而CVCS差不多所有的操作都需要连接互联网,因此你必须把自己的改变上传到云端。因此Git会比CVCS快很多。

举个例子,如果要浏览项目的历史更新摘要,Git 不用跑到外面的服务器上去取数据回来,而直接从本地数据库读取后展示给你看。所以任何时候你都可以马上翻阅,无需等待。如果想要看当前版本的文件和一个月前的版本之间有何差异,Git 会取出一个月前的快照和当前文件作一次差异运算,而不用请求远程服务器来做这件事,或是把老版本的文件拉到本地来作比较。

用Git你可以在没有网络的时候提交更新,等到了有网络的时候再上传到远程仓库,换做其他版本控制系统,这几乎是不可能的。

保持数据完整性

在保存到Git之前,所有的数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的 唯一标识 和索引。这项特性作为Git的设计哲学,建在整体架构的最底层。因此Git可以非常容易的发现文件传输时的不完整或是磁盘损坏导致的文件数据缺失。

Git使用SHA-1算法计算数据的校验和,通过对文件的内容或目录结构计算出一个哈希值,由40位16进制字符组成,看起来就是:

24b9da6552252987aa493b52f8696cd6d3b00373

Git的工作完全依赖这类指纹字串。实际上,所有保存在Git数据库中的东西都是以哈希值来索引的,而不是文件名。

文件的三种状态

对于任何一个文件,在Git内都只有三种状态:已提交(committed),已修改(modified)和已暂存(staged).

已修改 表示文件已被修改,但还没有提交保存;

已暂存 表示已将修改后的文件放在待提交的清单中;

已提交 表示文件已被安全的保存在本地数据库中了;

下图从左到右标识了文件流转的三个区域:工作目录、暂存区、Git仓库目录

每个项目都有一个Git目录,通常是.git目录,它是保存元数据和对象数据库的地方。该目录非常重要,每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

从项目中取出某个版本的所有文件和目录,用以开始后续的工作的叫做工作目录。实际上是从.git目录的压缩对象数据库中提取出来的。

暂存区只是一个简单的文件,一般存放在Git目录中,有时候人们也叫它索引文件。

初次运行Git前的配置

环境变量位置

Git提供了git config命令来配置和读取相应的工作环境变量,Git中的变量可以存取在以下三个不同的地方。

  • /etc/gitconfig文件:对所有用户都生效的配置,在使用git config时用--system 选项,读写的就是这个文件。
  • ~/.gitconfig文件:只对当前用户生效,在使用git config时用--global选项,读写的就是这个文件。
  • 工作目录中的git/config文件:仅对当前项目生效。每一个级别的配置都会覆盖上层相同的配置,所以.git/config里的配置会覆盖系统和用户配置文件中的同名变量。

用户信息

使用Git首先要配置的就是你的用户名和电子邮件地址。

git config --global user.name lepecoder
git config --global user.email example@exalple.com

默认文本编辑器

Git有时需要你输入一些额外的信息,这时就会调用外部编辑器,一般是vi或vim,如果有特殊的需求,也可以自己设定:

git config --global core.editor emacs

指定差异分析工具

可以指定在合并冲突时使用哪种差异分析工具,Git可以理解kdiff3,tkdiff,meldm,xxdiff,emerge,vimdiff,gvimdiff,ecmerge,opendiff等,比如我们要改用vimdiff。

git config --global merge.tool vimdiff

查看配置信息

可以使用git config --list命令查看配置信息,如果有重复的变量名,表示他们来自不同的配置文件,Git实际使用时会采用最后一个。

$ git config --list
user.name=Scott Chacon
user.email=schacon@gmail.com
color.status=auto
color.branch=auto
color.interactive=auto
color.diff=auto
.....

也可以直接看某个变量的值

$ git config user.name
lepecoder

基本的Git工作流程是

  1. 在工作目录中修改某些文件。
  2. 对修改后的文件进行快照,保存到暂存区。
  3. 提交更新,将暂存区的快照永久转储到Git目录中。

参考资料https://www.gitbook.com/book/0532/progit/details

git起步的更多相关文章

  1. (三)Java工程化--Git起步

    GIT学习参考:https://git-scm.com/book/zh/v2 版本控制 版本控制记录了一个或若干文件的历史变化,便于今后查阅,恢复. 三类版本控制系统 本地版本控制系统 RCS : 本 ...

  2. 【转】Git详解之一:Git起步

    原文网址:http://blog.jobbole.com/25775/ 原文:<Pro Git> 起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后 ...

  3. Git详解之一 Git起步

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  4. Git详解之一:Git起步

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  5. Git 学习之git 起步(一)

    起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...

  6. Git起步--git安装与初次运行git前配置

    在你开始使用 Git 前,需要将它安装在你的计算机上. 即便已经安装,最好将它升级到最新的版本. 你可以通过软件包或者其它安装程序来安装,或者下载源码编译安装. 一.Git安装 1. 在linux上安 ...

  7. 让你不再纠结GitHub:Git起步

    一.关于版本控制 版本控制是一种记录若干文件内容变化,以便将来查阅特定版本修订情况的系统.我们通常仅对保存着软件源代码的文本文件做版本控制,但实际上,你可以对任何类型的文件进行版本控制. 采用版本控制 ...

  8. 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程

    1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...

  9. Git学习1:Git起步

    本系列文章部分原理和命令相关内容是从 https://git-scm.com/book/zh/v2 摘录,软件实际使用是总结自己的实践经验成文. 1. 关于版本控制 版本控制是一种记录一个或若干文件内 ...

随机推荐

  1. iOS之分类(category)

    1.分类(category)的作用 1.1作用:可以在不修改原来类的基础上,为一个类扩展方法.1.2最主要的用法:给系统自带的类扩展方法. 2.分类中能写点啥? 2.1分类中只能添加“方法”,不能增加 ...

  2. [nginx] load balancing & location

    一 将NGINX配置成7层load balancer,该怎么做? 参见: http://nginx.org/en/docs/http/load_balancing.html https://docs. ...

  3. day3_元组

    元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 一.创建元组 1.普通创建 实例1: >> ...

  4. # 20165225 《Java程序设计》第一周学习总结

    20165225 <Java程序设计>第一周学习总结 1.视频与课本中的学习: 首先是为了运行和开发Java分别安装了JRE和JDK,具体做法在老师给的<Java2 实用教程(第五版 ...

  5. 20165336 实验三 敏捷开发与XP实践

    20165336 实验三 敏捷开发与XP实践 一.实验报告封面 课程:Java程序设计 班级:1653班 姓名:康志强 学号:20165336 指导教师:娄嘉鹏 实验日期:2018年4月28日 实验时 ...

  6. 同步fifo的Verilog实现

    FIFO是一种先进先出的数据缓存器,他与普通存储器相比: 优点:没有外部读写地址线,这样使用起来非常简单: 缺点:只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存 ...

  7. block详解

    Objective-C 中 Block 有三种类型: NSStackBlock 存储于栈区 NSGlobalBlock 存储于程序数据区 NSMallocBlock 存储于堆区 block 内部没有引 ...

  8. 时间序列分析工具箱——sweep

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/81977856 作者:徐瑞龙.量化分析师,R语言中文 ...

  9. entry.define编程思路

    0.lua将文字传给场景脚本. 1.场景脚本将pattern.define文件中的PAT当作子弹(水泡弹,带颜色) 2.用户的问题作为客户端的请求,发送给服务器端 3.服务器端接受客户端的问题请求 4 ...

  10. 表单中的input框点击enter到下一个input框

    $(function() { $("#form1").on("keydown", "tr input", function() { //响应 ...