全部的版本控制系统,其实只能跟踪文本文件的改动,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但无法跟踪文件的变化,只能把二进制文件每次改动串起来,例如记录图片从 100KB 改为了 120KB,可是并不知道具体文件改了什么。git
Microsoft 的 Word 格式是二进制格式,所以,版本控制系统是无法跟踪 Word 文件的改动的。github
Microsoft 开发记事本的团队使用了一个不合理的方法来保存 UTF-8 编码的文件,他们在每一个文件开头添加了 0xefbbbf(十六进制)的字符,建议使用Notepad++。算法
git存在一个.git文件,里面存储配置信息和分支,以及一个暂存区
在进行提交时
第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用git commit提交更改,实际上就是把暂存区的全部内容提交到当前分支。
而git diff是查看暂存区和工做区(实际文件夹内容)的区别,因此git add后git diff就再也不显示区分
因此咱们能够从暂存区、分支区、远程库 这三条途径来还原历史windows
分支其实是以图存储的,而所谓分支也及时master指针和其余分支指针的改动,在A、B分支不平行时则直接改动指针完成分支合并,若存在平行段,会要求显示的指定冲突部分如何肯定。数据结构
git中在Objects文件夹存储组件,并利用hash算法SHA-1根据文件内容组件名,即造成键值对管理。
组件分四种:编码
Tag 标签命令行
Git中存在两种对象 - 松散对象和打包对象。
简单的理解就是松散对象存储使用代价低,用来存文件的改变,打包对象代价高用来存储一系列松散对象hash-offset用以组合成文件。
Git使用SHA-1值的前两个字符做为子目录名字, 因此一个目录中永远不会包含过多的对象. 文件名则是余下的38个字符。版本控制
github是基于git的面向开源及私有软件项目的托管平台,比较方便的github使用方式是利用github推出的GUI GithubDesktop。指针