git基本概念

git 分布式版本控制系统
目的:管理文件内容的变化

一、优点:

 1.分布式开发
   并行开发,每个人在自己独立的版本库中同时开发,不需要与中心版本库时刻同步
  2.性能优异
   为了节约传输时间和存放空间,使用“压缩”和“差异比较”技术;分布式开发也确保了网络的不确定不会影响日常开发
 3.保持完整性和可靠性
   使用安全散列函数SHA1来命名和识别对象库中对象

二、概念解释:

(1) 版本库
  是一个简单的数据库,包含用户用来维护与管理项目的修改版本和历史信息。提供所有版本库中文件的副本,和版本库本身的副本
   Git主要数据结构:对象库和索引
(2)对象库
  又称内容寻址系统,只有四种类型:
   块(blob:binary large object):文件的每一个版本都表示一块blob,只有文件的内容,不含元数据
  目录树(tree):记录blob标识符、路径名和一个目录所有文件的元数据
  提交(commit):保存版本库中每一次变化的元数据,包括作者、提交者、提交日期和日志信息
  标签(tag):方便人读的特定对象,通常是一个提交对象。分为轻量级(提交对象的引用)和带附注(在版本库中创建永久对象)
(3)索引
  一个临时的、动态的二进制文件,描述整个版本的目录结构

三、对象库具体变化

(树对象即目录树)
(1)一个文件从添加到提交的过程

git init
echo "hello" > hello.txt
git add .                   //对象库中创建blob对象
git write-tree         //根据当前的索引在对象库中创建一个树对象
git commit -m 'add hello'   //对象库中创建树对象和提交对象

标签

  带附注的标签
    git tag  -m 'tag version 1.0'  v1.0  提交对象ID  //对象库中创建标签对象
    $ git rev-parse v1.0     //获取标签对象的散列值SHA1
     5edaf4b2307afad2702e8d6375cedc6ad1c68235    //标签对象ID
    git cat-file -p v1.0     //查看标签对象的内容
 轻量级标签
    git tag v2.0 884ff6294901aefe0b80638292a236e48a783a52   //对象库中没变化
    git rev-parse v2.0
    884ff6294901aefe0b80638292a236e48a783a52   //提交对象ID

查看hello.txt提交后的仓库变化

    $ find .git/objects/
    .git/objects/
    .git/objects/5e
    .git/objects/5e/daf4b2307afad2702e8d6375cedc6ad1c68235  //标签对象
    .git/objects/88
    .git/objects/88/4ff6294901aefe0b80638292a236e48a783a52  //提交对象
    .git/objects/aa
    .git/objects/aa/a96ced2d9a1c8e72c56b253a0e2fe78393feb7  //树对象
    .git/objects/ce
    .git/objects/ce/013625030ba8dba906f756967f9e9ca394464a  //hello.txt的blob对象
    .git/objects/info
    .git/objects/pack

查看ID对应的内容:

      以树对象为例
      git cat-file -p aaa96ced2d9a1c8e72c56b253a0e2fe78393feb7
       100644 blob ce013625030ba8dba906f756967f9e9ca394464a    hello.txt

具体对象库中变化如图所示:
    这里写图片描述

(2)在添加一个目录和一个文件

       mkdir test
       echo "what" > test/test.txt
       git add .
       git commit -m "add test"

提交后对象库中新增一个提交对象、两个树对象、一个blob对象。
具体变化如图所示:
    这里写图片描述

注意:Git追踪的是内容,不是文件

    当在cp hello.txt test/hello.txt时,不会创建新的blob块,只有当其中一个内容变化时才新建blob块

主要命令

git cat-file  -p  ID  //查看ID对应的信息(不同对象对应不同内容)
git rev-parse  3211882d //根据唯一前缀查看完整的散列值
git ls-files -s   //查看当前索引
git write-tree   //根据当前索引创建树对象
git rev-parse  v1.0  //根据标签名查看标签队形散列值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值