写点什么

【摘】Git- 从零单排 01 期

用户头像
卡尔
关注
发布于: 2020 年 05 月 26 日
【摘】Git-从零单排 01期

前言

对于 Git 这么一个优秀的版本控制系统,网上关于 Git 的优秀文章自然成千上万,那笔者为什么还要再写这个系列的文章呢?因为,笔者在学习的过程当中发现,最好的学习方式就是‘输出’。同时,‘输出’质量的好劣,能最好的体现学习效果。当然,笔者也是非常希望,此系列文章能真正的帮助读者解决 Git 的相关的问题,就算只有一位,也算是此系列文章最大的成功。

笔者学习Git时,系统环境为 macOS Mojave v10.14.5,Git版本为 2.20.1 ,开发工具为 vscode 1.45.1 。

版本控制是什么  



什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。 在本书所展示的例子中,我们对保存着软件源代码的文件作版本控制,但实际上,你可以对任何类型的文件进行版本控制。    



上文是摘自 Git官方文档 的描述。很好理解,比如,你在写毕业论文时,你在写报告时,你在给老板做ppt 文件时,不可避免的需要对所写文件进行多次修改。那么,每一次修改保存后,都算是文件的一个版本。

我在没接触版本控制之前,我是这样通过复制文件,把版本信息放到文件名里,进行版本管理的。但是,这样并没有很好的解决版本控制问题,比如,修改时间不明确,版本描述信息不清楚,修改人不确定,没有备份等,最好的解决办法就是 干掉或成为甲方爸爸,让每一个文件都只要写一次 使用版本控制系统。

版本控制系统从最初的本地版本控制系统,到集中化的版本控制系统,到现在的分布式版本控制系统。 当然 复制文件 也算是本地版本控制系统的一种 ,【本地版本控制系统】是把每一个版本的补丁保存在电脑硬盘上,通过补丁可以计算出任何一个版本;后来为了解决【本地版本控制系统】无法多人协作等问题,就出现了【集中化版本控制系统】,它是通过把版本信息存放在一台中央服务器上,协作都通过网络下载版本信息或提交自己的最新修改;后来又为解决【集中化版本控制系统】里中央服务器的单点故障,影响全部成员无法协作的问题,就出现了【分布式版本控制系统】,它的协作者客户端并不只提取最新版本的文件快照, 而是把版本完整地镜像下来,包括完整的历史记录。 这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。 因为每一次的克隆操作,实际上都是一次对仓库的完整备份。 本系列文章就是讲众多【分布式版本控制系统】里的一种,Git !

Git是什么

Git 是一个分布式版本控制系统。但是它与其它分布式版本控制系统又有很大的区别,这些不一样的地方,让它成为了最受喜爱的版本控制系统之一。下面,就让我们看看它有哪些明显的优势。



  1. 直接记录快照,而非差异 

有部分版本控制系统在对待数据时,是采取存储每一个版本之间的差异来实现控制的。比如,在一文件里添加一段文字,那么这类‘差异’版本控制系统会把这次的差异(也就是那一段文字)存成补丁,当需要的时候,就操作相关补丁来实现版本控制。而 Git 并不是存储版本之间的差异,而是把每一次版本的文件‘全貌快照’存起来,比如,在一文件里添加了一段文字,那这个文件会按特定的计算规则被生成一个 blob 的文件对象(我们姑且称这个 blob 为 A )。当需要时,Git 会把 A 转成之前的文件。如果下一个版本里,没有修改这个文件,那下一个版本的‘全貌快照’里存储的就是 A 的一个引用。 



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

在平时的工作中,我们使用 Git 最多的操作就是,保存、提交和查看历史等。这里的保存与提交,都是与本了的 Git 仓库(后文会详细讲解 Git 仓库)打交道,不需要用到网络。如果是查看历史记录呢,也不需要连网,因为本地拥有的是一个完整的备份。用到网络时候,一般只是更新和上传。同时,因为绝大部分操作都是在本地执行的,看起来就是瞬间完成,所以 Git 给使用者的感觉就是快到极点,爽!



  1. Git 保证完整性 

