Git
-
安装与配置
-
安装好之后打开bash.exe配置用户名和邮箱
-
用户名
git config --global user.name "LLY"
-
邮箱
git config --global user.email [email protected]
-
global可以换成system或不写
global表示当前用户的配置
system表示这台电脑中所有用户的配置
不写表示当前项目的配置
-
-
查看配置
- 所有配置:git config --list
- 电脑配置:git config --system --list
- 用户配置:git config --global --list
-
-
Git基本概念
-
区域
- 工作区:在工作区中做的所有更改不会被git管理
- 暂存区:把工作区中的修改放到暂存区
- 版本库:当暂存区中的内容觉得足够多了,把暂存区的内容提交到版本库
-
对象
- Git对象
- 树对象
- 提交对象
-
.git目录
git init:创建git项目
也可以通过克隆来创建Git项目:git clone [url地址]
在一个项目文件夹中打开Git Bash Here使用git init命令,然后会创建一个.git文件夹,表示这个项目被gti管理
- hooks:包含客户端或服务端的钩子脚本
- info:包含一个全局性排除文件
- objects:存储所有数据内容
- refs:存储指向数据(分支)的提交对象的指针
- config:项目特有的配置选项
- HEAD:文件指示目前被检测出的分支
- index:文件保存暂存区信息
-
git对象
Git的核心部分是一个简单的键值对数据库。可以向数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任意时刻再次检索这个内容
-
向数据库写入内容并返回对应键值
命令:echo "test content" | git hash-object -w --stdin
- -w:指示git hash-object命令存储数据对象;若不指定此选项,则该命令仅返回对应的键值。也就是说不指定这个选项的话不会向数据库里写内容,有了这个选项才会向git中写内容,内容保存在objects目录中的以hash码的前两位为名字的文件夹中。
- --stdin:指示该命令从标准输入读取内容,若不指定,则必须在命令尾部给出待存储文件的路径
-
根据键值拉取数据
命令:git cat-file -p hash码
-p:可指示该命令自动判断内容的类型,并为我们显示格式友好的内容
-t:把p换成t就是看存储内容的类型,结果为blob类型
返回:对应文件的内容
-
git对象存的是文件内容,不存文件名
-
-
看当前版本库中的内容
命令:find .git/objects -type f
-
树对象
树对象能解决文件名保存的问题,也允许 我们将多个文件组织 到一起。Git以Linux文件系统的方式存储内容。所有内容以树对象和数据对象(git对象)的形式存储。其中树对象就是目录项,数据对象(git对象)对应文件内容。一个树对象包含一条或多条记录(记录就是git对象。每条记录含有一个指向git对象或者子树对象的SHA-1指针,以及相应的模式、类型、文件名信息)。一个树对象也可以包含另一个树对象。
-
查看当前暂存区
git ls-files -s
-
构建树对象
利用update-index命令为一个文件的首个版本创建一个暂存区。并通过write-tree命令生成树对象。
命令(该命令也同时为这个git对象取了一个名字):
git update-index --add --cacheinfo 10064 hash码 文件名
文件模式为 100644,表示这是一个普通文件
100755,表示一个可执行文件
120000,表示一个符号链接
--add选项:因为此前文件并不在暂存区中,首次需要--add
--cacheinfo选项:因为要添加的文件位于Git数据库中,而不是位于当前目录下,所以需要--cacheinfo
生成树对象(将当前暂存区的快照生成到版本库中):git write -tree
-
git对象代表文件的一次次版本,树对象代表项目的一次次版本
-
-
提交对象
命令:git commit-tree
项目的每一个版本就是一个提交对象,提交对象包含一个树对象+作者+提交时间等注释信息
提交对象是链式的,所以可以找到之前的版本
本质上项目的快照是树对象
-
高层命令
-
git add ./
此命令看到的结果是将项目的修改添加到暂存区
但工作过程是先将内容生成git对象存放到版本库,然后再将git对象拿出来放到暂存区
跟踪新文件:git add 文件名
-
git commit -m "自己写的注释内容"
将暂存区的内容提交到版本库
-
工作目录下的文件状态
对于git来说只有两种状态
-
已跟踪
已跟踪又可以分为三种状态
- 已修改
- 已暂存
- 已提交
-
未跟踪
-
-
检查状态
- git status :查看当前工作空间中所有文件的状态
- git diff:查看当前哪些更新还没有暂存
- git diff --cached:有哪些更新已暂存起来准备好提交
- git diff --staged:与上条命令一样
-
忽略文件
即不相把某些文件纳入版本控制中,如数据库文件,临时文件,设计文件等
在项目主目录下建立“.gitignore”文件此文件中的内容有以下规则:
- 忽略空行或#开始的行
- *.txt 表示忽略所有.txt结尾的文件
- /temp 表示忽略/目录下的文件,但不忽略temph目录
- build/ 表示build目录下的所有文件
- doc/*.txt 表示忽略doc下的.txt结尾的文件,但不包括doc/server/arch.txt
-
分支
-
列出所有本地分支:git branch
-
列出所有远程分支:git branch -r
-
新建分支但依然停留在当前分支:git branch 分支名
-
新建分支并切换到该分支:git checkout -b 分支名
-
合并指定分支到当前分支:git merge 分支名
-
删除分支:git branch -d 分支名
-
切换到上一次分支:git checkout -
-
切换到指定分支:git checkout 分支名
-
将本地分支的内容推送到远程仓库:git push -u 远程仓库名 分支名
-u的作用:第一次提交使用的-u参数,那么后边的提交可以直接使用git push 来提交,不需要指定远程仓库名和本地分支名
-
合并指定分支到当前分支:git merge 指定分支名
-