几张图让你彻底弄懂git工作流(一)

前提:现在好多开发者都用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工作流(二)》(未完)?

转载于:https://juejin.im/post/5afeb4a351882542b000c3e2

你可能感兴趣的:(几张图让你彻底弄懂git工作流(一))