実用Git

実用Git

実用Git

三冊目のGit本。そしてこの本もすごい。とりあえず4章を写経。オブジェクトにはブロブ、ツリー、コミット、タグの4種類ある。

$ mkdir /tmp/hello
$ cd /tmp/hello/
$ git init //リポジトリを初期化
Initialized empty Git repository in /private/tmp/hello/.git/
$ find .
.
./.git
./.git/config
./.git/description
./.git/HEAD
./.git/hooks
./.git/hooks/applypatch-msg.sample
./.git/hooks/commit-msg.sample
./.git/hooks/post-commit.sample
./.git/hooks/post-receive.sample
./.git/hooks/post-update.sample
./.git/hooks/pre-applypatch.sample
./.git/hooks/pre-commit.sample
./.git/hooks/pre-rebase.sample
./.git/hooks/prepare-commit-msg.sample
./.git/hooks/update.sample
./.git/info
./.git/info/exclude
./.git/objects
./.git/objects/info
./.git/objects/pack
./.git/refs
./.git/refs/heads
./.git/refs/tags
$ echo "hello world" > hello.txt
$ git add hello.txt 
$ find .git/objects/
.git/objects/
.git/objects//3b
.git/objects//3b/18e512dba79e4c8300dd08aeb37f8e728b8dad //3b18451がブロブオブジェクト
.git/objects//info
.git/objects//pack
$ git rev-parse 3b18e
3b18e512dba79e4c8300dd08aeb37f8e728b8dad
$ git cat-file -p 3b18e512dba79e4c8300dd08aeb37f8e728b8dad
hello world
$ git ls-files -s
100644 3b18e512dba79e4c8300dd08aeb37f8e728b8dad 0	hello.txt
$ git write-tree
68aba62e560c0ebc3396e8ae9335232cd93a3f60 //68aba62がツリーオブジェクト
$ find .git/objects/
.git/objects/
.git/objects//3b
.git/objects//3b/18e512dba79e4c8300dd08aeb37f8e728b8dad
.git/objects//68
.git/objects//68/aba62e560c0ebc3396e8ae9335232cd93a3f60
.git/objects//info
.git/objects//pack
$ git cat-file -p 68aba6
100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad	hello.txt //ツリーオブジェクト68aba62にブロブオブジェクト3b18451が含まれている
$ pwd
/tmp/hello
$ mkdir subdir
$ cp hello.txt subdir/
$ git add subdir/hello.txt 
$ find .git/objects/ //hello.txtは同内容なのでブロブオブジェクトが増えてない。
.git/objects/
.git/objects//3b
.git/objects//3b/18e512dba79e4c8300dd08aeb37f8e728b8dad
.git/objects//68
.git/objects//68/aba62e560c0ebc3396e8ae9335232cd93a3f60
.git/objects//info
.git/objects//pack
$ git write-tree
492413269336d21fac079d4a4672e55d5d2147ac //ツリーオブジェクト作成
$ git cat-file -p 4924132 //ツリーオブジェクト4924132にはブロブオブジェクト3b18451とツリーオブジェクト68aba62が含まれている
100644 blob 3b18e512dba79e4c8300dd08aeb37f8e728b8dad	hello.txt
040000 tree 68aba62e560c0ebc3396e8ae9335232cd93a3f60 	subdir
$ find .git/objects/
.git/objects/
.git/objects//3b
.git/objects//3b/18e512dba79e4c8300dd08aeb37f8e728b8dad
.git/objects//49
.git/objects//49/2413269336d21fac079d4a4672e55d5d2147ac
.git/objects//68
.git/objects//68/aba62e560c0ebc3396e8ae9335232cd93a3f60
.git/objects//info
.git/objects//pack
$ echo -n "Commit a file that says hello\n" | git commit-tree 492413269336d21fac079d4a4672e55d5d2147ac //コミットオブジェクト作成
d3d44ff23d19640927372ab015555fd1608c96b8
$ git cat-file -p d3d44ff //コミットオブジェクトd3d44ffにはツリーオブジェクト4924132が含まれている
tree 492413269336d21fac079d4a4672e55d5d2147ac
author ...
committer ...

Commit a file that says hello
$ git tag -m "Tag version 1.0" V1.0 d3d44ff //タグうち
$ git rev-parse V1.0
fe62f3f8418b24a256def3d14bd52962b5fe89f3 //タグオブジェクト作成
$ git cat-file -p fe62f3f //タグオブジェクトfe62f3fにはコミットオブジェクトd3d44ffが含まれている
object d3d44ff23d19640927372ab015555fd1608c96b8
type commit
tag V1.0
tagger ...

Tag version 1.0