Git Simple Usage
本文主要对Git的基本概念做一个总结。
安装Git
下载初步使用
git init: initialize git's directory # 提交需要一个名字 # 全局配置 git config --global user.name [your_name] # 局部配置,只对本工程 git config user.name [your_name] # 查看配置 git config -l # 新建一个文件, 加入全部文件 git add . # 状态说明 git status # 提交, 输入commit信息, git commit -m '输入commit信息' git commit # 查看commit情况 git log
Git 的关键核心概念
工作区: 电脑里可以看到的目录
版本库(Repository)
Git工作方式
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
- 传统版本控制工具工作方式
只记录更改的部分 - Git工作方式
记录所有文件全貌
可能空间很大?空间换时间
只记录改动文件的全貌,不记录文件的本身,使用指针指向没有改动 的文件
- 传统版本控制工具工作方式
几乎所有操作都本地执行
Git一般只添加数据,一旦提交,不用担心数据丢失,有后悔药吃
四种基本对象类型
- Blob
每个blobs代表一个(版本)文件,只包含文件的数据,忽略元数据,如名字、路径和格式 - Tree
每个trees代表一个目录,包含此目录下的blobs、子目录、文件名、路径等元数据。对于子目录的目录,git相当于存储了嵌套的trees - Commit
每个commit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当次提交时的目录信息。一个commit可以有多个(至少一个)父commits。 Tag
tag用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次commit。相当于给上面的一个commit打上一个标记,代表一个里程碑。思考:
Trees数据、Commits提交行为、Tags版本分离,就像设计模式的单一职责
- Blob
SHA1哈希值
- Git中每一个“对象名”都是对“对象”内容做SHA1(SHA1是一种密码学的哈希算法)哈希计算得来的,所以对于内容不同的对象,会有不同的SHA1哈希值
- git log
查看commit的哈希值 - 使用哈希值(16进制)的前两位作为文件夹名称(oxff最多256个文件),后面的位数作为文件名名称
- ./git/objects 对象存储位置
- git cat-file -t 哈希值
查看对象类型 - git cat-file -p 哈希值
查看对象内容 - 对象以二进制存储,所以要使用cat-file命令
- 引用解析器 git rev-parse Head
头部总是指向当前工作的commit - git init 发生什么了? git add 发生了什么? git commit 发生了什么?