博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/07/21 git基本应用(02)
阅读量:3925 次
发布时间:2019-05-23

本文共 6582 字,大约阅读时间需要 21 分钟。

git的对象类型,以及目录下的基本属性和说明

git目录中的内容变化后的追踪方式,工作目录一般以项目名称命名
在这里插入图片描述
可用直接yum安装,属于base仓库
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
创建一个目录作为项目
获取一个git的仓库,repo两种,第一种从头初始化创建,第二种把别人仓库拿过来
、从零开始创建用 git.init初始化一个git仓库,自动生成.git目录,git目录下会有很多内容,包括子目录
所有的对象都在objects目录下,多个文件如果属于同一个内容,可能会打包pack以后放在pack目录下
refs是引用,下面会有heads ,tags标签名称,
真正的分支branches,一个项目会有多个分支,主线分支称为master
在这里插入图片描述
基于稳定版,修改bug,继续提交做一个分支为特性开发,修bug,也是新起一个分支修改,毕竟也要添加新的代码,测试确定没问题了再确定到主干分支上,所以分支是还可以合并的,稳定版0.0.1的下一个版本0.0.2,这就叫branch
对于git而言开分支非常轻量,资源消耗非常小
也有可能 分支分开以后,从此一路狂奔,第一个分组织维护A类功能,第二个分支维护的是B类功能,分支也有可能不会合并1个项目可能会有很多很多的分支,
这些分支信息都在git库中,想为主干工作时,就需要把你的工作目录切换成主干,如果打算做新特性开发,就切换到dev分支上,主分支master
hotfix 修复分支,工作目录再某一时刻只能反应一个分支内容,所以当前的工作目录时服务于dev分支的,这里显示的内容都是dev分支的内容,也可用服务于master分支,分支的切换使用git的checkout,捡出分支,切换分支
在这里插入图片描述
最核心的组件有4类对象在这里插入图片描述 Git的对git的对象类型: .都保存再git/objects目录下
块(blob)对象:文件的每个版本表现为一个块(blob);
树(tree)对象:一个目录代表一层目录信息;
提交(commit)对象:用于保存版本库一次变化的元数据,包括作者、邮箱、提交日期、日志;每个提交对象都指定一个目录树对象;
标签(tag)对象:用于给一个特定对象一个易读的名称;

每个项目反应再工作目录中,这个目录有两部分组成

