前提:现在好多开发者都用git作为版本控制,虽然很多人都在用,但是并不是所有人都知道为什么这样用。
git简史
git属于分布式版本控制,客户端并不只是提取最新版本文件快照,而是把代码仓库完整的镜像下来
每一次的提交操作都是对代码仓库的完整备份
1.git使命
Git在设计之初就是为了搞定linux内核这种巨无霸而设计的,所以制定了自己的使命
- 速度
- 简单的设计
- 对非线性开发模式的强力支持(允许成千上万个并行开发的分支)
- 完全分布式
- 有能力高效管理类似Linux内核一样的超大规模项目(速度和数据量)
2.git优点
Git作为分布式版本控制的代表,优点如下:
- 快
- 本地仓库
- 轻量级分支
- 分布式
- 各种工作流
3.谁在使用
经过10多年的发展,目前绝大部分开源项目都在使用Git,目前Git已经处于霸主地位
- Git
- Linux Kernel
- Eclipse
- Perl
- Android
- TypeScript
- webkit
git基础
文件流转 | 文字描述(取) |
---|---|
文件三种状态: ==已提交(committed)==--该文件已经被安全地保存在本地数据库中 & ==已修改(modified)==--修改了某个文件,没提交保存 & ==已暂存(staged)==--已修改的文件放在下次提交时要保存的清单中 每个项目都有一个 Git 目录: git clone 下的.git目录就是,每次克隆镜像仓库时,实际拷贝的是.git目录里面的数据 文件流转的三个工作区域: 工作目录--从项目中取出某个版本的所有文件和目录,开始后续工作 暂存区域--简单文件,一般放在.git目录中 基本的 Git 工作流程(左图): 在工作目录中修改某些文件。对修改后的文件进行快照,然后保存到暂存区域。提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。 |
文件状态 | 文字描述(修) |
---|---|
工作目录下的文件状态: 已跟踪:本来纳入版本控制管理文件,上次快照中有他们的记录,工作一段时间状态可能是未更新,已修改,已放在暂缓区 未跟中(除已跟踪):既没有上次更新时的快照,也不在当前的暂存区域 第一次克隆仓库时工作目录所有的文件属于已跟踪,未修改 相关状态命令 git status检查当前文件状态 git add 跟踪新文件 cat .gitignore .[oa] Git 忽略所有以 .o 或 .a 结尾的文件 git diff查看尚未暂存的文件更新了哪些 git diff --cached 查看已经暂存起来的变化 git commit提交更新 git rm从已跟踪文件清单中移除 git mv from to移动文件===mv A B , rmA ,git addB Git 时的文件状态变化周期(左图): 在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,直到最后一次性提交所有这些暂存起来的文件,如此重复。 |
存储快照 | 文字描述(存) |
---|---|
直接记录快照,而非差异比较: 1.git并不保存前后变化的差异数据,更像是吧变化文件作快照后,记录在一个微型文件系统中。 2.每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。 近乎所有操作都是本地执行: 在Git中的绝大多数操作都只需要访问本地文件和资源,不用连网 时刻保持数据完整性: 1.在保存到 Git 之前,所有数据都要进行内容的校验和(checksum)计算,并将此结果作为数据的唯一标识和索引 2.Git 的工作完全依赖于这类指纹字串,所以你会经常看到这样的哈希值。实际上,所有保存在 Git 数据库中的东西都是用此哈希值来作索引的,而不是靠文件名。 3.文件在传输时变得不完整,或者磁盘损坏导致文件数据缺失,Git 都能立即察觉。 多数操作仅添加数据: Git 操作大多仅仅是把数据添加到数据库。 |
更多内容请查看《几张图让你彻底弄懂git工作流(二)》 😊
文章出处:起底Git & Pro Git