git
2020-02-18 19:53:05 0 举报
AI智能生成
git
作者其他创作
大纲/内容
git
版本控制介绍
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
本地版本控制系统
用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间以示区别。
简单
会混淆所在的工作目录,一不小心会写错文件或者覆盖意想外的文件。
集中化的版本控制系统
Centralized Version Control Systems,简称 CVCS
CVS
SVN
都有一个单一的集中管理的服务器,保存所有文件的修订版本
而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新
好处
每个人都可以在一定程度上看到项目中的其他人正在做些什么
坏处
中央服务器的单点故障
分布式版本控制系统
Distributed Version Control System,简称 DVCS
Git
Bazaar
Mercurial
客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。
应用层命令
git diff
命令参数
不加任何参数 暂存区 工作区
git diff HEAD head指向的 工作区
git diff master master分支 工作区
git diff topic..master 比较两个分支
git diff refs/remotes/origin/master 远程master分支 工作区
git diff SHA1 SHA2 比较两个历史版本之间的差异
git diff --cached 已暂存准备提交的
结果格式
---代表源文件
+++代表目标文件
行标识
-开头的行,是只出现在源文件中的行
+开头的行,是只出现在目标文件中的行
空格开头的行,是源文件和目标文件中都出现的行
差异小结
差异按照差异小结进行组织,每个差异小结的第一行都是定位语句,
由@@开头,@@结尾。
git log
git log --pretty=oneline 文件名
git status
git status -s 以精简的方式显示文件状态
新添加的未跟踪文件前面有 ?? 标记
新添加到暂存区中的文件前面有 A 标记
修改过的文件前面有 M标记
左边的 M 表示该文件被修改了并放入了暂存区
右边的 M 表示该文件被修改了但是还没放入暂存区
底层命令
git cat-file
-p打印详细信息
-t打印对象的类型
git hash-object #获取指定文件的key,如果带上-w选项,则会将该对象的value进行存储
git update-index #将指定的object加入索引库,需要带上—add选项
—cacheinfo选项则指出该文件的文件类型,100644表示普通文件
底层数据结构
index文件
格式
Index魔数(DIRC)
版本号
暂存的文件个数
每个文件的时间戳和长度
每次调用git add命令,都会把add的文件的索引信息(时间戳和大小)进行更新
git status命令,则会把每一个文件的索引信息和上次提交的索引信息进行比较,如果发生了变化,就会显示出来
暂存操作
会对每一个文件计算校验和(SHA-1 哈希字串)
把当前版本的文件快照保存到 Git 仓库中(Git 使用 blob 类型的对象存储这些快照)
并将校验和加入暂存区域(每个文件对应的当前版本的key也会加入到index文件中)
文件特点
Index索引库记录从项目初始化到目前为止,项目仓库中 所有文件
对应的长度信息
最后一次修改时刻的时间戳
随着加入仓库中的文件不断增多,index文件也会不断增大。
点睛
文件存储风格
直接记录快照,而非差异比较
把数据看作是对小型文件系统的一组快照。
每次你提交更新,或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引
为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件
其他版本系统保存的信息看作是一组基本文件和每个文件随时间逐步累积的差异
近乎所有操作都是本地执行
要浏览项目的历史,Git 不需外连到服务器去获取历史
它只需直接从本地数据库中读取
如果想查看当前版本与一个月前的版本之间引入的修改
Git 会查找到一个月前的文件做一次本地的差异计算
而不是由远程服务器处理或从远程服务器拉回旧版本文件再来本地处
Git 保证完整性
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。
不可能在 Git 不知情时更改任何文件内容或目录内容
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)
看起来如同c7de934ce27a9422cdbf9ec844ed249900d18e9d
Git 数据库中保存的信息都是以文件内容的哈希值来索引,而不是文件名
三种状态
已提交(committed)
表示数据已经安全的保存在本地数据库中
已修改(modified)
已修改表示修改了文件,但还没保存到数据库中
已暂存(staged)
已暂存表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中
三个区域
工作区
对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区
是一个文件
保存了下次将提交的文件列表信息
一般在 Git 仓库目录中。 有时候也被称作‘索引
仓库
仓库目录是 Git 用来保存项目的元数据和对象数据库的地方
Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据
基本的 Git 工作流程
在工作目录中修改文件
暂存文件,将文件的快照放入暂存区域
提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录
0 条评论
下一页