动机从Subversion和Mercurial切换到Git之后的几个月,我始终觉得Git在本质上是不同于Subversion和Mercurial的,但没法确切地说出区别。 我经常在Github上看到tree、parent等术语,也搞不清楚它们确切的含义。 因此我决定花些时间学学Git。 我会尝试概述,并阐述一路走来学到的关于Git的关键信息...但这仅是有助于我回答Git与其他源码控制工具区别的Git内部构造基本知识。 实体、引用、索引(Objects,References,The Index)要理解Git内部构造的核心,我们应理解三个东西: 实体、引用、 索引。 我发现这个模型非常优雅。用一个小小的图表就能完全展现,也易于理解记忆。 实体你提交到一个Git代码仓库中的所有文件,包括每个提交的说明信息(the commit info)都在目录 一个实体以一个40字符长度的字符串(该实体内容的SHA1哈希值)来标识。 实体有4类:
下文的示例会阐明这些实体是如何相互关联的。 引用Git中,一个分支(branch)、远程分支(remote branch)或一个标签(tag)(也称为轻量标签)仅是指向一个实体的一个指针,这里的实体通常是一个commit实体。 这些引用以文本文件的形式存储在目录 符号引用(Symbolic References)Git有一种特殊的引用,称为符号引用。它并不直接指向一个实体,而是指向另一个引用。举例来说, 索引索引是一个暂存区,以二进制文件的形式存储为文件 当 示例我们来演练一个简单的示例,创建一个Git代码仓库,提交一些文件,看看幕后 初始化新的代码仓库$ git init canai 发生了什么呢?
添加新文件$ echo "A roti canai project." >> README $ git add README 发生了什么呢?
首次提交$ git commit -m'first commit' [master (root-commit) d9976cf] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README 发生了什么呢?
添加一个修改过的文件$ echo "Welcome everyone." >> README $ git add README 发生了什么呢?
向子目录中添加文件$ mkdir doc $ echo "[[TBD]] manual toc" >> doc/manual.txt $ git add doc 发生了什么呢?
第二次提交$ git commit -m'second commit' [master 556eaf3] second commit 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 doc/manual.txt 发生了什么呢?
添加一个注释标签(annotated tag)$ git tag -a -m'this is annotated tag' v0.1 d9976 发生了什么呢?
添加一个新的(轻量的)标签$ git tag root-commit d9976 发生了什么呢?
补充阅读接下来做什么呢?寻找适合分布式团队、长期项目的一个最小化git工作流。原文:Learning Git Internals by Example 译者:youngsterxyf 状态:草稿 计划修订本文,未来可能会简化一些... 动机从Subversion和Mercurial切换到Git之后的几个月,我始终觉得Git在本质上是不同于Subversion和Mercurial的,但没法确切地说出区别。 我经常在Github上看到tree、parent等术语,也搞不清楚它们确切的含义。 因此我决定花些时间学学Git。 我会尝试概述,并阐述一路走来学到的关于Git的关键信息...但这仅是有助于我回答Git与其他源码控制工具区别的Git内部构造基本知识。 实体、引用、索引(Objects,References,The Index)要理解Git内部构造的核心,我们应理解三个东西: 实体、引用、 索引。 我发现这个模型非常优雅。用一个小小的图表就能完全展现,也易于理解记忆。 实体你提交到一个Git代码仓库中的所有文件,包括每个提交的说明信息(the commit info)都在目录 一个实体以一个40字符长度的字符串(该实体内容的SHA1哈希值)来标识。 实体有4类:
下文的示例会阐明这些实体是如何相互关联的。 引用Git中,一个分支(branch)、远程分支(remote branch)或一个标签(tag)(也称为轻量标签)仅是指向一个实体的一个指针,这里的实体通常是一个commit实体。 这些引用以文本文件的形式存储在目录 符号引用(Symbolic References)Git有一种特殊的引用,称为符号引用。它并不直接指向一个实体,而是指向另一个引用。举例来说, 索引索引是一个暂存区,以二进制文件的形式存储为文件 当 示例我们来演练一个简单的示例,创建一个Git代码仓库,提交一些文件,看看幕后 初始化新的代码仓库$ git init canai 发生了什么呢?
添加新文件$ echo "A roti canai project." >> README $ git add README 发生了什么呢?
首次提交$ git commit -m'first commit' [master (root-commit) d9976cf] first commit 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 README 发生了什么呢?
添加一个修改过的文件$ echo "Welcome everyone." >> README $ git add README 发生了什么呢?
向子目录中添加文件$ mkdir doc $ echo "[[TBD]] manual toc" >> doc/manual.txt $ git add doc 发生了什么呢?
第二次提交$ git commit -m'second commit' [master 556eaf3] second commit 2 files changed, 2 insertions(+), 0 deletions(-) create mode 100644 doc/manual.txt 发生了什么呢?
添加一个注释标签(annotated tag)$ git tag -a -m'this is annotated tag' v0.1 d9976 发生了什么呢?
添加一个新的(轻量的)标签$ git tag root-commit d9976 发生了什么呢?
|
|
来自: astrotycoon > 《git》