git基本概念

对象名:使用对象内容做SHA1哈希计算得来,40位

对象包括三个部分:类型、大小和内容

4种类型:blob、tree、commit和tag

  • blob用来存储文件数据,通常是一个文件
  • tree像目录,管理一些tree或blob(像文件和子目录)
  • commit指向tree,它用来的标记项目某一个特定时间点的状态。它包括时间点的元数据,如时间戳、最近一次提交的作者、指前上次提交的指针等等。
  • tag用来标记某一个提交的方法

Blob对象
一个blob对象通常用来存储文件的内容
blob对象结构

查看一个blob对象里的内容
git show 6ff87c4664
一个blob对象就是一块二进制数据,它没有指向任何东西或者有任何属性,甚至连文件名都没有。
因为blob对象内容全部都是数据,如两个文件在一个目录树(或是一个版本仓库)中有同样的数据内容,那么它们将会共享同一个blob对象。

Tree对象
tree对象
git show sha1也可以查看tree对象,但是git ls-tree sha1 可以查看更详细的信息。
一个tree对象可以指向(reference): 一个包含文件内容的blob对象, 也可以是其它包含某个子目录内容的其它tree 对象. Tree对象、blob对象和其它所有的对象一样,都用其内容的SHA1哈希值来命名的;只有当两个tree对象的内容完全相同(包括其所指向所有子对象)时,它的名字才会一样,反之亦然。这样就能让Git仅仅通过比较两个 相关的tree对象的名字是否相同,来快速的判断其内容是否不同。

commit对象
commit对象
指向一个tree对象,并且带有相关的描述信息

–pretty=raw 参数配合git show或者git log去查看某个提交。

对象模型,blob、tree和commit怎么组合到一起的?
这里写图片描述

这里写图片描述

标签对象Tag
这里写图片描述
一个标签对象包括一个对象名(译者注:就是SHA1签名), 对象类型, 标签名, 标签创建人的名字(“tagger”), 还有一 条可能包含有签名(signature)的消息. 你可以用 git cat-file 命令来查看这些信息:

GIT目录与工作目录

Git目录是为你的项目存储所有历史和元信息的目录 - 包括所有的对象(commits,tress,blobs,tags), 这些对象指 向不同的分支.
Git工作目录存储着你现在签出(checkout)来用来编辑的文件. 当你在项目的不同分支间切换时, 工作目录里 的文件经常会被替换和删除. 所有历史信息都保存在 ‘Git目录’中 ; 工作目录只用来临时保存签出(checkout) 文 件的地方, 你可以编辑工作目录的文件直到下次提交(commit)为止.
备注: ‘Git目录’ 一般就是指项目根目录下的’.git’目录.

GIT索引

Git索引是一个在你的工作目录和项目仓库间的暂存区(staging area). 有了它, 你可以把许多内容的修改一起提交 (commit). 如果你创建了一个提交(commit), 那么提交的是当前索引(index)里的内容, 而不是工作目录中的内容.

使用 git status 命令是查看索引内容的最简单办法. 你运行 git status命令, 就可以看到: 哪些文件被暂存了(就是 在你的Git索引中), 哪些文件被修改了但是没有暂存, 还有哪些文件没有被跟踪(untracked).

例子:
假设有三个文件:
test.txt 为工作目录新增文件(Untracked files)。
Server.java文件为修改并加入到索引中文件(Changes to be committed)。
Client.java文件为修改但还没加到索引中文件(Changes not staged for commit)。

则git status得到如下:
这里写图片描述

git commit 会将索引中的对象提交,但不会提交已修改但为添加到索引的对象。如例中,会将Server.java提交,但Client.java不会被提交。
git commit -a 所有内容被修改的文件(不包括工作目录新创建的文件)都添加到索引中并提交。如例中,会将Server.java和Client.java都提交。

Git跟踪的是内容不是文件
跟踪的是内容不是文件 很多版本控制系统都提供了一个 “add” 命令:告诉系统开始去跟踪某一个文件的改动。但是Git里的 ”add” 命令 从某种程度上讲更为简单和强大. git add 不但是用来添加不在版本控制中的新文件,也用于添加已在版本控制中 但是刚修改过的文件; 在这两种情况下, Git都会获得当前文件的快照并且把内容暂存(stage)到索引中,为下一次 commit做好准备。

GIT分支
git branch -a 查看所有分支,带星号表示当前分支
git checkout branchname 切换分支

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值