1.工作区(自己编辑文件的地方)
2.,git目录,是对应的版本库,如果克隆的别人的项目,应该有.git目录,直接就有,如果自己从头新建一个项目,就需要我们自己初始化这个目录来,
在这里插入图片描述
config 配置文件,,
head,hooks钩子(sample,可以理解为一些触发器,跟代码构建有关),info,objects,refs
工作区是我们真正工作的位置,一旦把内容编辑到工作区以后,就可以尝试把内容存到版本库里
工作目录中三个区,工作区,暂存区,对象库本地版本库
暂存区,索引文件
有两个区的版本再git版本库中
在这里插入图片描述
一个区域,对象库,
另外一个区域叫索引,也称为暂存区 state
在这里插入图片描述
**刚刚初始化的时候再工作目录创建两个文件,
**
在这里插入图片描述假如想要用版本库来追踪这两个文件,,就放到暂存区中,git add命令,可以实现把工作目录中的两个文件,添加到暂存区(索引),用于反应当前追踪的但还没提交的工作目录中的路径结构,
索引其实就是一个待提交的树状路径,保存是一个树状状态(目录子目录和文件内容,引用关系),但是这是一个未提交的状态信息,一旦提交就把索引中的目录路径,保存到对象库中去了,
因为提交本身也是个对象
在这里插入图片描述
**工作目录只要添加到了打算存储的对象当库,当前如果没有提交,待提交的树状结构就保存在索引(暂存区)当中,如果一旦使用git commit命令提交了,这个索引树状结构保存到对象库中,树状对象
**
在这里插入图片描述
这个是提交对象,提交本身要指向你的工作目录,根树
在这里插入图片描述
加入有文件改变了,再次还需要保存下来,一旦文件发生变化,就需要暂存了,暂存时对应的索引中,改变的文件指向了新对象,原有文件指向原有的
在这里插入图片描述
意味着索引这棵数所反映 的指向状态,跟上次提交已经不一样了,换一个颜色来表示,
假如现在再次提交,对象又保存到对象库里去了,因此现在有了两个树对象,不同的是
第一个树对象指向的是第一个版本
第二个数对象指的是A文件的第二个版本,B文件的第一版本
这时候的提交对象指向第二个数
在这里插入图片描述
第一个对象是第二个对象的前任
在这里插入图片描述
所以在三个区域中,文件可以通过git add把文件从工作目录添加到暂存区 ,使用git commit可以把文件从暂存区放到版本库中去 ,在版本库中,从而可以创建 ,两个对象至少,一个跟树对象,一个提交对象,
如果一个文件放到暂存区,现在不想要了,可以使用git rm --cached 撤回放在此前放在暂存区中的操作,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在有两个文件对象,有两个文件在工作区中,这两个文件要添加到版本库上,去追踪它们,如果想要版本库 中
git add 添加进来
man帮助,查看git-add是做什么的,add file contents to the index 只是放到缓存区里
在这里插入图片描述
在这里插入图片描述
**一次通常放一个文件,如果想要一下子把当前文件都放进去可以git -add +目录路径,会把指定目录下的所有文件,有些文件内容可能不想保存进去,
比如,vim编辑文件都会生成.xxx的临时文件,在.git目录下,创建一个.git ignore文件,里面列出哪些文件不需要存放到仓库里去,叫git的忽略文件
**
用于更新索引,,current content
根据当前工作目录中所发现的文件(会扫描工作区,),利用工作目录中的文件,去更新队员的暂存区,接下来可提交了,一般都是吧当前目录中 的所有内容通通都添加进去,不过有时候也可以是单独的文件单独添加
在这里插入图片描述
暂存区维持一个当前工作目录的快照。一旦放到暂存区,就把整个工作目录的文件放对象库中,被做成快照,这个快照并没有保存下来,可以删除,要提交就放到对象库中,
事实上暂存区也是个快照,主要目的就是为了下次的提交,在工作目录中做了任何改变,在真正提交之前,先试用add命令,先放到暂存区中,然后一并提交
在这里插入图片描述
这个add命令可以在提交哦之前执行多次,暂存的快照是可以多次提交之后更新的,对git-add的多次重复添加,仅仅是吧同一个文件后续的变化添加进来此前的暂存文件中去 ,如果每一次变化都放到同一个提交当中 ,
在这里插入图片描述
默认情况下git -add 命令不会忽略任何文件,如果想忽略,需要创建git-ignore文件
在这里插入图片描述
-a添加所有文件
在这里插入图片描述
现在去添加一个文件 .代表当前目录,这时候.git/objects就有两个路径,63,72在这里插入图片描述
objects目录下多了两个文件对象,其实就是文件内容的哈希码(还包括对象类型和对象大小)
如果改变文件内容
在这里插入图片描述在这里插入图片描述
改变一次可以再暂存一次
在这里插入图片描述在这里插入图片描述
文件内容不同,对象就发生了改变。,现在还没有提交就保存这么多版本,这里其实是可以允许反悔的,一个对象一旦放到对象库里去,除了手动删除,否则将会一直存在
所以每次暂存都会在object中创建对象
在这里插入图片描述
从名字看,blob文件对象和tree对象,并没有什么区别
还可以创建一个docs目录
在这里插入图片描述
应该作为新对象被创建出来,但是却没有
在这里插入图片描述
要想把目录保存下来,要在里面创建文件,也是一个文件,不然目录没有内容。,就无法形成哈希码
在这里插入图片描述
在这里插入图片描述
就多了一个文件对象,这个文件对象只是目录的
在这里插入图片描述
这个目录下的文件没有内容也是不会被形成哈希码的,要想保存就需要添加内容
在这里插入图片描述在这里插入图片描述在这里插入图片描述
空目录和空文件都不会放进来做对象存储的
任何有内容的东西才会被作为对象存储
在这里插入图片描述
索引的内容每一次随着add不断发生变化,可以使用git status 发生变化,如果没有创建分支,默认都是master
initial commit 首次提交,
不想要暂存某个文件目录,使用git rm --cached,文件删除命令,可以在三个区域中让你删除文件,与默认的rm命令有不同的地方
一旦提交了,在工作目录删除文件,是没有太大意义的,随时可以恢复回来,git rm 只删某个区域的文件
–cached 只从暂存区把文件 删除了,而不是删除工作目录中的内容的
在这里插入图片描述
删除文件,提示还有一个文件没暂存passwd,想要提交试用git add加进来
对于git,每一个人提价的时候,都需要标明个人信息,才能允许提交的

git有三个配置文件在这里插入图片描述

Git配置文件:git config

仓库特有:REPO/.git/config 仓库的 只对当前一个仓库有效
全局:~/.gitconfig, --global 全局的 当前用户的所有仓库都有效
系统:/etc/git/gitconfig, -system 系统级 对所有用户都有效
user.name, user.email

用户有很多仓库,每一个用户的配置对所有的仓库都有效,每一个仓库都有自己的专门配置

