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

  • 初次提交 根目录下的更新以及新建 更目录下新建文件夹,在新的文件夹里建立文本文件 目录树概览

posted @ 2021-01-04 18:09  Loading~  阅读(312)  评论(0编辑  收藏  举报