版本控制(Git)
版本控制系统(VCSs)是一类用于追踪源代码(或其他文件、文件夹)改动的工具。这些工具可以帮助我们管理代码的修改历史;不仅如此,它还可以让协作编码变得更加方便。VCS通过一系列的快照将某个文件夹及其内容保存了起来,每个快照都包含了文件或文件夹的完整状态。同时它还维护了快照创建者的信息以及每个快照的相关信息。
Git的数据模型
快照
Git将顶级目录中的文件和文件夹作为集合,并通过一系列快照来管理其历史记录。在Git术语中,文件被称作Blob对象(数据对象),也就是一组数据。目录则被称为”树“,它将名字与Blob对象或树对象进行映射(使得目录中可以包含其他目录)。快照则是被追踪的最顶层的树。
历史记录建模:关联快照
在Git中,历史记录是一个由快照组成的有向无环图。
数据模型及其伪代码表示
一种简洁的历史模型:
type blob = array<byte>
type tree = map<string, tree | file>
type commit = struct{
parent:array<commit>
author:string
message:string
snapshot:tree
}
对象和内存寻址
Git中的对象可以是blob、树或提交
type object = blob | tree | commit
Git在储存数据时,所有对象都会基于它们的SHA-1哈希进行寻址
Blobs、树和提交都一样,它们都是对象。当它们引用其他对象时,它们并没有真正的在硬盘上保存这些对象,而是仅仅保存了它们的哈希值作为引用
引用
引用是指向提交的指针。与对象不同的是,它是可变的(引用可以被更新,指向新的提交)
例如,master
引用通常会指向主分支的最新一次提交。
仓库
粗略的给出Git仓库的定义:对象和引用
暂存区
暂存区是一个和数据模型完全不相关的概念
Git的命令行接口
- 基础
- 分支和合并
- 远端操作
- 撤销
Git高级操作
杂项
- 图形用户界面
- Shell集成
- 编辑器集成
- 工作流
- GitHub
- Other Git 提供商