Git入门简单用法与Git对象原理

之前一直在用github,对于git以及github的图形客户端的常用方法有一定的了解。这片文章主要介绍下git的入门用法与git对象原理:

常用命令

git add //添加所有的文件到索引
git commit //向本地源码库提交,会打开默认vi编辑器写注释
git push origin master //把本地源码库push到github上
git pull origin master //从github上pull到本地源码库

新建项目举例说明

git config --global user.name "bailitusu"
git config --global user.email [email protected]

mkdir ProjTest
cd ProTest
git init
touch README
git add README
git commit -m 'test commit'
git remote add origin https://github.com/bailitusu/ProjTest.git
git push -u origin master

Git对象原理介绍

Git 是一套内容寻址文件系统。从内部来看,Git 是简单的 key-value 数据存储。它允许插入任意类型的内容,并会返回一个键值,通过该键值可以在任何时候再取出该内容。可以通过底层命令hash-object 来示范这点,传一些数据给该命令,它会将数据保存在 .git 目录并返回表示这些数据的键值。首先初使化一个 Git 仓库并确认objects 目录是空的:


Git入门简单用法与Git对象原理_第1张图片

Git 初始化了 objects 目录,同时在该目录下创建了 pack 和 info 子目录,但是该目录下没有其他常规文件。我们往这个 Git 数据库里存储一些文本:



参数 -w 指 hash-object 命令存储 (数据) 对象,若不指定这个参数该命令仅仅返回键值。--stdin 指定从标准输入设备 (stdin) 来读取内容,若不指定这个参数则需指定一个要存储的文件的路径。该命令输出长度为 40 个字符的校验和。这是个 SHA-1 哈希值──其值为要存储的数据加上一种头信息的校验和。现在可以查看到 Git 已经存储了数据:

可以在 objects 目录下看到一个文件。这便是 Git 存储数据内容的方式──为每份内容生成一个文件,取得该内容与头信息的 SHA-1 校验和,创建以该校验和前两个字符为名称的子目录,并以 (校验和) 剩下 38 个字符为文件命名 (保存至子目录下)。
通过 cat-file 命令可以将数据内容取回。传入 -p 参数可以让该命令输出数据内容的类型:



可以往 Git 中添加更多内容并取回,也可以直接添加文件。比方说可以对一个文件进行简单的版本控制。首先,创建一个新文件,并把文件内容存储到数据库中:

接着往该文件中写入一些新内容并再次保存:

数据库中已经将文件的两个新版本连同一开始的内容保存下来了:


再将文件恢复到第一个版本:


同样方法也可以回复到其它版本。需要记住的是几个版本的文件 SHA-1 值可能与实际的值不同,其次,存储的并不是文件名而仅仅是文件内容。这种对象类型称为 blob 。通过传递 SHA-1 值给cat-file -t 命令可以让 Git 返回任何对象的类型

PS:先介绍这些,关于git对象的存储等原理有兴趣的可以私信我。

你可能感兴趣的:(Git入门简单用法与Git对象原理)