Chapter 3
git 存储的是snapshot
git仓库的结构
每个文件内容的blob( What is blob?)
树(多少?):包含目录内容列表(?),文件名与blob的对应关系
commit:指向根树(root tree)和所有commit元数据
递交是, 会对每个子目录进行checksum并且保存这些tree到仓库,然后创建一个commit对象,包含元数据(作者, message, ...)和指向root project(taged内容的快照?)的指针,以便重新snapshot
一般commit对象包含有parent指针,指向前一个commit对象。可以是多个,若是合并自多个分支,或是0个,若是第一个commit。
一个分支就是一个指向那些commit对象的可移动的指针。默认的分支名字是master。初次递交时,分配到的是指向最后一次commit的master分支(主分支?)。每次递交,branch会自动移动。
创建分支 branch
新创建的分支指向当前的commit
git branch testing
HEAD指针
指向当前分支的指针。创建分支并不改变HEAD。
切换分支checkout
git checkout testing
创建并切换也可以使用一条命令
git checkout -b branch_name
切换到testing分支后递交的结果
此时master分支保持不变。
现在切换回master
git checkout master
checkout 做了两件事:已是移动HEAD指针,二是把工作目录的文件还原到新当前分支指向的snapshot。
再次在 master分支递交后结果如图
在git中一个分支是一个包含了40个字符的文件,这串字符是commit指向的SHA-1 checksum。因此创建和销毁分支是很cheap的(如何翻译cheap?)。