在这里插入图片描述在这里插入图片描述
作用范围越大最终生效的优先级越低,同一配置,系统有,仓库有,全局有,以仓库为准
为了能提交必须添加两项配置
user.name用户名,
user.email邮件地址
可以直接编辑文件来设定参数,也可以使用gitconfig命令
在这里插入图片描述
-l可以列出已有参数,这些内容可能是来自不同的配置文件
在这里插入图片描述
需要自己创建一个系统级的配置,现在还没有,所以上面这些配置来自于仓库配置文件
在这里插入图片描述
配置文件是一段段的INI格式的,user段的 name参数,user段的 email参数,用户名就就没必要配置成系统级的了,全局即可
全局的应该在用户的家目录下,自动生成.gitconfig文件
在这里插入图片描述
设定好了,接下来就可以提交了,查看 git-commit命令,把暂存区的快照存储到对象仓库中,并且将提交对象指向这个树,暂存区的是一个根树对象
-m提交注释,-F指定文件获取文件内容当提交注释,如果不给,git会打开一个编辑器,让你输入,
如果不想保存暂存区中的信息,使用-- no-status
-a/ --interactive进入交互模式
在这里插入图片描述
在这里插入图片描述
如果后面没有任何信息,回车会打开编辑器让你编辑
在这里插入图片描述
只提交了两个文件和docs下的changelog
在这里插入图片描述
又多了对象
在这里插入图片描述
其实有一个就是提交对象
其实实在master分支的首部,
在这里插入图片描述
真正的首部再head上进行定义的
在这里插入图片描述
提示工作目录没有README 和chhangelog,如何知道是根据你的最近一次提交跑来决定的,现在想要拿到这个文件,用git checkout,就能把文件恢复了
在这里插入图片描述
这些文件其实都在
在这里插入图片描述
git checkout 可以把某个文件剪出来
可以剪分支,剪提交
在这里插入图片描述
只要有仓库,这些文件其实都可以恢复过来的,恢复的是文件本身没有恢复暂存区,恢复暂存区就需要做分支切换
在这里插入图片描述
再master分支上,没什么需要提交的,clean表示所有内容跟你提交的都是一致的,没什么需要再更改的,刚才没提交的passwd就恢复不了
随意你提交什么就可以利用版本控制器恢复什么
在这里插入图片描述
但是只要提交过,这个passd其实再.git/objects目录下是存在的
在这里插入图片描述
但是没有一个分支可以反应出它,所以没办法使用checkout来剪出这个文件在这里插入图片描述

对象库:内容寻址系统;

打包文件:pack file

git ls-files:列出文件;

-s:列出暂存区(stage area)中的文件对象
git cat-file:查看文件;
-p:美观排版显示文件内容;
git hash-object:计算文件的hash码;
git write-tree:根据当前索引中的内容创建树对象;

列出暂存区文件,暂存区就是你工作目录的快照,添加文件,如果没有添加暂存区,暂存区里是没有的

status会提示你有个文件还没有添加
add 就添加到暂存区去了
添加之后在暂存区里就有group了
在这里插入图片描述
这里面的肯定有一个文件是group对象生成的,可以使用git-hash来计算文件的哈希ma
在这里插入图片描述
现在想要知道1D文件内容是什么,git cat-file 一般最小长度6个
在这里插入图片描述git write-tree:根据当前索引中的内容创建树对象;每一次提交都创建树对象,不想提交就创建树对象,给它保存到对象库里
在这里插入图片描述
git文件有三种分类
Git中的文件分类:
3类:
已追踪的(tracked):已经在版本库中,或者已经使用git add命令添加至索引中的文件;
被忽略的(Igored):在版本库中通过“忽略文件列表”明确声明为被忽略的文件;明确说明不要追踪的文件
未追踪的(untracked):上述两类之外的其它文件;在工作目录里有,但是还没有添加到暂存区里的

如果添加到仓库里,想要做额外操作在这里插入图片描述 add/rm/mv命令:

git add:暂存文件;
git ls-files:
默认显示索引中的文件列表的原始文件名;
-s:显示暂存的文件信息:权限、对象名、暂存号及原始文件名;
-o:显示未被追踪的文件;暂存区没有,但是工作目录里是有的

git rm:

git rm:删除工作目录中的文件,及索引中的映射;(对象库无论任何时候,都无法被删除,必须留着给我们恢复)
git rm --cached:只删除索引中的映射;
git mv:
git mv:改变工作目录中的文件名,及索引中的映射;重命名

直接用mv会提示是新文件,要想重命名,既要工作区重命名,又要暂存区重命名,git mv

在这里插入图片描述
当作同一个文件
在这里插入图片描述
所以放在git的文件就不能随意的重命名或者删除,必须使用git的专门的命令 git mv git rm

