Git本地操作,Add commit原理
Git安装(本地演示版本回退)
一:前提(https://www.cnblogs.com/hzcya1995/p/13302441.html)
远程仓库一般支持两种协议:SSH和HTTPS,SSH协议只认机器,HTTPS协议只认账号;也即为:如果使用SSH操作远程仓库的话,我们需要使用公钥和私钥对来做权限的认证,如果使用HTTPS操作远程仓库,则需要使用账号密码来做权限的认证。无论是公钥私钥对,还是账号密码,都只做权限的认证;但是远程仓库里需要记录这些提交记录是由谁来完成的;所以我们需要给本地的git设置用户名和邮箱,用于从本地仓库向远程仓库提交记录时,在远程仓库记录下这些操作是由谁来完成的。
二:操作
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
三:疑问
1、为什么要配置用户名和邮箱?
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
2、配置的用户名和邮箱对push代码到远程仓库有什么影响?
首先,配置的用户名和邮箱对push代码到远程仓库时的身份验证没有作用,即不用他们进行身份验证;他们仅仅会出现在远程仓库的commits里。
其次,按正常操作来说,你应该配置你的真实用户名和邮箱,这样一来在远程仓库的commits里可以看到哪个操作是你所为。
最后,这个用户名和邮箱是可以随便配置的(不提倡),如果你配置的邮箱是github里真实存在的邮箱,则commits里显示的是这个邮箱对应的账号;如果配置的邮箱是一个在github里不存在的邮箱,则commits里显示的是你配置的用户名。
Git Init
- config 本地:用户名/邮箱
- .gitconfig 全局配置文件 一般在C盘 user目录下
Git Add .(create/update)
-
工作区内容的更改,git可以检测到。具体通过git status 查看,但此时.git文件并没有发生改变
-
add以后, .git 生成object文件和index文件
-
object 文件 可以通过 git cat-file -t fileName 查看类型 通过git cat-file -p fileName缩写 查看内容
-
由此可见,add命令 缓存区生成git对象blob object:存储文件内容
-
index:通过git ls-files -s 查看 权限码 blob对象名 文件名
100644 f09e9c379f5fe8f4ce718641c356df87906d87a6 0 hello.txt
100644 f09e9c379f5fe8f4ce718641c356df87906d87a6 0 hello1.txt
-
此时工作区和索引区同步
-
工作区新建文件:git status:untracked files
-
工作区文件内容修改:git status: changes not staged for commit
Git Commit
-
命令行解读 [master (root-commit) c74a772] 1st
master分支
commit对象
root代表第一次
c74a772对象的hash值
1st注释 -
通过命令git cat-file -t c74a772查看发现是个
commit object -
通过命令 git cat-file -p c74a772查看内容:
tree 3902a7cab85666335ef5ac8e090e0d6c67885a7a
author demo <demo@demo,com> 1609747273 +0800
committer demo <demo@demo,com> 1609747273 +0800
1st
-
查看3902a7cab85666335ef5ac8e090e0d6c67885a7a:
100644 blob f09e9c379f5fe8f4ce718641c356df87906d87a6 hello.txt
100644 blob f09e9c379f5fe8f4ce718641c356df87906d87a6 hello1.txt
-
目前目录结构 commit-->tree(存储对应index区域的内容)-->blob对象-->内容更新
-
head-->当前分支最新节点-->存储最新commit
-
初次提交 根目录下的更新以及新建 更目录下新建文件夹,在新的文件夹里建立文本文件 目录树概览