/var/log/messages

Oct 20, 2014 - 2 minute read - Comments - Git

A Hackers Guide to Git

週末開催な #okidevops で以下を確認しつつメモをとったので最後まで読んでみます。

ぶっちゃけ、データ構造 (?) については Junio C Hamano さんの入門 Git に書いてあるのですが英語がどこまで理解できるか勝負ってことで (何

Repositories

  • Git repository はシンプルな key-value data store とのこと
  • Blob は Git における基本的なデータ型、byte の纒まり、通常 file のバイナリ表現?
  • Tree object は blob または他の tree object へのポインタを持つ
  • Commit object は一つの tree object を指してて commit に関するメタデータ (parent commit など) を持つ
  • Tag object は一つの commit object を指してていくつかのメタデータを持つ
  • Reference は commit とか tag などの単一のオブジェクトを指すもの?
  • Git repository はプロジェクトの root directory にある .git ディレクトリ
  • リポジトリは git init コマンドで作成される
  • 重要なディレクトリとして Git が保管する全ての object が保管される .git/object と全ての Reference が保管される .git/refs がある

Tree Objects

  • Git における tree object はディレクトリと考えることができる
  • tree object (directory) は blobs (files) のリストと他の tree objects (sub directories) を持つ
  • README と src/hello.c なリポジトリで確認
  • 二つの tree object がある (root directory と src directory)
  • blob も tree も hash なキーを持っているのか

Commits

  • commit object は基本的にポインタ
  • 重要なメタデータのいくつかを持つ
  • commit 自体は いくつかの metadata から作られた hash を持つ
  • commit 時の tree (Tree Object で見たように Git は working tree 全体を再帰的に tree の中に作ることができる)
  • parent commit の hash (commit は必ず直前 commit の hash を持つ)
  • 作成者の名前と email address と変更された時刻
  • committer の名前と email address と commit が作成された時刻
  • commit message
  • git show –format=raw というコマンドの出力について
  • たしかに commit object と tree object がある

References

  • Git では object は hash で識別される
  • Git で云々する場合、hash を知っておくことは大切
  • hash 覚えとけ、を要求されるorz
  • そのために refs ってものがあると
  • .git/refs に投入される
  • branch って reference なのか
  • .git/refs/heads/master というファイル
  • 中身は hash (多分 master の HEAD)
  • show および rev-parse というコマンド
  • git にも特別な reference として HEAD がある (svn とかにもあるんかな
  • む、.git/HEAD は refs/head/master への参照とか書いてあるな
  • branch の HEAD を指しています

Branches

  • git の branch は最も強力な機能の一つ
  • reference だから軽量な実装ができるのか
  • refs/heads のソレを増やせば良いのか
  • .git/HEAD の参照先が current branch の HEAD なのね

Tags

  • git の tag には lightwaight と annotated の二種類があるとのこと
  • 表面てきにはこの二つは似てる
  • references は .git/refs/tag に格納される

うーん、ここはちょっとスルーで。

Merging 以降は別途で。