git使用40个16进制字符的SHA-1 Hash来唯一标识git对象
例如:e98757d0598ab6eeaf1df0d78dd00826048bd80b
git中有四种对象:
1.blob:表示文本文件,二进制文件,连接文件
2.tree:表示目录
3.commit:大多是情况下表示一个历史提交
4.tag:指定一个固定的历史提交
四种对象之间的关系:
一个tag指向一个commit,一个commit指向一个tree对象,而一个tree对象里面可以包含其他的tree对象或者是blob对象。 那么我们说commit指向的这种树结构,就代表着你提交的时候工作区的某一个状态。那么对这些相关内容进行了SHA-1 Hash之后就可以得到他们的唯一标识。git只关心文件的内容 如果有两个文件有相同的内容,那么他们会指向同一个blob对象,而向文件名这样的其他信息会存储到tree对象里面。
有了这些对象之后我们需要一个git仓库;来对这些对象进行存储和操作。
获取git仓库的方法:
仓库分为两种:(是否含有工作区)
裸仓库:不带工作区,通常用在服务器上方便用户之间进行协作
1.git init:初始化一个仓库
2.git clone:克隆一个git仓库
git基本的工作流程:
git仓库又是那个区域:
1.工作区:编译代码的地方,维护这一个树形结构。
2.历史仓库:commit指向的一个树形结构
3.暂存区(staging area):相当于工作区和历史提交中间的一个缓存,它代表的是你要提交的一个状态,维护的是一个虚拟的树形结构。
git的工作就是围绕着这三个区域进行的:
从工作区添加文件到暂存区,然后把在存取整体的状态提交的历史记录里面。然后我们还可以吧历史记录里面的文件检出(checkout)到暂存区和工作区间。大多数时间我们都是把往暂存区中添加东西然后把暂存区提交到历史记录里面。对应的就是:git add(-A 将整个工作区添加到暂存区)和git commit 这个两个命令。
如何查看工作区和暂存区的区别,来确保我们的提交是我们需要的。可以使用git status命令。
从暂存区中删掉我们不需要的东西:git rm(同时把你工作空间和暂存区中的文件一起删除掉)
在工作区中重命名文件或者是移动文件然后再把它们添加到暂存区中:git mv(一系列操作的集合:首先在工作区重命名或移动文件建,然后在暂存区删除已有的文件,最后添加新文件到暂存区)
gitignore:确保工作区中的一些不希望提交的文件不被添加到暂存区,在仓库的顶层目录创建.gitignore文件,可以在里面记录不需要被提交的文件:
*.[oa]表示以.o或者.a结尾的文件不被添加到暂存区
*.~中间文件 !test.a表示test.a不被忽略(如果文件名以!开始,使用\!test.a)
如果我们要屏蔽foo/这个文件目录的话我们就屏蔽不了也叫foo的文件了
**/res表示当前目录或者是子目录中的res文件