1.什么是Git?
1.一个版本控制工具
2.Git中区域分为哪几块?有什么作用?
1.工作区 存储当前工作代码
2.暂存区
3.版本区 所有版本存储的地方
3.在一个文件中,如何实现对文件的管理?
1.所有文件成为git对象,则纳入git的管理范围。
2.将多个对象统一起来,作为树对象。
3.给树对象加上包装,注释、作者,成为提交对象。
4.Git底层命令实现了什么功能?它们的高层表现是怎么样的?
1.Git通过对每一个文件,作一个hash,保存于.git/objects/中,代表数据
具体实现方法:git hash-object filename [-w] -w代表write,写入数据库,没有则仅返回这个文件的哈希值
注:每一个文件的哈希值不同(只要有任何一点点不同,都会不同)
结果:文件成为git对象,纳入Git的管理范围。
image
2.Git将hash值与filename打包,作为索引,称作index,存入暂存区。(在.git下有index文件)
一方面通过filename对应工作区文件,一方面通过hash值找到该文件。
具体实现方法:git update-index --add --cacheinfo 文件类型[100644] hash值 filename
image
3.当暂存区具有一定量的index以后(随便多少),将索引打包,生成树对象,管理一系列文件
具体实现方法:git write-tree
image
4.给树对象打包,加上信息,成为一个文件包,称作提交对象
具体实现方法:git commit-tree 树的哈希值 -m "注释"
image
注1:由于提交的时间不同,相应提交对象生成每一次并不相同。
注2:此处还不涉及关于暂存区到版本库的高层管理,所以可以多次生成提交对象(但事实上如果相同,并没有意义)
5.这些命令的高层表现
1+2.git add ./为全部文件 filename为单个文件
3+4.git commit -m "xxx"
5.Git的分支是什么?为什么凭借分支,能够实现版本控制?
分支是指向提交对象的指针。切换分支即将版本加载到工作区与暂存区
1.所有文件都以git文件形式存储,单个文件的所有版本都具有存储。
2.暂存区将 文件版本hash 与 filename 对应
3.commit对象是一个完整的版本。
4.通过更改分支,可以实现版本控制。
具体实现:git branch 提交对象哈希值 name --->在某个提交对象(版本),创建指针。
注:请按照规范使用分支,否则将造成一些干扰(这种干扰理解的意义不大)
6.Git在这个基础上还有哪些功能?(都是在前面的基础上进行延伸,不再赘述)
Tag:不会动的指针
stash:临时存储当前状态
reset:选择特定版本的特定文件(或者全部)进行重置
注:想要学习Git具体命令,请转至bilibili视频区搜索Git选择合适的视频进行教学。或者学习官方推荐教材《Pro Git》
网友评论