一个标签对象包一个对象名(译者注:就是SHA1签名), 对象类型, 标签名, 标签创建人的名字(“tagger”), 还有一条可能包含有签名(signature)的消息.


一个”blob对象”就是一块二进制数据,它没有指向任何东西或有任何其它属性,甚至连文件名都没有.

因为blob对象内容全部都是数据,如两个文件在一个目录树(或是一个版本仓库)中有同样的数据内容,那么它们将会共享同一个blob对象。Blob对象和其所对应的文件所在路径、文件名是否改被更改都完全没有关系。

git tree 对象

一个tree对象可以指向(reference): 一个包含文件内容的blob对象, 也可以是其它包含某个子目录内容的其它tree对象.

Commit对象

注:合并的提交(merge commits)可能会有不只一个父对象. 如果一个提交没有父对象, 那么我们就叫它“根提交”(root commit), 它就代表着项目最初的一个版本(revision).

$ git config --global user.name "Scott Chacon"
$ git config --global user.email "schacon@gmail.com"

提交流程大致如下

$ git clone lyr@192.168.0.7:~/work/m2ge
#... 项目开发 ...
$ git add 改动的文件
$ git commit
$ git pull
#... 解决版本合并问题 ...
$ git push

git 协同开发

$ mkdir -p ~/project/m2ge.git
$ cd ~/project/m2ge.git
$ git --bare init --shared

上述操作中,git-init 命令的 –bare 选项可以让 m2ge.git 目录等价于一个仓
库。

也就是说m2ge.git 本来是一个工作树,但是 –bare 选项将本应当存放在m2ge.git/.git 中的仓库内容全部放置在 m2ge.git 目录下,就好像仓库完全的裸露在工作树中,所以称之为赤裸的仓库。

$ cd ~/work/m2ge
$ git push m2@192.168.0.2:~/project/m2ge.git master