Git学习之理解Git 仓库、工作目录以及暂存区域整理

一,概念

我们先来理解下Git工作区、版本库和暂存区概念

  1. 工作区(Working Directory)是对项目的某个版本独立提取出来的内容。这些从Git仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。

  2. 版本库(Repository)目录是Git用来保存项目的元数据和对象数据库的地方。这是Git中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。

  3. 暂存区域(Staging Area)是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。有时候也被称作“索引”,不过一般说法还是叫暂存区域。

二,存在形式

工作区:就是你在电脑里能看到的目录。

版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

暂存区:一般存放在 “.git目录下” 下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
参照图

三,文件在三个区域之间的转换

区域之间的转换
当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

当执行提交操作git commit时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

当执行 git reset HEAD命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。

当执行git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。

当执行 git checkout HEAD ." 或者 "git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

四,Git文件的生命周期

请记住,你工作目录下的每一个文件都不外乎这两种状态:已跟踪或未跟踪。 已跟踪的文件是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已放入暂存区。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。 初次克隆某个仓库的时候,工作目录中的所有文件都属于已跟踪文件,并处于未修改状态。

编辑过某些文件之后,由于自上次提交后你对它们做了修改,Git 将它们标记为已修改文件。 我们逐步将这些修改过的文件放入暂存区,然后提交所有暂存了的修改,如此反复。所以使用 Git 时文件的生命周期如下:

Git文件的生命周期

五,总结

工作区的文件有两种状态,一种为已跟踪状态,另一种为未跟踪状态。已跟踪状态的文件表示已经存入版本仓库中,未跟踪状态则还没有存入。所以一般使用Git的工作流程为:

  1. 在工作目录中修改文件
  2. 使用git add .命令,暂存文件,将未跟踪的文件和已修改的文件的快照放入暂存区域
  3. 使用git commit命令,提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录

参考文档
1. 菜鸟教程
2. Pro Git book

猜你喜欢

转载自blog.csdn.net/Miracle_Yan/article/details/80224839
今日推荐