git 工作区与暂存区
git-tree- 工作区: 就是我们看得到在写代码的地方
- 版本库: git维护的区域,存放在.git中
- git add 只是加到了stage中
- git commit 将stage存放到master中
.git目录分析
git init 时,Git 会创建一个 .git 目录
新建的git仓库的目录
- HEAD
- config
- description
- hooks
- info
- objects
- refs
老仓库的一个示例
- HEAD:
目前被检出的分支 例如:ref: refs/heads/f_zbq_gitlab-runner_20180817 - config:
项目特有的配置选项 - description:
gitweb用来显示对repo的描述 - hooks/:
钩子脚本,commit提交前后的执行 - info/:
全局性排除(global exclude)文件 .gitignore 中定义的文件 - objects/: 存储所有数据内容
- refs/:
存储指向数据(分支)的提交对象的指针 -
index :
保存暂存区信息 -
logs/ :
历史版本信息 - packed-refs:
- COMMIT_EDITMSG
git 对象内部存储
Git 是一个内容寻址文件系统,其实就是一个键值对数据库。
hash-object:命令存储数据对象,用值的hash值作为键存储数据
cat-file: 通过键获得值
git内部的数据组织为树结构,其中blob结构为文件,tree结构为文件夹,类似组合模式。
git-tree内部指针关系图:
git-refs
分析
概念分析:
-
工作区,stash区,master区
-
指针:指向对应的工作分支 | 提交分支,每一个分支又通过内部指针关系建立起饮用关系,形成如同树结构的形式。这里每一个数据都是通过hash保存的,键为SHA-1加密字符串。
-
引用:git通过命名引用来指向分支,功能和指针一样,但是提供了可读的理解字段。
正常提交过程:
- 1.编写本地的文件
- 2.将文件通过git add 加入到stash中
- 3.加入到stash中的所有文件通过git commit 加入到 master 中
- 4.git push 上传数据
回滚过程:
-
通过refs名定位到内部的refs,然后用引用代替掉HEAD,从而实现回滚
-
git diff 比较几个不同引用的内容值,输出结果
等等等等。。。。。
网友评论