0%

Git General Tutorial

Git Simple Usage


本文主要对Git的基本概念做一个总结。


  • 安装Git
    下载

  • 初步使用

    git init: initialize git's directory
    
    # 提交需要一个名字
    # 全局配置
    git config --global user.name [your_name]
    
    # 局部配置,只对本工程
    git config user.name [your_name]
    
    # 查看配置
    git config -l
    
    # 新建一个文件, 加入全部文件
    git add .
    
    # 状态说明
    git status
    
    # 提交, 输入commit信息, git commit -m '输入commit信息'
    git commit
    
    # 查看commit情况
    git log
    
    
  • Git 的关键核心概念

    • 工作区: 电脑里可以看到的目录

    • 版本库(Repository)
      workflow.png

    • Git工作方式

      • 在工作目录中修改文件。
      • 暂存文件,将文件的快照放入暂存区域。
      • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
        • 传统版本控制工具工作方式
          只记录更改的部分
        • Git工作方式
          记录所有文件全貌
          可能空间很大?空间换时间
          只记录改动文件的全貌,不记录文件的本身,使用指针指向没有改动 的文件
          working-style.png
    • 几乎所有操作都本地执行

    • Git一般只添加数据,一旦提交,不用担心数据丢失,有后悔药吃

    • 四种基本对象类型

      • Blob
        每个blobs代表一个(版本)文件,只包含文件的数据,忽略元数据,如名字、路径和格式
      • Tree
        每个trees代表一个目录,包含此目录下的blobs、子目录、文件名、路径等元数据。对于子目录的目录,git相当于存储了嵌套的trees
      • Commit
        每个commit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当次提交时的目录信息。一个commit可以有多个(至少一个)父commits。
      • Tag
        tag用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次commit。相当于给上面的一个commit打上一个标记,代表一个里程碑。

        思考:
        Trees数据、Commits提交行为、Tags版本分离,就像设计模式的单一职责

    • SHA1哈希值

      • Git中每一个“对象名”都是对“对象”内容做SHA1(SHA1是一种密码学的哈希算法)哈希计算得来的,所以对于内容不同的对象,会有不同的SHA1哈希值
      • git log
        查看commit的哈希值
      • 使用哈希值(16进制)的前两位作为文件夹名称(oxff最多256个文件),后面的位数作为文件名名称
      • ./git/objects 对象存储位置
      • git cat-file -t 哈希值
        查看对象类型
      • git cat-file -p 哈希值
        查看对象内容
      • 对象以二进制存储,所以要使用cat-file命令
        object-diagram.png
    • 引用解析器 git rev-parse Head
      头部总是指向当前工作的commit
    • git init 发生什么了? git add 发生了什么? git commit 发生了什么?

Reference

Learning Git Internals by Example
炼数成金深入浅出Git