一篇博客解决git操作

git教程:

 

 

是一种版本控制器,是一个记录每一次版本记录一个或若干个文件内容的变化,以便将来查询特定版本修订情况的系统。

 

可以通过它恢复之前的样子,可以一键还原

 

可以通过比较文件的变化细节,可以找到谁修改了这段代码,这是一种分布式的版本控制器,操作要比SVN复杂一点。

 

集中式的管理的优缺点:(代码存储在单一的服务器上便于项目的管理,客户端只提取最新版本的快照)

优点:

集中化的管理

方便存储

缺点:

中央出现故障,没有保障。(SVN服务器宕机就不能工作了;需要手动保存代码,如果恢复之前版本会出现丢失数据,或者时间一长就无法找到完整的之前代码的对照);

如果中央存储出现问题,那么版本无法恢复管理。

分支操作麻烦需要到服务器端拉分支再从客户端接入

 

分布式的管理的优缺点

(可以提取不只是最新版本的快照,而是存储仓库完整的镜像。可以通过其他本地的服务器(可以都是客户端)完整的保存下来)(可以没有网络的情况下开发,因为本地有历史记录)

 

分布式的管理存放的不是项目版本与版本之间的差异,它存的是索引(所需的磁盘空间较小很多时候都是存索引,有时候会存压缩文件)所以每个客户端都可以放下整个项目的历史记录;

列如:有100次存储那么SVN需要一步一步的回滚,GIT需要存储所有的索引,可以一步回到对应版本

SVN每次存储的内容会小一点(内存要求要小一些),但恢复历史版本会麻烦一点

GIT每次存储的都是这个项目完整的快照,(内存要求要大一点,但做过压缩内存不会大很多),但是恢复历史版本要快一点(可以加内存,但是很难加CPU所以选择GIT更好)

使用GITHUB客户端进行GIT操作;

可以客户端自己创建分支更加便捷

 

GIT简史:

linux开发者linux torvalds参与开发

(linux内核维护工作很多都花在了提交补丁和保存归档的繁琐)

 

 

 

其实很多大型项目都借助了操作系统的模式,GIT可以采用分布式管理超大型项目,有点类似于LINUX同时支持多用户进行操作。

下载地址:

https://git-scm.com/download/win

 

https://git-scm.com/download/mac

 

git初始化过程(第一次使用)需要配置一下工作环境:

Git config --global user.name”名字”

Git config --global user.email 945571214@qq.com(邮箱)

这里的邮箱代表在git上提交版本的时候上面的邮箱,如果出现代码出现错误,可以通过邮箱提醒编写者

Git config --list

查看可以配置的信息,可以通过提示进行配置

--global当前用户提交

--system当前系统提交

不填    当前系统提交

 

git教程主要内容:

区域&对象

区域:

工作区、暂存区、版本区

对象:

git对象、树对象、提交对象

 

工作区:在工作区中新建文件、修改文件等等,(沙箱环境、临时生成的环境)

暂存区:暂时存放文件的地方(并不是所有的文件都需要创建一个版本)

版本区:最终版本

 

工作区提交到暂存区,暂存区达到一定程度,提交到版本区

 

git对象:

初始化对象:到工作区文件夹中使用gitbash here创建了一个隐藏的git文件夹,这个就是git仓库,里面就是版本库,在这个工作区文件中的所有操作都会存放在这个文件夹中。

Git init:初始化对象命令

里面包含多个文件夹表示不同的含义:

hooks目录包含客户端或服务端的钩子脚本(相当于一钟回调函数,符合规范提交不符合则不能提交(工作区向缓存区提交的钩子,缓存区向版本库提交的钩子))

Info:表示git不需要管理的文件

Logs:使用git产生的日志信息

Objects:目录存储所有的数据内容

Refs:存放提交对象(分支有关)

config配置文件(user 和email存储的文件)

Description:对仓库的描述信息

HEAD表示当前被检出的分支

index文件保存的暂存区

 

inux基本命令:

clear清除屏幕

Echo “testcommend” > test.txt创建文件

Ll:将当前目录下的子文件&子目录平铺到控制台

Find:将对应目录的子孙目录输出到工作台

Find -type f:查看对应文件类型的文件

Rm 删除文件

Mv 原文件 更改之后的名字 更改文件名

Cat 文件查看文件内容

Vi 修改文件内容set nu 设置行号

 

底层命令(弄清原理就行了,不需要特别记忆)

Git对象:

Key:val(Key:val生成的hash是blob类型的键值对hash-object)

git的核心部分是一个简单的键值对数据库,你可以向该数据库插入任意类型的内容,它会返回一个键值,通过该键值可以在任何时刻再次检索该内容

 

向数据库中写入内容 并返回对应键值:

Echo “test content” |git hash-object -w --stdin(可替换成文件路径)

-w选项是指hash-object命令存储数据对象,若不指定此选项则该命令是返回对应的键值

--stbin(标准输入standar input)选项则指示该命令从标准库读取内容;若不指定则默认返回指定路径

 

(数据库的内容对应一个键值hash(唯一一个)头两个字符表示存储的目录(objects下的子目录)通过cat 查看会发现这里面的存储的内容被压缩了)

 

查看原内容:git cat-file -p hash值(git存取时生成出来的hash键)(查看压缩之后的内容)

-p自动指示命令中自动判断内容的类型,并为我们现实格式友好的内容

(换成-t可以查看git对象的类型-------blob类型)

 

(lf是Windows的换行 crlf是Linux的换行)

编写一个文件

Echo “hello a1” > hello.txt

Git hash-object -w hello.txt

生成第一个键值对

Echo “hello a2” >> hello.txt

Git hash-object -w hello.txt

生成第二个键值对

 

第一个和第二个之间会有重复内容,但是内容都经过压缩

Git cat-file -p hello.txt的hash键(第二个的hash键)

 Hello a1hello a2

 

以上是对本地数据库进行管理不涉及缓存区

 

记录的版本不是文件的更新的版本,而是整个更新项目的版本

而且在git中文件名并没有被保存 我们仅保存了文件的内容

解决方案:树对象

 

树对象:

树对象,它能解决文件名保存的问题,也允许我们将多个文件名组织到一起,git以一种类似于unix文件系统的方式存储内容。所有内容均以树对象和数据对象(GIT对象)存储,其中树对象对应了Unix中的目录项,数据对象(git对象)则大致对应文件内容。一个树对象包含了一条或多条记录(每条记录含有一个指向git对象或者子树对象的sha-1指针。以及相应的模式,类型,文件名信息)。一个树对象也可以包含另一个树对象。

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值