Your SlideShare is downloading. ×
Dive into .git 日本語版
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Dive into .git 日本語版

3,936
views

Published on

社内勉強会で使った資料です

社内勉強会で使った資料です


1 Comment
8 Likes
Statistics
Notes
  • gitの内部動作や、もろもろのファイルをみるためのコマンドは以下のサイトに詳しかったです。御参考までに。
    http://git-scm.com/book/ja/Git%E3%81%AE%E5%86%85%E5%81%B4
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
3,936
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
1
Likes
8
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Dive into .git 2012-05-24 西尾泰和
  • 2. about• このスライドは社内勉強会で10分間で gitの中身を見てみるデモをするために アンチョコとして作られたものです。• 1ページ16スライドで印刷すると1枚で 収まるのでちょうどいいかと思います。
  • 3. Gitよくわからん?• 「Gitのいろんな概念が難しい」?• じゃあ概念は置いといて、 「物理的にはどうなってんの?」 を確認してみよう!• Gitがどんなものかイメージしやすくなれば幸い
  • 4. 実験用のリポジトリを作る$ mkdir test 種も仕掛けもないただの$ cd test 空のディレクトリを作る$ ls -a. ..$ git initInitialized empty Git repositoryin .../test/.git/ ←できた! $ git init test でもOK
  • 5. $ ls -a. .. .git リポジトリができた!
  • 6. 中身を見てみよう$ cd .git$ tree.|-- HEAD|-- config|-- description|-- hooks|-- info| `-- exclude|-- objects| |-- info| `-- pack`-- refs |-- heads `-- tags hooksの中身は省略した
  • 7. コミットしたら 何が変わる?$ cd ..$ touch README$ git add README$ git commit -m “initial commit”[master (root-commit) 4dd66d3]initial commit
  • 8. objectsが増えた$ tree .git/objects.git/objects|-- 4d| `-- d66d3a32a66f3578317717ccfb18|-- 54| `-- 3b9bebdc6bd5c4b22136034a95dd|-- e6| `-- 9de29bb2d1d6434b8b29ae775ad8|-- info`-- pack 長いファイル名の末尾は省略した 他にも変わる部分があるが今回は割愛
  • 9. 中を見てみよう! 表示スクリプトを作る$ cat > show.py#!/usr/bin/env pythonimport sysimport zlibdata = file(sys.argv[1], "rb").read()data = zlib.decompress(data)print repr(data) 以下ではshow.py。chmod +xを忘れずに
  • 10. Commitの中身$ ./show.py .git/objects/4d/d6...commit 201x00tree 543b...nauthor NISHIO Hirokazu <...> 1337655529 +0900ncommitter NISHIO Hirokazu <...> 1337655529 +0900nninitial commitn ハッシュ値はコミット時のメッセージに表示されている 適当に改行を入れた tree 543bに注目
  • 11. Treeの中身$ ./show.py 54/3b...tree 34x00100644 READMEx00xe6x9dxe2x9b... 適当に改行を入れた e69bに注目
  • 12. Blobの中身$ ./show.py e6/9d...blob 0x00 これがREADMEの中身 今は空なのでサイズが0 x00の後に何もない
  • 13. ファイル名$ python -c “import hashlib;hashlib.sha1(blob 0x00).hexdigest()”e69de29b... 実は中身のSHA1ハッシュ!
  • 14. まとめ• リポジトリは.git/の中に入っている• .git/objects/に、sha1ハッシュを名前にし、 値をzlibで圧縮して、いろいろ入っている• 「いろいろ」の中にはcommitオブジェクト、 treeオブジェクト、blobオブジェクト• 今回はtagやrefsの話は割愛(次回?)
  • 15. やってみよう• READMEを編集してどう変わるか観察しよう• 新しいcommitオブジェクトには 「parent <ハッシュ値>」の行がある• 新しいblobにはREADMEの内容が入っている• 新しいファイルを追加してみよう。Treeはどう 変わる?• ファイルに追記したら?blobは差分?全体?
  • 16. おまけ• git show --format=rawがぜんぜんraw じゃなくて使いものにならない話
  • 17. 中を見てみよう$ git show --format=raw 4dd6commit 4dd66d3a32a66f3578317717ccfb1876d43034eatree 543b9bebdc6bd5c4b22136034a95dd097a57d3ddauthor NISHIO Hirokazu <...> 1337138246 +0900committer NISHIO Hirokazu <...> 1337138246 +0900 initial commitdiff --git a/README b/READMEnew file mode 100644index 0000000..e69de29 メールアドレスは省略した
  • 18. Treeの中身$ git show --format=raw 543btree 543bREADME
  • 19. Blobの中身$ git show --format=raw e69d 何も表示されない
  • 20. おかしい$ git show --format=raw 543btree 543bREADME これの中身がe69d だという情報はどこ? というわけで表示スクリプトを作った
  • 21. Q&A• Q: スクリプト作らなくてもgunzipとかで解凍す れば良いのでは?• A: zlibで圧縮されてはいるが、zipファイルとして validなフォーマットにはなっていないので解凍で きなかった。もしもっと手軽な方法があれば教え て下さい。