zoukankan      html  css  js  c++  java
  • git第一次commit代码阅读

    获取 git 第一次commit

    git log --reverse 倒叙查看日志

    获取满足范围的commit

    git 的第一次commit

    获取对应tag

    在github的Switch branches/tags选择对应tag

    或者

    克隆下整个git项目,执行

    git tag 查看所有tag.

    git checkout <tag-version> 切换到对应tag.

    阅读README

    介绍了git来源于get的误读

    介绍了设计上的两个抽象

    •  object database
      
    •  current directory cache
      

    对象

    Tree:
    存放所提交的文件列表,文件列表每一行描述所记录的一个文件,包括:文件的权限、路径名、SHA1值。
    这个就能够用于保存每一次提交的具体内容,通过查询tree文件,可以知道该次提交时所含有的所有文件,然后根据每一个文件的SHA1,可以在object database中搜索出该文件。这样就达到了保存每一次提交的具体内容的目的。

    BLOB:
    blob文件是指具体的文件内容,即我们所提交的文件。
    Blob文件会被压缩,然后计算SHA1值,所以如果文件的内容没有发生变化,那么就不会产生新的Blob文件。因为它们算出的SHA1是相同的,而SHA1值就是它们实际的存放路径。

    Commit:
    commit文件是用于记录每一次提交的文件。包含的内容有:tree、parents、author、committer、changelog。其中tree是指用于保存此次提交的tree文件。Parents是指此次提交的父分支是哪些,也是对应的tree文件。Author、committer、changelog是提交的记录信息。

    对象间关系

    一个commit 包含 tree对象,author, commiter, log-info,
    tree对象中又包含许多blob 对象

    阅读代码

    编译项目

    环境wsl-ubuntu

    安装zlib开发包

    sudo apt install zlib1g-dev
    

    安装openssl开发包

    sudo apt install libssl-dev
    

    修改编译选项, 将Makefile中LIBS= -lssl修改为LIBS= -lcrypto -lz

    执行make后,会获得7个可执行文件

    代码阅读

    工具

    查看函数依赖关系

    GNU cflow

    基于makefile建立依赖关系

    makefile2graph

    之后的发展

    为了将可执行文件进行统一管理,git进行了分层设计,底层使用C实现的管道系统,高层为使用shell脚本实现的瓷器系统(即用户使用的接口)

    git design

    随着指令的进一步增加,一些脚本命令通过向c生成的git程序传参实现了。例如git-commit.sh在这个版本被替换为C实现。

    shell script converted to C

    参考

    fabiensanglard

    如何阅读源代码-zhangguixv

    Git源码学习

  • 相关阅读:
    sklearn库学习笔记1——preprocessing库
    juypter notetbook
    信用卡欺诈
    matplotlib1
    python一行输入多个数
    pandas数据预处理
    pandas基础用法
    numpy简单用法2
    numpy 简单用法
    简单循环
  • 原文地址:https://www.cnblogs.com/amonqsq/p/13371485.html
Copyright © 2011-2022 走看看