git checkout +标签名v0.1,要想给提交添加标签 git tag

在这里插入图片描述
在这里插入图片描述添加标签,git tag+tagname +添加到哪个提交上去,也可以在提交的同时创建标签
在这里插入图片描述
在这里插入图片描述
git log 查看最近一次提交的, commit +提交名,git tag 添加标签
!
查看标签在哪里
在这里插入图片描述
捡出结果,由于没有追踪,所以没有覆盖掉
工作区的文件反应的就是提交的文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加到暂存区了,现在想回到过去某个时刻,告诉了你readme是M修改状态,再次使用git status,可能需要区add readme
因为这个是存在的文件,就基于所谓的修改状态来进行描述
如果提交过了,goup和readme可能就是另外的状态
在这里插入图片描述
如果提交过了,goup和readme可能就是另外的状态
在这里插入图片描述
捡出0。1,文件内容就发生改变了在这里插入图片描述
所以提交过了,在对象库保存了,捡出提交的时候,要完整的反应出这个提交的内容来,现在的readme是没有第三行的
在这里插入图片描述
刚才的是暂存区的内容,是没有提交过
checkout 0.1其实就是i找对应标签指向的提交,就把或者提交树读出来
在这里插入图片描述
现在可以捡出0,3,readme就有第三行了
在这里插入图片描述
每一次提交都要指向前一次提交,其实有可能前任不止一个,分支是有可能合并的,这个提交的前任就有两个
在这里插入图片描述
分支是可以创建出和合并起来的,创建分支,使用branch命令或者 checkout -b,head就指向了这个新分支
在这里插入图片描述
接下来创建新内容,head就指向c2
在这里插入图片描述
还可以切换成master分支,使用checkout master
在这里插入图片描述
c1上面可以继续想外演进
在这里插入图片描述
默认分支是master
使用使用checkout -b 指明你的new branch
在这里插入图片描述
在这里插入图片描述
默认创建分支的时候是不会切换的
-l login
在这里插入图片描述
在这里插入图片描述
list 列出你的分支,创建一个分支,现在都属于当前的提交,创建分支的时候也可以从过去的位置开始
checkout是可以同时创建新分支,如果已经存在分支,可以直接切换
在这里插入图片描述
** 号所在的表示当前分支,还可以切换回master
创建分支和分支切换的简单使用逻辑,以后可以在一个分支上往下继续提交了
*
在这里插入图片描述
当前分支是master,创建一个文件,使用commit做一次新的提交
我们之前切换的时候v。0.1上,意味把v。0.2.0忽略掉了,等于往前开了一个新分支

在这里插入图片描述

每一次切换,当前工作目录反应的就是切换当前分支的那一次提交
在这里插入图片描述
分支也可以合并,使用git merge,一般是把外部的分支合并的当前分支上,以当前分支为准
在这里插入图片描述在这里插入图片描述
dev有group文件,master分支有issue,现在可以合并,这个合并会一定产生一个新提交的
在这里插入图片描述
所在master分支合并了dev来生成的
在这里插入图片描述
在这里插入图片描述
master分支是有0.2.0的
在这里插入图片描述
这个master 已经是把dev合并后的master了,合并了的前任有两个了在这里插入图片描述

转载地址:http://uckgn.baihongyu.com/

你可能感兴趣的文章
Flash 生命终止,HTML5能否完美替代?
查看>>
ML.NET生成器带来了许多错误修复和增强功能以及新功能
查看>>
微信适配国产操作系统:原生支持 Linux
查看>>
我的2020年终总结:新的角色,新的开始
查看>>
C# 9 新特性 —— 增强的模式匹配
查看>>
ASP.NET Core Controller与IOC的羁绊
查看>>
如何实现 ASP.NET Core WebApi 的版本化
查看>>
探索 .Net Core 的 SourceLink
查看>>
AgileConfig-如何使用AgileConfig.Client读取配置
查看>>
【gRPC】 在.Net core中使用gRPC
查看>>
整合.NET WebAPI和 Vuejs——在.NET单体应用中使用 Vuejs 和 ElementUI
查看>>
“既然计划没有变化快,那制订计划还有个卵用啊!”
查看>>
C#实现网页加载后将页面截取成长图片
查看>>
C# 在自定义的控制台输出重定向类中整合调用方信息
查看>>
【gRPC】ProtoBuf 语言快速学习指南
查看>>
C# 9 新特性 —— 补充篇
查看>>
Asp.Net Core使用Skywalking实现分布式链路追踪
查看>>
浅谈CLR基础知识
查看>>
Xamarin使XRPC实现接口/委托远程调用
查看>>
如何成功搞垮一个团队?
查看>>