Git 151220114 王宇鑫
历史 01 02 特性 CONTENT 目录 >> 03 方法论 04 原理
历史
版本控制 发展历程 经典计算机的数据是可以轻易复制的 同时,也能够轻易消去 由于修改文件造成数据的丢失,大家学会了版本控制
版本控制 发展历程 重复的工作应该抽象成指令集,交由计算机做 RCS
Centralized Version Control Systems 版本控制 发展历程 分工合作的需求逐渐增加 Centralized Version Control Systems
版本控制 发展历程 对数据访问、数据存储可靠性要求增加 牺牲空间 .git/ Distributed Version Control System
Git Linux 内核开源项目有着为数众多的参与者。 绝大多数的 Linux 内核维护工作都花在了提交补丁和保存归档的繁琐事务上(1991-2002年间)。 到 2002 年,整个项目组开始启用一个专有的分布式版本控制系统BitKeeper 来管理和维护代码。 到了 2005 年,开发 BitKeeper 的商业公司同 Linux 内核开源社区的合作关系结束,他们收回了 Linux 内核社区免费使用 BitKeeper 的权力。 这就迫使 Linux 开源社区(特别是 Linux 的缔造者 Linus Torvalds)基于使用BitKeeper 时的经验教训,开发出自己的版本系统。 《progit》page 11 速度 简单 并行开发 分布式 鲁棒性
特性
存储方式 记录变更
存储方式 快照
更多 本地执行 哈希校验 +而不是- 状态机 由于.git存储了整个数据库,所以不需要联网 保证数据库完整性 删除文件是添加一个新的快照,而不是真的删除文件 状态机 Committed Modified Staged Untracked
状态机 Git add Git add Git rm Git commit
分支
分支
分支
分支
分支 开销极低
一般的企业防火墙都会允许这些端口的数据通过。 远程仓库 git clone --bare <p> <p>.git ≈ cp -r <p>/.git <p>.git local 从文件系统读取 某些情况简单 某些情况复杂 ssh 利用ssh服务 简单、读写均可 难以控制权限 git Git协议守护进程 速度快 难以控制权限 http http协议 HTTP/S 协议被广泛使用 一般的企业防火墙都会允许这些端口的数据通过。
方法论
最简单的方法
流水线
集中式工作流
集成管理者工作流
司令官与副官工作流
典型场景
原理
Git 对象 Git 是一个内容寻址文件系统 { hash: content, … } echo 'test content' | git hash-object -w –stdin d670460b4b4aece5915caf5c68d12f560a9fe3e4 git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4 test content find .git/objects –type f .git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
树对象 Git 以一种类似于 UNIX 文件系统的方式存储内容 git cat-file -p master^{tree} 100644 blob a906cb2a4a904a152e80877d4088654daad0c859 README 100644 blob 8f94139338f9404f26296befa88755fc2598c289 Rakefile 040000 tree 99f1a6d12cb4b6f19c8655fca46c3ecf317074e0 lib
提交对象 commit object保存包括HASH在内的更多信息 git cat-file -p fdf4fc3 tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579 author Scott Chacon 1243040974 -0700 committer Scott Chacon 1243040974 -0700
Git 引用 Branch HEAD
最新版本保存完整内容,原始文件反而使用差异保存 包文件 对大文件的优化,记录变化 最新版本保存完整内容,原始文件反而使用差异保存
Reference
THANK YOU