`
songkang666
  • 浏览: 105555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Git step by step 13 之Git对象

    博客分类:
  • GIT
 
阅读更多
        Git中有几种对象,像commit、tree、blob、tag,所有这些对象都存放于工作目录中.git/objects/下的各个文件夹中。

举个例子:
        当创建一个文件 touch file,然后进行git add file时,上面所说的目录中就会生成一个文件夹(两个英文字符命名的,这里假设是ac),那么在ac目录下会有一个一串(38个)字符命名的文件(假设是8516aa0d9ea6b86d3830f2e179864992f527ad),而ac与8516aa0d9ea6b86d3830f2e179864992f527ad合起来(即:ac8516aa0d9ea6b86d3830f2e179864992f527ad)就是我们刚git add之后,所创建的一个blob对象名,该对象名是一个SHA-1值(40个字符组成,前两个用作目录名,后38个用于文字名),而该blob对象中所存的内容即为file文件的内容。
所以一个文件对应一个blob对象。

        而tree对象对应的是目录,其内容是目录中的子目录或文件的名称。
举个例子:
        假设工作目录(根目录)里有dir/一个目录,和一个file文件,而dir/目录下又有file1和file2两个文件。那么进行 git add(add all)之后,生成的是三个blob对象(我试了下,当文件中没有内容时,不会生成blob对象,这就是说Git是针对文件中的内容进行SHA-1哈希的),对应这三个文件。此外,还会生成两个 tree 对象,对应工作目录的根目录以及dir/目录。

        commit对象是在每次git commit时所生成的,而tag对象是在建立里程碑时所生成的。

Ps:在.git/objects中的所有对象,在不手工(进入该目录,rm -r XXX)进行删除时,这些对象都会一直存在着,这也是为什么在git reset之后,还可以还原的,不过,从那么多对象文件中找出想要还原的commit,犹如大海捞针。但是总是有方法找到的,或许git reflog可以帮助走得更进一步。

        理解Git中的对象,能更好的理解分支、HEAD、master等。


        前面讲过,用git cat-file -p HEAD:file可以查看HEAD所指向的提交中file的内容,其实,这只是一个小的应用。
        所有对象都可以用git cat-file来查看,其中 git cat-file -t <object> 是查看该对象的类型 ,git cat-file -p <object> 是查看该对象的内容, git cat-file -s <object> 是查看该对象的大小。

举个例子:
$ git cat-file -p 6bb994 //(这个是一个commit对象的名字的前5位,不必打出全名,可区别于其他即可)
tree 8fc7e4efa8c47c058272663dc3cafcad52229b9d
parent c2456fcf8fcb8715704d4d4e4e8342c83e344b3e
author kevin <songkang666@126.com> 1366773192 +0800
committer kevin <songkang666@126.com> 1366773192 +0800

        可以看出,该commit对象中记录了它所对应的tree对象,前一次提交生成的commit对象(即它的父提交),提交人信息、对该 commit的描述。

        最后补充一条很重要的,Git在处理提交时,会把每次提交的文件全部内容(snapshot)都记录下来。
        举个例子:file在修改之后,再进行提交时,会新建一个完整地对应于它的blob对象,而不是覆盖掉之前提交时所产生的,也不是只对修改的部分(例如:添加了某些行)建立blob对象。

more:
GIT对象模型(推荐)
《Pro Git》
分享到:
评论

相关推荐

    Git Learn Version Control with Git A step-by-step Ultimate beginners Guide epub

    Git Learn Version Control with Git A step-by-step Ultimate beginners Guide 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Git Learn Version Control with Git A step-by-step Ultimate beginners 无水印pdf

    Git Learn Version Control with Git A step-by-step Ultimate beginners Guide 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn...

    Learn Version Control With Git A step-by-step course for the complete beginner

    Learn Version Control With Git A step-by-step course for the complete beginner(中文)。亚马逊接近满分书籍,中文版。图文并茂。学习Git的好资料。 从官网一页一页的复制过来的,花了不少时间。

    Git Learn Version Control with Git A step-by-step Ultimate beginners Guide azw3

    Git Learn Version Control with Git A step-by-step Ultimate beginners Guide 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Learn Version Control with Git: A step-by-step course for the complete

    "Learn Version Control with Git" is a beginner-friendly step-by-step course. The book doesn't require a deep technical background. Instead, it's aimed at beginners of version control and/or ...

    Visual CSharp Step By Step

    《Visual C# Step By Step》是一本经典的C#编程教程,旨在帮助初学者逐步掌握C#语言和.NET Framework的核心概念与应用。这本书通过实例和逐步指导的方式,让读者能够深入理解C#编程的基础以及高级特性。 1. **C#...

    GIT分支代码统计

    在IT行业中,版本控制工具Git是开发者们进行协作和管理代码的重要工具。Git不仅提供了版本回溯、合并分支等基本功能,还支持各种高级操作,如代码统计。本主题聚焦于"Git分支代码统计",这是一项对于项目管理和团队...

    Git GUI.pptx

    git图形化界面操作说明,从创建本地仓库到更新远程仓库,step by step 简单直观。zsbd

    Git.Mastering.Version.Control.pdf

    Its step-by-step approach with useful information makes this course the ultimate guide to understanding and mastering Git. This course will show the road to mastery example by example, while also ...

    Git-2.21.0-64-bit.zip

    * The "git log" command by default behaves as if the --mailmap option was given. UI, Workflows & Features * The "git fast-export/import" pair has been taught to handle commits with log messages...

    python如何绑定git

    Step 1: git 用户绑定邮箱 首先,需要将 Git 账号绑定到邮箱上。登录 Git 网站,按照以下步骤操作: 1. 使用邮箱与 Git 绑定。 2. 本地配置个人用户名称和电子邮件地址: ``` git config --global user.name "信笺...

    jenkins的git插件

    - **git(4).hpi**:这可能是 Git 插件的多个版本之一,用于确保 Jenkins 支持最新的 Git 特性。 - **workflow-api.hpi**:流水线 API 插件提供了编写 Jenkinsfile 的接口,使得定义复杂的构建流程成为可能。 - **...

    搭建Git本地服务器详细步骤

    Step 4: 初始化 Git 存储库 接下来,需要初始化 Git 存储库。可以使用以下命令: ``` git init ``` Step 5: 查看隐藏文件夹 初始化完成后,需要查看隐藏文件夹。可以使用以下命令: ``` dir -a ``` Step 6: 将文件...

    [Microsoft Press] Microsoft Visual C# 2013 Step by Step.pdf

    - **背景介绍**:本书《Microsoft Visual C# 2013 Step by Step》是针对Visual Studio 2013环境下的C#编程语言的学习指南。它由John Sharp编写,并获得了微软公司的授权出版。本书旨在帮助读者逐步掌握C#编程的基础...

    Jenkins离线安装svn git maven插件包

    13.javadoc.hpi 14.workflow-api.hpi 15.script-security.hpi 16.junit.hpi 17.maven-plugin.hpi 18.git-client.hpi 19.matrix-project.hpi 2.workflow-step-api.hpi 20.git.hpi 3.credentials.hpi 4.scm...

    天嵌科技出品-Linux移植之Step By Step_V4.5_20100605

    《天嵌科技出品-Linux移植之Step By Step_V4.5_20100605》是一份详尽的教程,旨在指导用户如何在天嵌科技的TQ2410平台上进行Linux系统的移植工作。TQ2410是一款基于Samsung ARM9处理器的嵌入式开发板,广泛应用于...

    初识Git&Gerrit.pptx

    Step3:提交到远程仓库,通过 `git push` 命令将代码提交到远程仓库。 6. Git 的本地仓库和暂存区 Git 的本地仓库和暂存区是 Git 的两个重要概念,本地仓库用于存储代码的历史版本,而暂存区用于暂存代码的变更。 ...

Global site tag (gtag.js) - Google Analytics