因为 Git 在存储数据前,都会计算校验和,然后以校验和来引用各种数据。校验和的计算机制叫做 SHA-1 散列,这是基于项目文件内容或目录结构计算出来,前文说到的‘全貌快照’,就是一堆校验和。每一个版本的校验和都能完整的还原项目,就是因为这个校验和是唯一的。同时,因为这一点,所以就意味着,你不可能在 Git 不知情的情况下更改任何文件或目录,当然,没被 Git 追踪的除外。这是 Git 哲学不可或缺的部分。 



  1. Git 一般只添加数据 

Git 里会有添加、提交、回滚、撤销等操作,从字面意思来看,回滚和撤销有点类似删除、撤回等操作。但是,在 Git 里,我们需要记住,绝大部分操作,都是添加行为。比如说,添加了一个提交操作,添加了一个回滚操作,添加了一个撤销操作。基于这一点,我们很难让 Git 执行任何不可逆的操作或让它清除数据,因为这样的操作都被添加到了‘操作记录’里了,有记录就可逆可找回啦。当然,你如果操作 Git 仓库(.git文件夹)里的底层文件,那就另当别论了,千万不要去修改 Git 仓库里的文件

Git项目有什么

有一个工作目录(Working Directory)、一个暂存区(Staging Area)、一个仓库(.git directory)。工作目录就是工作目录下 .gitignore(忽略文件)文件不包含的其它所有文件和文件夹;暂存区就是 .git/index 文件;仓库就是 .git 文件夹。与之对应的就会有三个状态:



  • 已修改(modified) ——表示修改了文件,但还没保存到数据库中。

  • 已暂存(staged) ——表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

  • 已提交(committed) ——表示数据已经安全地保存在本地数据库中。



上面六个概念请稍微记忆,这将会对你之后的 Git 学习有帮助。

Git怎么安装

安装的方法太多了,到网上一搜到处都是,甚至有些地方还给你下载好了安装包。当然,笔者还是比较推荐到官网下载最新最安全的包。下载之后都是傻瓜式的安装。安装之后,在终端里输入 git --version ,如果有版本输出,就说明安装成功了,从此你就可以用上超级好用的版本控制系统了。



  • 在 mac 上安装,可以在终端里输入 brew install git ,也可到官网( mac )下载二进制包。

  • 在 windows 上安装,可以点击官网 (windows)下载安装包,之后就是‘下一步式’安装。

Git的基本配置

当然,安装成功后,我们需要对 Git 做些基本的配置,这是为了方便我们以后使用 Git 。 git config 就是用来帮助设置控制 Git 外观和行为的配置变量的。每台电脑上只需要配置一次,程序升级时,会保留你的配置信息,当然,你也可以在任何时候通过命令去修改配置。在终端输入

git config --global user.name '王阳明'
git config --global user.emial wangyangming@email.com

因为这个用户信息是在我们进行 Git 操作时要用的,用来识别身份的。这里的 --global 是设置配置项的级别,对应的选择还有 --system --local ,权重是 local、global、system 依次递减,也就是说 local 配置信息会覆盖 global 的配置,global 会覆盖 system 。我们可以通过 git config -l 查看电脑上的 Git 配置信息。也可以加上 --show-origin 选项把配置信息存储的文件位置显示出来。



补充一下, --system 设置的信息存放在/etc/gitconfig里, --global 设置的呢,存放在~/.gitconfig里, --local 设置的则存放在项目的 Git 仓库中的config里(.git/config)。当然,Git 的配置可以不单单是这么一点哦。后续笔者会单独对配置进行详细介绍。

后语

总结一下, Git 是一个分布式版本控制系统。它有四个与众不同的优点:直接记录快照,而非差异、近乎所有操作都是本地执行、Git 保证完整性、Git 一般只添加数据。它有三个状态:已修改(modified)、已暂存(staged)、已提交(committed),与之对应的就有了工作目录、暂存区、Git 仓库。下载安装后,记得需要使用 git config 进行一个基本的配置,配置有三种:system、global、local。<br />通过这篇文章,我相信你对 Git 应该有了一个基本的认识。下一篇笔者将详细详解,初始化一个 Git 仓库与 Git 的基本使用。

所谓无底深渊,下去也是前程万里。



发布于: 2020 年 05 月 26 日阅读数: 125
用户头像

卡尔

关注

还未添加个人签名 2019.03.01 加入

还未添加个人简介

评论

发布
暂无评论
【摘】Git-从零单排 01期