本文主要是介绍git# principle,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- git不保存增量,维护的是整个文件的快照,版本控制中保存的是快照的索引。如果文件没有变化,则用链接代替快照。
- git可以完全在本地操作。这种本地化大大加快了绝大部分操作的速度。
- 所有的标记都依赖校验和。版本有哈希值,文件也有哈希值。哈希是数据的唯一标识和索引,是git 的设计哲学。
- 每一个文件都处于如下4种状态中的一个:untracked, not-staged, staged, commited。untrucked 表示没纳入版本管理,not-staged表示没有把修改的文件暂存为下次需要提交的文件,staged就是已经暂存为下次commit需要提交的文件,committed就是已经提交的文件。所以,一般新添加一个文件就是untracked,修改文件没有add 就是not-staged状态,add之后就是staged状态。
- git有人称做是“内容寻址 (content-addressable) ”文件系统。
- git有所谓的底层命令 (Plumbing) 和高层命令 (Porcelain),我们日常使用的版本管理命令都是高层命令。
- git目录下的object存储的所有数据内容,并以键值对的方式存储。所有的内容都会计算成一个40个字节长的hash值,然后前两个字节工作目录,后38个自己为文件名。这个hash计算的不只是文件的内容,还有文件的类型,长度等拼接之后的数据,最后通过zlib压缩后才最终写入磁盘。文件类型除了blob外还可以是tree和commit。
- git对象和树对象。tree对象类似linux文件系统中的目录,blob对象类似于inode或者文件内容。
- git 引用,其实就是一个指针。指向某个hash链中的某个节点。底层的命令是update-ref
这篇关于git# principle的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!