【个人学习笔记】前端git版本控制器

 git下载地址:Git - Downloads

目录

简介

集中式(svn)

分布式(git)

安装

初始配置

区域

对象

git对象

树对象


简介

集中式(svn)

特点:有一台服务器进行版本控制,大家写的代码都上传到该服务器上,拉取代码也是在这台服务器上,每台开发人员的电脑上存储的都只有该项目的最新一版的代码。svn因为每次存储的都是差异,需要的硬盘空间会相对小一点,可是回滚的速度会很慢。优点是代码存放在单一的服务器上,便于项目的管理。缺点是服务器宕机的话员工写的代码得不到保障,服务器炸了的话整个项目的历史记录都会丢失

分布式(git)

去中心化的代码管理,每个开发人员的电脑都是一台服务器,存储了该项目的所有版本,所以可以没有单独的服务器,偶尔有一两台开发人员电脑宕机,甚至github(本质上是一个大家都可以访问到的挂在公网上的服务器,跟开发人员的电脑是一样的)挂了,断网,也不会影响开发,不会丢失历史版本(每个开发人员的电脑里都有历史版本)。git每次存储的都是项目的完整快照,需要的硬盘空间会相对大一点(git团队对代码做个极致的压缩,最终需要的实际空间比snv多不了太多,可是git的回滚速度很快)

安装

在官网地址下载对应版本git

 下载好之后就是傻瓜式安装,一直点next就可以,安装完成后看到右键菜单里的git Bash Here就代表安装成功了!

                  

点击git Bash Here就可以使用命令行的git工具了!

界面如下图:

 他跟我们用win+r写入cmd弹出来的命令提示符不一样,git用的命令行是Linux命令,而cmd弹出来的命令提示符是dos命令,是Windows的命令。比如清屏的命令dos里面是cls用git的话应该输入clear。这个时候我们输入 git --version即可查看当前git版本:

git --version

 看到这个就说明git确实是安装成功了

初始配置

先在git中运行一下代码可以查看git的相关配置

git config --list

所以我们首先应该配置用户名和邮箱,通过以下命令可以配置。

git config --global user.name "xxx"
git config --global user.email "xxx@xxxx.com"

其中,--global代表配置对当前Windows系统的当前用户生效(因为Windows系统可以有多个用户)也可以改成 --system 表示配置对当前操作系统生效,就是说对当前系统的所有用户都生效。也可以什么都不写,表示仅对当前项目生效。权重是 项目>用户>系统。举例:配置了对当前项目生效的用户名和邮箱,那么即便--system,--global配置了其他的用户名或邮箱,也是以当前项目设置的为准。

当你想要修改这些配置的时候,可以用同样的命令直接覆盖原有的值,也可以在C:\Users\用户名 中找到.gitconfig文件,直接修改用户名和邮箱就好了。当配置完成后,可以试用上述查看命令进行查看。

区域

        指工作区、暂存区、版本库,git操作流程:

        虽然我们操作git的流程是这样,但是git的运行原理却不是这样的

对象

        指git对象、树对象、提交对象,首先我们来初始化仓库,先在一个空文件夹调出git命令行,然后输入初始化仓库命令

git init

        然后就会在当前文件夹中出现一个隐藏的.git文件,这就是git版本库,他现在管理着当前的这个文件夹内容的版本。点开.git文件夹,里面的文件作用如下:

        hooks                目录包含客户端或服务端的钩子脚本;
        info                    包含一个全局性排除文件
        logs                   保存日志信息
        objects              目录存储所有数据内容;
        refs                    目录存储指向数据(分支)的提交对象的指针
        config                 文件包含项目特有的配置选项
        description         用来显示对仓库的描述信息
        HEAD                文件指示目前被检出的分支
        index                 文件保存暂存区信息

git对象

        Git 的核心部分是一个简单的健值对数据库。你可以向该数据库插入任意类型
的内容,它会返回一个键值(键是值对应的hash),你可以在已经初始化的仓库中新建一个文件,然后输入命令行

git hash-object ./新建文件名.txt  

 由此生成了一个哈希,作为key,将文件内容作为value,存储起来,你可以在.git的object文件夹中看到新生成的文件夹(名字是生成的哈希的头两位)里面存储着当前文件的该版本的内容。这样其实是完成了一次由工作区直接提交版本库过程。

         通过该键值可以在任意时刻再次检索该内容,键值对在git内部是一个blob类型,但git对象只能通过键值对存储一个一个文件的内容,不能代表当前项目的快照,这样会产生以下问题:
        1. 只能通过哈希值读取文件内容,但切换版本时,记住文件的每一个版本所对应的 哈希 值并不现实
        2. 在Git 中,文件名并没有被保存一我们仅保存了文件的内容,就是说不能通过文件名读取文件内容。
        解决方案:树对象,说简单点,git对象就是用来存内容的,树对象是用来解决git对象存内容产生的两个问题的

树对象

        树对象(tree object),它能解决文件名保存的问题,也允许我们将多个文件组织到一起Git以一种类似于 UNIX 文件系统的方式存储内容。所有内容均以树对象和数据对象(git对象)的形式存储,其中树对象对应了 UNIX 中的目录项,数据对象(git对象)以大致上对应文件内容。一个树对象包含了一条或多条记录(每条记录含有一个指向git对象或者子树对象的 SHA-1 指针,以及相应的模式、类型、文件名信息)。一个树对象也可以包含另一个树对象。也就是说,树对象是可以作为项目的一次快照的。

构建树对象

        我们可以通过 update-index;write-tree;read-tree等命令来构建树对像并塞入到暂存区。
操作:
        1. 利用update-index命令 为test.txt 文件的首个版本一创建一个暂存区。并通过 write-tree命令生成树对像。
命令:

为test.txt 文件的首个版本一创建一个暂存区:
git update-index --add --cacheinfo 100644 83b32e61804e65cc7337201a7252750c76066a30 test.txt

其中哈希为生成的git对象的哈希
文件模式为
    100644,表明这是一个普通文件
    100755,表示一个可执行文件;
    120000,表示一个符号链接。
--add选项:
    因为此前该文件并不在暂存区中 首次需要 --add
--cacheinfo选项:
    因为将要添加的文件位于 Git 数据库(objects文件夹)中,而不是位于当前目录下 所以需要cacheinfo
相同文件的不同版本进行该操作时,会在暂存区覆盖原有版本,不会新增

查看暂存区:git sl-files -s

查看git数据库:find ./.git/objects/ -type f

生成树对像:
git write-tree(此时再看git数据库就多了一条树对象)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值