目录
- 1.什么是仓库?
- 2.认识工作区、暂存区、版本库
- 3.认识 .git
- 1.index
- 2.HEAD && master
- 3.objects
- 4.总结
1.什么是仓库?
- 仓库:进⾏版本控制的⼀个⽂件⽬录
2.认识工作区、暂存区、版本库
-
工作区:在电脑上写代码或⽂件的⽬录
-
暂存区(
stage
/index
):⼀般存放在.git
目录下的index
文件(.git/index
)- 暂存区有时也叫作索引(
index
)
- 暂存区有时也叫作索引(
-
版本库(仓库):
.git
不算⼯作区,⽽是Git的版本库- 这个版本库⾥⾯的所有⽂件都可以被Git管理起来,每个⽂件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”
-
⼯作区、暂存区和版本库之间的关系
- 在创建Git版本库时,Git会⾃动创建⼀个唯⼀的
master
分⽀,以及指向master
的⼀个指针叫HEAD
- 当对⼯作区修改(新增、修改、删除)的⽂件执⾏
git add
命令时,暂存区⽬录树的⽂件索引会被更新 - 当执⾏提交操作
git commit
时,master分⽀会做相应的更新- 可以简单理解为暂存区的⽬录树才会被真正写到版本库中
- 可以简单理解为暂存区的⽬录树才会被真正写到版本库中
- 在创建Git版本库时,Git会⾃动创建⼀个唯⼀的
-
综上:通过新建或粘贴进⽬录的⽂件,并不能称之为向仓库中新增⽂件,⽽只是在⼯作区新增了⽂件,必须要通过使⽤
git add
和git commit
命令才能将⽂件添加到仓库中进⾏管理 -
是谁在维护版本呢?
objects
对象库在维护,里面存放了很多git对象- 修改的工作区内容会写入对象库的一个新的git对象中
- 每一个git对象,都描述了此次
git add
后所修改的内容
3.认识 .git
1.index
index
:暂存区,git add
后的内容都是添加到这里的
2.HEAD && master
HEAD
:默认指向master
分支的指针$ cat .git/HEAD ref: refs/heads/master
- 默认的
master
分支,里面保存着最新的commit id
$ cat .git/refs/heads/master d74fd33ce217d9d6aefab18c84a3c4fb542d293e
3.objects
objects
为Git的对象库,⾥⾯包含了创建的各种版本的库对象及内容- 当执⾏
git add
时,暂存区的⽬录树被更新,同时⼯作区修改(或新增)的⽂件内容被写⼊到对象库中的⼀个新的对象中,位于".git/object
s"⽬录下objects ├── 78 │ └── c38e74ed7bad28f712b4b214fcc1f1dc2814b6 ├── 7a │ └── 535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 ├── 84 │ └── ef513c15700a4fc435dd6e6ac284a49d7901ac ├── 8a │ └── e26cc86d8c9213c406383181dad60050e15df6 ├── 99 │ └── a6aad83baf0a7fdb6cf394f11ccde7845bcb1d ├── d7 │ └── 4fd33ce217d9d6aefab18c84a3c4fb542d293e ├── info └── pack
- 查找
object
时要将commit id
分成2部分,前2位是⽂件夹名称,后38位是⽂件名称 - 查看版本库对象的内容:
git cat-file
$ git cat-file -p d74fd33ce217d9d6aefab18c84a3c4fb542d293e tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac parent 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 author DieSnowK <23336666@qq.com> 1721717265 +0800 committer DieSnowK <23336666@qq.com> 1721717265 +0800666.txt
- 其中
tree 84ef513c15700a4fc435dd6e6ac284a49d7901ac
$ git cat-file -p 84ef513c15700a4fc435dd6e6ac284a49d7901ac 100644 blob 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d 233.txt 100644 blob 78c38e74ed7bad28f712b4b214fcc1f1dc2814b6 666.txt
- 任意查看其中的一个文件,发现是对每个文件做的修改,被Git记录了下来
$ git cat-file -p 99a6aad83baf0a7fdb6cf394f11ccde7845bcb1d SnowK
4.总结
index
:暂存区,git add
后会更新该内容HEAD
:默认指向master
分⽀的⼀个指针refs/heads/master
:⽂件⾥保存当前master
分⽀的最新commit id
objects
:包含了创建的各种版本库对象及内容- 可以简单理解为存放了Git维护的所有修改