一、Git 的安装

  • 下载地址:Git - Downloading Package
  • 安装过程,默认下一步即可。
  • 安装完成后,鼠标右键会出现Git Bash和Git GUI。

二、Git 初始化配置

  • 通过 Git bash Here 打开终端窗口,git --version 命令可以查看 git 版本信息。

  •  Git 提供了一个叫做 git config 的命令来配置或读取相应的工作环境变量。
  • 这些变量可以存放 在以下三个不同的地方:
    • /etc/gitconfig 文件:系统中对所有用户都普遍适用的配置。若使用 git config 时用 --system 选项,读写的就是这个文件。
    • ~/.gitconfig 文件:用户目录下的配置文件只适用于该用户。若使用 git config 时用 --global 选项,读写的就是这个文件。
    • .git/config 文件 当前项目的 Git 目录中的配置文件(也就是工作目录 中的 .git/config 文件)这里的配置仅仅针 对当前项目有效
    • 每一个级别的配置都会覆盖上层的相同配置。

用户信息的配置:

  • 第一个要配置的是你个人的用户名称和电子邮件地址。
  • 这两条配置很重要,每次 Git 提交时都会引用这两条信息,说明是谁提交了更新。
git config --global user.name "damu" 
git config --global user.email damu@example.com
  • 要检查已有的配置信息,可以使用 git config --list 命令。

  • 删除配置信息
git config --global --unset user.name

三、Git 的三个区域

Git本地有三个工作区域:

  • Workspace:工作区,就是你平时存放项目代码的地方;

  • Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表的信息,一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index);

  • Repository:版本库(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。

如果在加上远程的 git 仓库(Remote Directory)就可以分为四个工作区域。

  • Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换;

文件在这四个区域之间的转换关系如下:

在这里插入图片描述

四、初始化新仓库

命令:
git init
解析:
  • 要对现有的某个项目开始用 Git 管理,只需到此项目所在的目录,执行:git init。

作用:
  • 初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。

  • 不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。

.git 目录:

  • hooks目录包含客户端或服务端的钩子脚本;
  • info包含一个全局性排除文件;
  • logs保存日志信息;
  • objects目录存储所有数据内容;
  • refs目录存储指向数据的提交对象的指针(分支);
  • config文件包含项目特有的配置选项;
  • description:用来显示对仓库的描述信息;
  • HEAD文件指示目前被检出的分支;
  • index文件保存暂存区信息;

五、Git底层命令

1. git 对象

  • Git 的核心部分是一个简单的键值对数据库。
  • 你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索该内容。

1.1 向数据库写入内容并返回对应键值

命令:

echo 'test content' | git hash-object -w --stdin
  • 管道命令 “|”,作用就是将前一个命令的输出作为后一个命令的输入。
  • hash-object :将输入内容转化为 blob 类型的 hash 键值对。
  • -w 选项指示 hash-object 命令存储数据对象;若不指定此选项,则该命令仅返回对应的键值。
  • --stdin standard input )选项则指示该命令从标准输入读取内容; 若不指定此选项,则须在命令尾部给出待存储文件的路径。
git hash-object -w 文件路径
返回:
  • 该命令输出一个长度为 40 个字符的校验和。 这是一个 SHA-1 哈希值。

1.2 查看 Git 是如何存储数据

命令:

find .git/objects -type f

返回:

  • 这就是开始时 Git 存储内容的方式:一个文件对应一条内容。
  • 校验和的前两个字符用于命名子目录,余下的 38 个字符则用作文件名。

1.3 根据键值拉取数据

命令:

git cat-file -p f62bc814852d91bf21d66ad54472edad9f882729
  • -p 选项可指示该命令自动判断内容的类型,并为我们显示格式友好的内容。

返回:

  • 对应文件的内容。

补充:-t 选项可以让 Git 告诉我们其内部存储的任何对象类型。

1.4 对一个新文件进行简单的版本控制

  • 创建一个新文件并将其内容存入数据库
echo 'wyh v1' > test.txt
git hash-object -w test.txt

  • 向文件里写入新内容,并再次将其存入数据库
echo 'wyh v2' > test.txt
git hash-object -w test.txt

  • 查看数据库内容
find .git/objects -type f

问题:
  1. 记住文件的每一个版本所对应的 SHA-1 值并不现实。
  2. Git 中,文件名并没有被保存——我们仅保存了文件的内容。
解决方案:树对象

2. 树对象

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