ā§§ā§Ļ.ā§¨Â āĻāĻŋāĻ āĻāύā§āĻāĻžāϰāύāĻžāϞāĻ¸Â – āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻāϏ
Â
āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻāϏÂ
āĻāĻŋāĻ āĻāĻāĻāĻŋ āĻāύā§āĻā§āύā§āĻ-āĻāĻĄā§āϰā§āϏā§āĻŦāϞ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽāĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻāϏāϞ⧠āĻāĻŋ āĻŦā§āĻāĻžā§? āĻāϰ āĻŽāĻžāύ⧠āĻšāĻā§āĻā§, āĻāĻŋāĻ āĻāϰ āĻā§āϰ⧠āĻāĻāĻāĻŋ āĻā§-āĻā§āϝāĻžāϞ⧠āĻĄāĻžāĻāĻž āϏā§āĻā§āϰ āĻāĻā§āĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦā§āĻāĻž āϝāĻžā§ āϝā§, Git āϰāĻŋāĻĒā§āĻāĻŋāĻā§āϰāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻĒāύāĻŋ āϝ⧠āĻā§āύ āϧāϰāύā§āϰ āĻāύā§āĻā§āύā§āĻ āϰāĻžāĻāϤ⧠āĻĒāĻžāϰāĻŦā§āύ, āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻāĻŋāĻ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻ āĻā§ āϤā§āϰāĻŋ āĻāϰ⧠āĻĨāĻžāĻā§ āϝāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻŦāĻŋāώā§āϝāϤ⧠āĻāĻ āĻāύā§āĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻĒā§āĻž āϝāĻžā§āĨ¤
āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻŽāϰāĻž git hash-object āĻĒā§āϞāĻŽā§āĻŦāĻŋāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻĻā§āĻāĻŦāĨ¤ āĻāĻāĻŋ āĻā§ā§āĻāĻāĻŋ āĻĄā§āĻāĻž āĻā§āϰāĻšāĻŖ āĻāϰā§, āϏā§āĻā§āϞā§āĻā§ .git/objects āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠(āĻ
āĻŦāĻā§āĻā§āĻ āĻĄā§āĻāĻžāĻŦā§āϏ) āϏāĻāϰāĻā§āώāĻŖ āĻāϰ⧠āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻ āĻā§ āϤā§āϰāĻŋ āĻāϰ⧠āϝāĻž āϏā§āĻ āĻĄāĻžāĻāĻž āĻ
āĻŦāĻā§āĻā§āĻāĻā§āϞā§āϰ āύāĻŋāϰā§āĻĻā§āĻļāĻ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤
āĻĒā§āϰāĻĨāĻŽāϤ, āĻāĻŽāĻžāĻĻā§āϰāĻā§ āĻāĻāĻāĻŋ Git āϰāĻŋāĻĒā§āĻāĻŋāĻāϰāĻŋ āĻāύāĻŋāĻļāĻŋā§āĻžāϞāĻžāĻāĻ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻŋāĻ āĻ
āĻŦāĻā§āĻā§āĻā§āϰ āĻāĻŋāϤāϰ⧠āϝ⧠āĻāĻŋāĻā§ āύā§āĻ āĻāĻāĻŋ āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤Â
$ git init test
Initialized empty Git repository in /tmp/test/.git/
$ cd test
$ find .git/objects
.git/objects
.git/objects/info
.git/objects/pack
āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻāĻŋ āĻāύāĻŋāĻļāĻŋā§āĻžāϞāĻžāĻāĻ āĻāϰā§āĻā§ āĻāĻŦāĻ āĻāϤ⧠āĻĒā§āϝāĻžāĻ āĻāĻŦāĻ āĻāύāĻĢā§ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āĻā§, āϤāĻŦā§ āĻāĻāĻžāύ⧠āĻā§āύāĻ āĻĢāĻžāĻāϞ āύā§āĻāĨ¤ āĻāĻāύ, āĻāĻāĻāĻŋ āύāϤā§āύ āĻĄā§āĻāĻž āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻŋāĻ āĻšā§āϝāĻžāĻļ-āĻ āĻŦāĻā§āĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āϝāĻžāĻ āĻāĻŦāĻ āĻŽā§āϝāĻžāύā§āϝāĻŧāĻžāϞāĻŋ āĻāĻāĻŋāĻā§ āύāϤā§āύ āĻāĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āϝāĻžāĻāĨ¤
$ echo 'test content' | git hash-object -w --stdin
d670460b4b4aece5915caf5c68d12f560a9fe3e4
āϏāĻšāĻāĻāĻžāĻŦā§ āĻŦāϞāϤ⧠āĻā§āϞā§, git hash-object āĻāĻĒāύāĻžāϰ āĻĻā§ā§āĻž āĻāύā§āĻāĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻā§āϰāĻšāĻŖ āĻāϰāĻŦā§ āĻāĻŦāĻ āĻāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻāĻĒāύāĻžāĻā§ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻ āĻā§ āϤā§āϰāĻŋ āĻāϰ⧠āĻĻāĻŋāĻŦā§ āĻāĻŦāĻ āĻāĻ āĻāύā§āĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻāĻ āĻā§ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§āĻ Git database āĻ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŦā§āĨ¤ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻā§ āϰāĻŋāĻāĻžāϰā§āύ āύāĻž āĻāϰā§, āĻ āĻŦā§āĻā§āĻā§āĻāĻŋāĻā§ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āĻāύā§āϝā§āĻ -w āĻ āĻĒāĻļāύāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻšā§ā§ āĻĨāĻžāĻā§āĨ¤ āϏāĻŦāĻļā§āώā§, âstdin āĻ āĻĒāĻļāύāĻāĻŋ git hash-objects āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠stdin āĻĨā§āĻā§ āĻāύā§āĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻŦā§āϰ āĻāϰ⧠āύāĻŋā§ā§ āĻāϏā§āĨ¤ āĻ āύā§āϝāĻĨāĻžā§, āĻāĻ āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻļā§āώ⧠āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āύā§āĻāĻŽ āĻĻā§ā§āĻžāϰ āĻĻāϰāĻāĻžāϰ āĻšā§, āϝ⧠āĻĢāĻžāĻāϞ āĻĨā§āĻā§ āĻĒāϰāĻŦāϰā§āϤā§āϤ⧠āĻāύā§āĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻŦā§āϰ āĻāϰ⧠āύāĻŋā§ā§ āĻāϏāĻŦā§āĨ¤Â
āĻāĻĒāϰā§āĻā§āϤ āĻāĻŽāĻžāύā§āĻĄ āĻĨā§āĻā§ āĻĢāϞāĻžāĻĢāϞāϏā§āĻŦāϰā§āĻĒ ā§Ēā§Ļ āĻā§āϝāĻžāϰāĻžāĻā§āĻāĻžāϰā§āϰ āĻāĻāĻāĻŋ āĻā§āĻāϏāĻžāĻŽ āĻšā§āϝāĻžāĻļ āϤā§āϰāĻŋ āĻšā§āĨ¤ āĻāĻāĻŋ āĻāĻāĻāĻŋ SHA-1 āĻāĻžāĻāĻĒā§āϰ āĻšā§āϝāĻžāĻļ āϝā§āĻāĻžāύ⧠āĻāĻāĻāĻŋ āĻšā§āĻĄāĻžāϰāϏāĻš āĻāĻŽāĻžāĻĻā§āϰ āĻāύā§āĻā§āĻāĻā§āϞ⧠āϏāĻāϰāĻā§āώāĻŋāϤ āĻĨāĻžāĻā§āĨ¤ āĻāĻāύ āĻāĻŽāϰāĻž āĻĻā§āĻāĻŦ āĻāĻŋāĻāĻžāĻŦā§ git āĻāĻ āĻāĻžāĻāĻāĻŋ āĻāϰā§āĨ¤Â
$ find .git/objects -type .git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4
āϝāĻĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϰ āĻĻāĻŋāĻā§ āϤāĻžāĻāĻžāĻ āϤāĻžāĻšāϞ⧠āĻĻā§āĻāĻŦ āϝ⧠āĻāĻāĻŋ āĻ āύāϤā§āύ āĻāύā§āĻā§āύā§āĻā§āϰ āĻāύā§āϝ⧠āĻāĻāĻāĻŋ āύāϤā§āύ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰā§āĻā§āĨ¤ āĻĒā§āϰāĻžāĻĨāĻŽāĻŋāĻāĻāĻžāĻŦā§ āĻāĻāĻžāĻŦā§āĻ āĻāĻŋāĻ, āĻāύā§āĻā§āύā§āĻāĻā§ āĻšā§āĻĄāĻžāϰāϏāĻš SHA-1 āĻā§āĻāϏāĻžāĻŽā§ āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰ⧠āĻĨāĻžāĻā§āĨ¤ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāĻāĻŋāϰ āύāĻžāĻŽāĻāϰāĻŖ āĻšā§ SHA-1 āĻāϰ āĻĒā§āϰāĻĨāĻŽ ⧍ āĻā§āϝāĻžāϰāĻžāĻā§āĻāĻžāϰ āύāĻŋā§ā§ āĻāĻŦāĻ āĻŦāĻžāĻāĻŋ ā§Šā§Ž āĻā§āϝāĻžāϰāĻžāĻā§āĻāĻžāϰ āĻĻāĻŋā§ā§ āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽāĻāϰāĻŖ āĻšā§āĨ¤Â
āĻāĻāĻŦāĻžāϰ āϝāĻāύ āĻ āĻŦāĻā§āĻā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāύā§āĻā§āύā§āĻ āĻĨāĻžāĻāĻŦā§, git cat-file āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏā§āĻ āĻāύā§āĻā§āύā§āĻāĻā§ āĻĻā§āĻāĻž āϝāĻžāĻŦā§āĨ¤ git āĻ āĻŦāĻā§āĻā§āĻāĻā§āϞā§āĻā§Â āĻĻā§āĻāĻžāϰ āĻāύā§āϝ⧠āĻāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āϏāϰā§āĻŦā§āϏāϰā§āĻŦāĻž āĻšāĻŋāϏāĻžāĻŦā§ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻ āĻāϰā§āĨ¤ cat-file āĻāĻŽāĻžāύā§āĻĄāĻāĻŋāϤ⧠-p āϝā§āĻ āĻāϰāϞā§, āĻāĻāĻŋ āĻĒā§āϰāĻĨāĻŽā§ āĻāύā§āĻā§āύā§āĻā§āϰ āϧāϰāĻŖ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰā§, āϤāĻžāϰāĻĒāϰ āĻāĻāĻŋāĻā§ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āϰāĻĻāϰā§āĻļāύ āĻāϰā§āĨ¤Â
$ git cat-file -p d670460b4b4aece5915caf5c68d12f560a9fe3e4
test content
āĻāĻāύ āĻāĻĒāύāĻŋ āĻāĻŋāĻā§ āϝ⧠āĻā§āĻ¨Â āĻāύā§āĻā§āύā§āĻ āϝā§āĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύ āĻāĻŦāĻ āĻĒā§āϞ āĻ āĻāϰāϤ⧠āĻĒāĻžāϰāĻŦā§āύāĨ¤ āĻĢāĻžāĻāϞā§āϰ āĻŽāϧā§āϝā§āĻ āĻāĻāĻžāĻŦā§ āĻāύā§āĻā§āύā§āĻ āϝā§āĻā§āϤ āĻāϰāĻž āϝāĻžā§āĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āĻāĻāĻĻāĻŽ āϏāĻšāĻ āĻāĻŋāĻā§ āĻāĻžāϰā§āϏāύ āĻāύā§āĻā§āϰā§āϞ āĻāϰāĻž āϝāĻžāĻāĨ¤ āĻĒā§āϰāĻĨāĻŽā§, āĻāĻāĻāĻŋ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāĻŋ āĻāĻŦāĻ āĻāĻ āĻāύā§āĻā§āύā§āĻāĻā§āϞā§āĻā§ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŋāĨ¤
$ echo 'version 1' > test.txt
$ git hash-object -w test.txt
83baae61804e65cc73a7201a7252750c76066a30
āĻāĻāύ āĻāĻŋāĻā§ āύāϤā§āύ āĻāύā§āĻā§āύā§āĻ āϝā§āĻā§āϤ āĻāϰ⧠āϏā§āĻāĻŋāĻā§ āĻĢāĻžāĻāϞ⧠āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻŋāĨ¤
$ echo 'version 2' > test.txt
$ git hash-object -w test.txt
1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
āĻĄāĻžāĻāĻžāĻŦā§āϏā§āϰ āĻĻāĻŋāĻā§ āϞāĻā§āώā§āϝ āĻāϰāϞ⧠āĻĻā§āĻāĻž āϝāĻžāĻŦā§ āϝā§, āϏā§āĻāĻžāύ⧠āύāϤā§āύ āĻĢāĻžāĻāϞāĻāĻŋāϰ āĻāĻā§ āϏāĻāϏā§āĻāϰāĻŖāĻ āϏāĻāϰāĻā§āώāĻŋāϤ āĻāĻā§āĨ¤Â
$ find .git/objects -type f
.git/objects/1f/7a7a472abf3dd9643fd615f6da379c4acb3e3a
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3
āĻāĻŽāϤāĻžāĻŦāϏā§āĻĨāĻžā§, test.txt āĻĢāĻžāĻāϞā§āϰ āϞā§āĻāĻžāϞ āĻāĻĒāĻŋāĻāĻŋ āĻĄāĻŋāϞā§āĻ āĻāϰā§, git āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĒā§āύāϰāĻžā§ āĻāĻŋāĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ āĻĨā§āĻā§ āϏā§āĻāĻŋāĻā§ āĻĒā§āύā§āϰā§āĻĻā§āϧāĻžāϰ āĻāϰāĻžāϰ āϝāĻžāĻŦā§, āϝāĻžāϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻāϏā§āĻāϰāĻŖ āĻāĻā§ āϏāĻāϰāĻā§āώāĻŋāϤ āĻāĻŋāϞāĨ¤
$ git cat-file -p 83baae61804e65cc73a7201a7252750c76066a30 > test.txt
$ cat test.txt
version 1
āĻ āĻĨāĻŦāĻž āĻĻā§āĻŦāĻŋāϤā§ā§ āϏāĻāϏā§āĻāϰāĻŖāĻ
$ git cat-file -p 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a > test.txt
$ cat test.txt
version 2
āĻāĻŋāύā§āϤā§, āĻĢāĻžāĻāϞā§āϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āϏāĻāϏā§āĻāϰāĻŖā§āϰ āĻāύā§āϝ⧠SHA-1 āĻāϰ āĻŽāĻžāύ āĻŽāύ⧠āϰāĻžāĻāĻžāĻāĻž āĻŦāĻžāϏā§āϤāĻŦāϏāĻŽā§āĻāϤ āύāĻžāĨ¤ āĻāĻŦāĻ āϏāĻŋāϏā§āĻā§āĻŽā§ āĻāύā§āĻā§āύā§āĻ āĻŦā§āϝāϤā§āϤ āĻā§āύ āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽ āϏāĻāϰāĻā§āώāĻŋāϤ āĻšā§ āύāĻžāĨ¤ āĻāĻ āϧāϰāĻŖā§āϰ āĻ āĻŦāĻā§āĻā§āĻāĻā§ blob āĻŦāϞāĻž āĻšā§āĨ¤ git cat-file -t āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻŋāĻ āĻĨā§āĻā§ āϝ⧠āĻā§āύ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āĻāĻžāĻāĻĒ āĻāĻŦāĻ āĻāĻāĻŋāϰ SHA-1 āĻā§ āĻĒāĻžāĻā§āĻž āϝāĻžā§āĨ¤Â
$ git cat-file -t 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a
blob
āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻÂ
āĻĒāϰāĻŦāϰā§āϤ⧠āϧāϰāĻŖā§āϰ āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻāĻŽāϰāĻž āĻŦāĻŋāĻļā§āϞā§āώāĻŖ āĻāϰāĻŦ āϝāĻž āĻšāĻā§āĻā§Â āĻā§āϰāĻŋ , āϝāĻž āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽ āϏāĻāϰāĻā§āώāĻŖā§āϰ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰ⧠āĻāĻŦāĻ āĻāĻĒāύāĻžāĻā§ āĻĢāĻžāĻāϞāĻā§āϞāĻŋāϰ āĻāĻāĻāĻŋ āĻā§āϰā§āĻĒāĻā§ āĻāĻāϏāĻžāĻĨā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻžāϰ āĻ āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤ āĻāĻŋāĻ āĻāĻāύāĻŋāĻā§āϏ āĻĢāĻžāĻāϞ āϏāĻŋāϏā§āĻā§āĻŽā§āϰ āĻŽāϤ⧠āĻāĻāĻāĻŋ āĻĒāĻĻā§āϧāϤāĻŋāϤ⧠āĻāύāĻā§āύā§āĻ āϏā§āĻā§āϰ āĻāϰā§, āϤāĻŦā§ āĻāĻŋāĻā§āĻāĻž āϏāĻšāĻāĻāĻžāĻŦā§āĨ¤āϏāĻŽāϏā§āϤ āĻāύāĻā§āύā§āĻ āĻā§āϞā§Â āĻā§āϰāĻŋ āĻāĻŦāĻ āĻŦā§āϞāĻŦ āĻ āĻŦāĻā§āĻā§āĻ āĻšāĻŋāϏāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧ, UNIX āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻāύā§āĻā§āϰāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻŽā§āĻĒāϰā§āĻāĻŋāϤ āĻā§āϰāĻŋ āĻāĻŦāĻ āĻāύā§āĻĄ āĻŦāĻž āĻĢāĻžāĻāϞā§āϰ āĻāύāĻā§āύā§āĻ āϏāĻžāĻĨā§ āĻāĻŽ āĻŦāĻž āĻŦā§āĻļāĻŋ āϏā§āĻŦāĻŋāϧāĻžāĻāύāĻ āĻŦā§āϞāĻŦ āϏāĻšāĨ¤Â
Â
āĻāĻāĻāĻŋ āĻāĻāĻ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻā§ āĻāĻ āĻŦāĻž āĻāĻāĻžāϧāĻŋāĻ āĻāύā§āĻā§āϰāĻŋ āĻĨāĻžāĻā§, āϝāĻžāϰ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻšāϞ āĻāĻāĻāĻŋ āĻŦā§āϞāĻŦ āĻŦāĻž āϏāĻžāĻŦāĻā§āϰāĻŋāϰ SHA-1 āĻšā§āϝāĻžāĻļ āĻāϰ āϏāĻžāĻĨā§ āϝā§āĻā§āϤ āĻŽā§āĻĄ, āĻāĻžāĻāĻĒ āĻāĻŦāĻ āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽāĨ¤ āĻāĻĻāĻžāĻšāϰāĻŖāϏā§āĻŦāϰā§āĻĒ, āϧāϰāĻž āϝāĻžāĻ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻāĻāĻŋ āĻĒā§āϰāĻā§āĻā§āĻ āĻāĻā§ āϝā§āĻāĻžāύ⧠āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻāϤāĻŽ āĻā§āϰāĻŋ āĻĻā§āĻāϤ⧠āĻāϰāĻāĻŽ āĻāĻŋāĻā§āĻāĻž āĻāĻŽāύ āĻĻā§āĻāĻžāĻā§āĻā§:
$ git cat-file -p master^{tree}
100644 blob a906cb2a4a904a152e80877d4088654daad0c859 README
100644 blob 8f94139338f9404f26296befa88755fc2598c289 Rakefile
040000 tree 99f1a6d12cb4b6f19c8655fca46c3ecf317074e0 lib
master^{tree} āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻāĻā§ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰ⧠āϝāĻž āĻāĻĒāύāĻžāϰ āĻŽāĻžāϏā§āĻāĻžāϰ āĻŦā§āϰā§āϝāĻžāĻā§āĻā§āϰ āĻļā§āώ āĻāĻŽāĻŋāĻ āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāϰā§āĻĻā§āĻļāĻŋāϤ āĻšāϝāĻŧāĨ¤ āϞāĻā§āώā§āϝ āĻāϰā§āύ āϝ⧠lib āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻāĻāĻāĻŋ āĻŦā§āϞāĻŦ āύāϝāĻŧ āĻŦāϰāĻ āĻ āύā§āϝ āĻā§āϰāĻŋ āĻāϰ āύāĻŋāϰā§āĻĻā§āĻļāĻ:
$ git cat-file -p 99f1a6d12cb4b6f19c8655fca46c3ecf317074e0
100644 blob 47c6340d6459e05787f644c2447d2595f5d3a54b simplegit.rb
āĻāĻĒāύāĻŋ āĻā§āύ āĻļā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύ āϤāĻžāϰ āĻāĻĒāϰ āύāĻŋāϰā§āĻāϰ āĻāϰā§,master^{tree} āϏāĻŋāύāĻā§āϝāĻžāĻā§āϏ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻĒāύāĻŋ āĻāϰāĻ°Â āĻāĻ°Â āϏāĻŽā§āĻŽā§āĻā§āύ āĻšāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
āĻāĻāύā§āĻĄā§āĻā§āϰ āϏāĻŋāĻāĻŽāĻĄāĻŋāϤā§, ^ āĻ
āĻā§āώāϰāĻāĻŋ escaping āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻšāϝāĻŧ, āϤāĻžāĻ āĻāĻāĻŋ āĻāĻĄāĻŧāĻžāϤ⧠āĻāĻĒāύāĻžāĻā§ āĻĻā§āĻāĻŦāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāĻ°Â āĻāϰāϤ⧠āĻšāĻŦā§: git cat-file -p master^^{tree}āĨ¤
āĻĒāĻžāĻāϝāĻŧāĻžāϰāĻļā§āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻāĻŋāĻā§ āĻā§āϞāĻāĻžāĻŦā§ āĻĒāĻžāϰā§āϏ āĻāϰāĻž āĻāĻĄāĻŧāĻžāϤ⧠{} āĻ
āĻā§āώāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāĻāĻžāϰāĻā§āϞāĻŋāĻā§ āĻā§āĻ āĻāϰāϤ⧠āĻšāĻŦā§: git cat-file -p ‘master^{tree}’āĨ¤
āĻāĻŋāĻ āϝ⧠āĻĄā§āĻāĻž āϏāĻā§āĻāϝāĻŧ āĻāϰāĻā§ āϤāĻž āĻ āύā§āĻāĻāĻž āĻāϰāĻāĻŽ āĻĻā§āĻāĻžāϝāĻŧ:

āĻāĻĒāύāĻŋ āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āϏāĻšāĻā§āĻ āĻāĻĒāύāĻžāϰ āύāĻŋāĻā§āϰ āĻā§āϰāĻŋ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻŋāĻ āϏāĻžāϧāĻžāϰāĻŖāϤ āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋāϝāĻŧāĻž āĻŦāĻž āĻāύā§āĻĄā§āĻā§āĻ¸Â āĻ āĻŦāϏā§āĻĨāĻž āύā§ā§ āĻāĻŦāĻ āϏā§āĻāĻžÂ āĻĨā§āĻā§ āĻā§āϰāĻŋ āĻāϰ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āĻāĻāĻāĻŋ āϏāĻŋāϰāĻŋāĻ āϞāĻŋāĻā§ āĻāĻāĻāĻŋ āĻā§āϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āĨ¤ āϏā§āϤāϰāĻžāĻ, āĻāĻāĻāĻŋ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϤā§, āĻāĻĒāύāĻžāĻā§ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻŋāĻā§ āĻĢāĻžāĻāϞ āϏā§āĻā§āĻ āĻāϰ⧠āĻāĻāĻāĻŋ āĻāύā§āĻĄā§āĻā§āĻ¸Â āϏā§āĻ āĻāĻĒ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤Â
āĻāĻāĻāĻŋ āĻāĻāĻ āĻāύā§āĻā§āϰāĻŋ–āĻāĻĒāύāĻžāϰ test.txt āĻĢāĻžāĻāϞā§āϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻāϏā§āĻāϰāĻŖ –āĻāϰ āϏāĻžāĻšāĻžāϝā§āϝ⧠āĻāĻāĻāĻŋ āĻāύā§āĻĄā§āĻā§āĻ¸Â āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻāĻĒāύāĻŋ āĻĒā§āϞāĻžāĻŽā§āĻŦāĻŋāĻ āĻāĻŽāĻžāύā§āĻĄ git update-index āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āύāϤā§āύ āϏā§āĻā§āĻāĻŋāĻ āĻāϞāĻžāĻāĻžāϝāĻŧ test.txt āĻĢāĻžāĻāϞā§āϰ āĻāĻā§āϰ āϏāĻāϏā§āĻāϰāĻŖāĻāĻŋ āĻā§āϤā§āϰāĻŋāĻŽāĻāĻžāĻŦā§ āϝā§āĻā§āϤ āĻāϰāϤ⧠āĻāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āύāĨ¤ āĻāĻĒāύāĻžāĻā§ āĻ āĻŦāĻļā§āϝāĻ –add āĻŦāĻŋāĻāϞā§āĻĒāĻāĻŋ āĻĒāĻžāϏ āĻāϰāϤ⧠āĻšāĻŦā§ āĻāĻžāϰāĻŖ āĻĢāĻžāĻāϞāĻāĻŋ āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋāϝāĻŧāĻžāϤ⧠āĻāĻāύāĻ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύā§āĻ (āĻāĻāύāĻ āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋāϝāĻŧāĻž āϏā§āĻ āĻāĻĒ āĻāϰāĻž āĻšāϝāĻŧāύāĻŋ) āĻāĻŦāĻ –cacheinfo āĻāĻžāϰāĻŖ āĻāĻĒāύāĻŋ āϝ⧠āĻĢāĻžāĻāϞāĻāĻŋ āϝā§āĻ āĻāϰāĻā§āύ āϏā§āĻāĻŋ āĻāĻĒāύāĻžāϰ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āύā§āĻ āĻāĻŋāύā§āϤ⧠āĻāĻĒāύāĻžāϰ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻāĻā§āĨ¤ āϤāĻžāϰāĻĒāϰ, āĻāĻĒāύāĻŋ āĻŽā§āĻĄ, SHA-1, āĻāĻŦāĻ āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύ:
$ git update-index --add --cacheinfo 100644 \
83baae61804e65cc73a7201a7252750c76066a30 test.txt
āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻĒāύāĻŋ 100644 āĻāϰ āĻāĻāĻāĻŋ āĻŽā§āĻĄ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰāĻā§āύ, āϝāĻžāϰ āĻŽāĻžāύ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻĢāĻžāĻāϞāĨ¤ āĻ āύā§āϝāĻžāύā§āϝ āĻŦāĻŋāĻāϞā§āĻĒāĻā§āϞāĻŋ āĻšāϞ 100755, āϝāĻžāϰ āĻŽāĻžāύ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻā§āϏāĻŋāĻāĻŋāĻāĻā§āĻŦāϞ āĻĢāĻžāĻāϞ; āĻāĻŦāĻ 120000, āϝāĻž āĻāĻāĻāĻŋ āϏāĻŋāĻŽā§āĻŦā§āϞāĻŋāĻ āϞāĻŋāĻā§āĻ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āĨ¤ āĻŽā§āĻĄāĻāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāύāĻŋāĻā§āϏ āĻŽā§āĻĄ āĻĨā§āĻā§ āύā§āĻāϝāĻŧāĻž āϤāĻŦā§ āĻāĻāĻŋ āĻ āύā§āĻ āĻāĻŽ āĻĢā§āϞā§āĻā§āϏāĻŋāĻŦāϞ ââāĻāĻ āϤāĻŋāύāĻāĻŋ āĻŽā§āĻĄāĻ āĻāĻāĻŽāĻžāϤā§āϰ āϝāĻž āĻāĻŋāĻ-āĻ āĻĢāĻžāĻāϞā§āϰ (āĻŦā§āϞāĻŦ) āĻāύā§āϝ āĻā§āϞāĻŋāĻĄÂ (āϝāĻĻāĻŋāĻ āĻ āύā§āϝāĻžāύā§āϝ āĻŽā§āĻĄāĻā§āϞāĻŋ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻāĻŦāĻ āϏāĻžāĻŦāĻŽāĻĄāĻŋāĻāϞāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻŦā§āϝāĻŦāĻšā§āϤ āĻšāϝāĻŧ)āĨ¤
Â
āĻāĻāύ, āĻāĻĒāύāĻŋ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻā§ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋāϝāĻŧāĻž āϞāĻŋāĻāϤ⧠git write-tree āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻā§āύ -w āĻŦāĻŋāĻāϞā§āĻĒā§āϰ āĻĒā§āϰāϝāĻŧā§āĻāύ āύā§āĻâââāĻāĻ āĻāĻŽāĻžāύā§āĻĄāĻāĻŋāĻā§ āĻāϞ āĻāϰāĻž āĻšāϞā§Â āϏā§āĻŦāϝāĻŧāĻāĻā§āϰāĻŋāϝāĻŧāĻāĻžāĻŦā§ āĻāύāĻĄā§āĻā§āϏā§āϰ āĻ āĻŦāϏā§āĻĨāĻž āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰāĻŦā§Â āϝāĻĻāĻŋ āϏā§āĻ āĻā§āϰāĻŋ āĻāĻāύāĻ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύāĻž āĻĨāĻžāĻā§:
$ git write-tree
d8329fc1cc938780ffdd9f94e0d364e0ea74f579
$ git cat-file -p d8329fc1cc938780ffdd9f94e0d364e0ea74f579
100644 blob 83baae61804e65cc73a7201a7252750c76066a30 test.txt
āĻāĻĒāύāĻŋ git cat-file āĻāĻŽāĻžāύā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āϝāĻžāĻāĻžāĻ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϝ⧠āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻā§āϰāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āϝāĻž āĻāĻĒāύāĻŋ āĻāĻā§ āĻĻā§āĻā§āĻāĻŋāϞā§āύ:
$ git cat-file -t d8329fc1cc938780ffdd9f94e0d364e0ea74f579
tree
āĻāĻĒāύāĻŋ āĻāĻāύ āĻāĻāĻāĻŋ āύāϤā§āύ āĻā§āϰāĻŋ āϤā§āϰāĻŋ āĻāϰāĻŦā§āύ test.txt āĻāϰ āĻĻā§āĻŦāĻŋāϤā§āϝāĻŧ āϏāĻāϏā§āĻāϰāĻŖ āĻāĻŦāĻ āĻāĻāĻāĻŋ āύāϤā§āύ āĻĢāĻžāĻāϞā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠:
$ echo 'new file' > new.txt
$ git update-index --cacheinfo 100644 \
1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
$ git update-index --add new.txt
āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋāϝāĻŧāĻžāϤ⧠test.txt āĻāϰ āύāϤā§āύ āϏāĻāϏā§āĻāϰāĻŖā§āϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ āύāϤā§āύ āĻĢāĻžāĻāϞ new.txt āϰāϝāĻŧā§āĻā§āĨ¤ āϏā§āĻ āĻā§āϰāĻŋāĻāĻŋ āϞāĻŋāĻā§āύ (āϏā§āĻā§āĻāĻŋāĻ āĻāϞāĻžāĻāĻžāϰ āĻ āĻŦāϏā§āĻĨāĻž āϰā§āĻāϰā§āĻĄ āĻāϰāĻž āĻŦāĻž āĻāĻāĻāĻŋ āĻā§āϰāĻŋāϰ āĻ āĻŦā§āĻā§āĻā§āĻā§āϰ āĻāύā§āĻĄā§āĻā§āϏ ) āĻāĻŦāĻ āĻĻā§āĻā§āύ āĻāĻāĻŋ āĻā§āĻŽāύ āĻĻā§āĻāĻžāĻā§āĻā§:
$ git write-tree
0155eb4229851634a0f03eb265b69f5a2d56f341
$ git cat-file -p 0155eb4229851634a0f03eb265b69f5a2d56f341
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
āϞāĻā§āώā§āϝ āĻāϰā§āύ āϝ⧠āĻāĻ āĻā§āϰāĻŋāϤ⧠āĻāĻāϝāĻŧ āĻĢāĻžāĻāϞ āĻāύā§āĻā§āϰāĻŋ āϰāϝāĻŧā§āĻā§ āĻāĻŦāĻ āĻāĻāĻŋāĻ āĻ¯ā§ Â test.txt SHA-1 āĻšāϞ āĻāĻā§āϰ (1f7a7a) “āϏāĻāϏā§āĻāϰāĻŖ 2” SHA-1āĨ¤ āĻļā§āϧ⧠āĻĻā§āĻāĻžāϰ āĻāύā§āϝ, āĻāĻĒāύāĻŋ āĻāĻāĻŋāϤ⧠āĻāĻāĻāĻŋ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻšāĻŋāϏāĻžāĻŦā§ āĻĒā§āϰāĻĨāĻŽ āĻā§āϰāĻŋ āĻāĻžÂ āϝā§āĻā§āϤ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻĒāύāĻŋ git read-tree āĻāϞ āĻāϰ⧠āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋā§āĻžāϤ⧠āĻā§āϰāĻŋ āϰāĻŋāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤ āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻĒāύāĻŋ āĻāĻ āĻāĻŽāĻžāύā§āĻĄā§āϰ āϏāĻžāĻĨā§ –prefix  āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻāĻāĻŋ āϏāĻžāĻŦāĻā§āϰāĻŋ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻĒāύāĻžāϰ āϏā§āĻā§āĻāĻŋāĻ āĻāϰāĻŋā§āĻžāϤ⧠āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻā§āϰāĻŋ āϰāĻŋāĻĄ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
$ git read-tree --prefix=bak d8329fc1cc938780ffdd9f94e0d364e0ea74f579
$ git write-tree
3c4e9cd789d88d8d89c1073707c3585e41b0e614
$ git cat-file -p 3c4e9cd789d88d8d89c1073707c3585e41b0e614
040000 tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579 bak
100644 blob fa49b077972391ad58037050f2a75f74e3671e92 new.txt
100644 blob 1f7a7a472abf3dd9643fd615f6da379c4acb3e3a test.txt
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āύāϤā§āύ āĻā§āϰāĻŋ āĻĨā§āĻā§ āĻāĻāĻāĻŋ āĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ āĻĄāĻžāĻāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āύ āϝāĻž āĻāĻĒāύāĻŋ āĻāĻāĻŽāĻžāϤā§āϰ āϞāĻŋāĻā§āĻā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻŋ āĻāϝāĻŧāĻžāϰā§āĻāĻŋāĻ āĻĄāĻžāĻāϰā§āĻā§āĻāϰāĻŋāϰ āĻļā§āϰā§āώ āϏā§āϤāϰ⧠āĻĻā§āĻāĻŋ āĻĢāĻžāĻāϞ āĻĒāĻžāĻŦā§āύ āĻāĻŦāĻ bak āύāĻžāĻŽā§ āĻāĻāĻāĻŋ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āĻĒāĻžāĻŦā§āύ āϝā§āĻāĻžāύ⧠test.txt āĻĢāĻžāĻāϞā§āϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻāϏā§āĻāϰāĻŖ āϰāϝāĻŧā§āĻā§āĨ¤ āĻāĻĒāύāĻŋ āĻāĻ āϏā§āĻā§āϰāĻžāĻāĻāĻžāϰāĻā§āϞāĻŋāϰ āĻāύā§āϝ āĻāĻŋāĻ āϝ⧠āĻĄā§āĻāĻž āϧāĻžāϰāĻŖ āĻāϰā§āĻā§āύ āϤāĻž āĻāĻāϰāĻāĻŽ āĻšāĻŋāϏāĻžāĻŦā§ āĻāĻžāĻŦāϤ⧠āĻĒāĻžāϰā§āύ:

āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻÂ
Â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻĒāϰā§āϰ āϏāĻŦāĻā§āϞ⧠āĻāϰ⧠āĻĨāĻžāĻā§āύ, āϤāĻžāĻšāϞ⧠āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻāύ āϤāĻŋāύāĻāĻŋ āĻā§āϰāĻŋ āĻāĻā§ āϝāĻž āĻāĻĒāύāĻžāϰ āĻĒā§āϰāĻā§āĻā§āĻā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āϏā§āύā§āϝāĻžāĻĒāĻļāĻāĻā§ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāϤā§āĻŦ āĻāϰā§, āĻāĻŋāύā§āϤ⧠āĻāĻā§āϰ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āϰāϝāĻŧā§ āĻā§āĻā§: āϏā§āύā§āϝāĻžāĻĒāĻļāĻāĻā§āϞāĻŋ āϏā§āĻŽāϰāĻŖ āĻāϰāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāĻā§ āĻ āĻŦāĻļā§āϝāĻ āϤāĻŋāύāĻāĻŋ SHA-1 āĻŽāĻžāύ āĻŽāύ⧠āϰāĻžāĻāϤ⧠āĻšāĻŦā§ āĨ¤ āĻāĻŦāĻ āĻā§ āϏā§āύā§āϝāĻžāĻĒāĻļāĻāĻā§āϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰā§āĻā§, āĻāĻāύ āϏā§āĻā§āϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ āĻŦāĻž āĻā§āύ āϏā§āĻā§āϞāĻŋ āϏāĻāϰāĻā§āώāĻŖ āĻāϰāĻž āĻšāϝāĻŧā§āĻāĻŋāϞ āϏ⧠āϏāĻŽā§āĻĒāϰā§āĻā§āĻ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻā§āύ āϤāĻĨā§āϝ āύā§āĻ⧎ āĻāĻāĻŋ āĻšāϞ āĻŽā§āϞāĻŋāĻ āϤāĻĨā§āϝ āϝāĻž āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āϏāĻā§āĻāϝāĻŧ āĻāϰā§āĨ¤
Â
āĻāĻāĻāĻŋ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰāϤā§, āĻāĻĒāύāĻŋ commit-tree āĻāϞ āĻāϰā§āύ āĻāĻŦāĻ āĻāĻāĻāĻŋ SHA-1 āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§āύ āĻāĻŦāĻ āĻā§āύ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ, āϝāĻĻāĻŋ āĻĨāĻžāĻā§, āϏāϰāĻžāϏāϰāĻŋ āĻāĻāĻŋāϰ āĻāĻā§āĨ¤ āĻāĻĒāύāĻŋ āϝ⧠āĻĒā§āϰāĻĨāĻŽ āĻā§āϰāĻŋ āĻāĻŋ āϞāĻŋāĻā§āĻā§āύ āϤāĻž āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻāϰā§āύ:
$ echo 'First commit' | git commit-tree d8329f
fdf4fc3344e67ab068f836878b6c4951e3b15f3d
āĻāĻŋāύā§āύ creation time āĻāĻŦāĻ author āĻĄā§āĻāĻžāϰ āĻāĻžāϰāĻŖā§ āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāĻŋāύā§āύ āĻšā§āϝāĻžāĻļ āĻĒāĻžāĻŦā§āύāĨ¤ āύā§āϤāĻŋāĻāϤāĻāĻžāĻŦā§ āϝ⧠āĻā§āύāĻ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻāĻā§ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āϏā§āĻ āĻĄā§āĻāĻž āĻĻāĻŋāϝāĻŧā§ āĻĒā§āύāϰā§āϤā§āĻĒāĻžāĻĻāύ āĻāϰāĻž āϝā§āϤ⧠āĻĒāĻžāϰā§, āĻāĻ āĻŦāĻāĻāĻŋāϤ⧠āĻŽā§āĻĻā§āϰāĻŋāϤ āĻāĻŽāĻŋāĻ āĻšā§āϝāĻžāĻļāĻā§āϞāĻŋ āĻĒā§āϰāĻĻāϤā§āϤ āĻāĻŽāĻŋāĻāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āϏāĻā§āĻāϤāĻŋāĻĒā§āϰā§āĻŖ āύāĻžāĻ āĻšāϤ⧠āĻĒāĻžāϰā§āĨ¤ āĻāĻ āĻ āϧā§āϝāĻžāϝāĻŧā§ āĻāĻĒāύāĻžāϰ āύāĻŋāĻā§āϰ āĻā§āĻāϏāĻžāĻŽāĻā§āϞāĻŋāϰ āϏāĻžāĻĨā§ āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āĻā§āϝāĻžāĻ āĻšā§āϝāĻžāĻļāĻā§āϞāĻŋ āĻĒā§āϰāϤāĻŋāϏā§āĻĨāĻžāĻĒāύ āĻāϰā§āύāĨ¤
āĻāĻāύ āĻāĻĒāύāĻŋ git cat-file  āĻāϰ āϏāĻžāĻĨā§ āĻāĻĒāύāĻžāϰ āύāϤā§āύ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ āĻŽāĻŋāϞāĻŋā§ā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύ:
$ git cat-file -p fdf4fc3
tree d8329fc1cc938780ffdd9f94e0d364e0ea74f579
author Scott Chacon 1243040974 -0700
committer Scott Chacon 1243040974 -0700
First commit
āĻāĻāĻāĻŋ commit object āĻāϰ āĻŦāĻŋāύā§āϝāĻžāϏ āϏāĻšāĻ: āĻāĻāĻŋ āϏā§āĻ āϏāĻŽāϝāĻŧā§ āĻĒā§āϰāĻāϞā§āĻĒā§āϰ āϏā§āύā§āϝāĻžāĻĒāĻļāĻā§āϰ āĻāύā§āϝ āĻļā§āϰā§āώ-āϏā§āϤāϰā§āϰ āĻā§āϰāĻŋ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻāϰā§; parent commit āϝāĻĻāĻŋ āĻĨāĻžāĻā§ (āĻāĻĒāϰ⧠āĻŦāϰā§āĻŖāĻŋāϤ commit āĻāϰ āĻā§āύ⧠āĻĒā§āϝāĻžāϰā§āύā§āĻ āύā§āĻ); author/committer āϤāĻĨā§āϝ (āϝāĻž āĻāĻĒāύāĻžāϰ user.name āĻāĻŦāĻ user.email āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύ āϏā§āĻāĻŋāĻāϏ āĻāĻŦāĻ āĻāĻāĻāĻŋ timestamp āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§); āϤāĻžāϰāĻĒāϰ āĻāĻāĻāĻŋ āĻĢāĻžāĻāĻāĻž āϞāĻžāĻāύ, āĻāĻŦāĻ āϤāĻžāϰāĻĒāϰ āĻāĻŽāĻŋāĻ āĻŦāĻžāϰā§āϤāĻž āĨ¤
Â
āĻāϰ āĻĒāϰā§, āĻāĻĒāύāĻŋ āĻ āύā§āϝ āĻĻā§āĻāĻŋ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āϞāĻŋāĻāĻŦā§āύ, āĻĒā§āϰāϤāĻŋāĻāĻŋ āϤāĻžāϰ āĻāĻā§ āϏāϰāĻžāϏāϰāĻŋ āĻāϏāĻž āĻāĻŽāĻŋāĻāĻā§ āĻāϞā§āϞā§āĻ āĻāϰā§:
$ echo 'Second commit' | git commit-tree 0155eb -p fdf4fc3
cac0cab538b970a37ea1e769cbbde608743bc96d
$ echo 'Third commit' | git commit-tree 3c4e9c -p cac0cab
1a410efbd13591db07496601ebc7a059dd55cfe9
āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āĻāĻĒāύāĻžāϰ āϤā§āϰāĻŋ āĻāϰāĻž āϤāĻŋāύāĻāĻŋ āϏā§āύā§āϝāĻžāĻĒāĻļāĻ āĻā§āϰāĻŋ āĻā§ āύāĻŋāϰā§āĻĻā§āĻļ āĻāϰā§āĨ¤ āĻāĻĒāύāĻžāϰ āĻāĻžāĻā§ āĻāĻāύ āĻāĻāĻāĻŋ āĻāϏāϞ āĻāĻŋāĻ āĻšāĻŋāϏā§āĻā§āϰāĻŋ āϰāϝāĻŧā§āĻā§ āϝāĻž āĻāĻĒāύāĻŋ git log āĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋāϝāĻŧā§ āĻĻā§āĻāϤ⧠āĻĒāĻžāϰā§āύ, āϝāĻĻāĻŋ āĻāĻĒāύāĻŋ āĻļā§āώ āĻāĻŽāĻŋāĻ āĻāϰ SHA-1-āĻ āϰāĻžāύ āĻāϰā§āύ :
$ git log --stat 1a410e
commit 1a410efbd13591db07496601ebc7a059dd55cfe9
Author: Scott Chacon
Date: Fri May 22 18:15:24 2009 -0700
Third commit
bak/test.txt | 1 +
1 file changed, 1 insertion(+)
commit cac0cab538b970a37ea1e769cbbde608743bc96d
Author: Scott Chacon
Date: Fri May 22 18:14:29 2009 -0700
Second commit
new.txt | 1 +
test.txt | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d
Author: Scott Chacon
Date: Fri May 22 18:09:34 2009 -0700
First commit
test.txt | 1 +
1 file changed, 1 insertion(+)
āĻ āϏāĻžāϧāĻžāϰāĻŖ, āĻāĻĒāύāĻŋ āĻĢā§āϰāύā§āĻ āĻāύā§āĻĄ āĻāĻŽāĻžāύā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āύāĻž āĻāϰā§āĻ āĻāĻāĻāĻŋ āĻāĻŋāĻ āĻšāĻŋāϏā§āĻā§āϰāĻŋ āϤā§āϰāĻŋ āĻāϰā§āĻā§āύ āϞā§-āϞā§āĻā§āϞ āĻ āĻĒāĻžāϰā§āĻļāύ āĻāĻŽāĻžāύā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĻ ! āĻāĻāĻžāĻ āĻāĻŋāĻ āĻāϰ⧠āĻĨāĻžāĻā§ āϝāĻāύ āĻāĻĒāύāĻŋ git add āĻāĻŦāĻ git commit āĻāĻŽāĻžāύā§āĻĄ āϰāĻžāύ āĻāϰ⧠āĻĨāĻžāĻā§āύāĨ¤ āĻāĻāĻŋ blob āϏā§āĻā§āϰ⧠āĻĢāĻžāĻāϞā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āϏāĻā§āĻā§ āĻāϰā§, āĻāύāĻĄā§āĻā§āϏ āĻāĻĒāĻĄā§āĻ āϰāĻžāĻā§, āĻā§āϰāĻŋ āĻŽā§āϝāĻžāύā§āĻ āĻāϰā§, āĻāĻŦāĻ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āĻ āϤāĻžāĻĻā§āϰ āĻāĻā§ āĻāϏāĻž āĻāĻŽāĻŋāĻ āĻā§āϞā§āϰ āϰā§āĻĢāĻžāϰā§āύā§āϏ āĻŽā§āϝāĻžāύā§āĻ āĻāϰā§āĨ¤ āϏāĻžāϧāĻžāϰāĻŖāϤ, āĻāĻ āϤāĻŋāύāĻāĻŋ āĻŽā§āϞ āĻ āĻŦāĻā§āĻā§āĻ – blob, tree, āĻāĻŦāĻ commit – āĻāĻŋāĻ āĻāϞāĻžāĻĻāĻž āĻāϞāĻžāĻĻāĻž āĻĢāĻžāĻāϞ⧠āĻŽā§āϝāĻžāύā§āĻ āĻāϰ⧠āϝāĻž .git/objects āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϤ⧠āĻĨāĻžāĻā§ āĨ¤ āύā§āĻā§āϰ āĻāĻĻāĻžāĻšāϰāĻŖāĻāĻŋāϤ⧠āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϰ āϏāĻŽāϏā§āϤ āĻ āĻŦāĻā§āĻā§āĻ āĻĻā§āĻāĻžāύ āĻšā§ā§āĻā§, āϤāĻžāϰ āϏāĻžāĻĨā§ āĻŽāύā§āϤāĻŦā§āϝ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§:Â
$ find .git/objects -type f
.git/objects/01/55eb4229851634a0f03eb265b69f5a2d56f341 # tree 2
.git/objects/1a/410efbd13591db07496601ebc7a059dd55cfe9 # commit 3
.git/objects/1f/7a7a472abf3dd9643fd615f6da379c4acb3e3a # test.txt v2
.git/objects/3c/4e9cd789d88d8d89c1073707c3585e41b0e614 # tree 3
.git/objects/83/baae61804e65cc73a7201a7252750c76066a30 # test.txt v1
.git/objects/ca/c0cab538b970a37ea1e769cbbde608743bc96d # commit 2
.git/objects/d6/70460b4b4aece5915caf5c68d12f560a9fe3e4 # 'test content'
.git/objects/d8/329fc1cc938780ffdd9f94e0d364e0ea74f579 # tree 1
.git/objects/fa/49b077972391ad58037050f2a75f74e3671e92 # new.txt
.git/objects/fd/f4fc3344e67ab068f836878b6c4951e3b15f3d # commit 1
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāĻŽāϏā§āϤ āĻ āĻā§āϝāύā§āϤāϰā§āĻŖ āĻĒāϝāĻŧā§āύā§āĻāĻžāϰ āĻ āύā§āϏāϰāĻŖ āĻāϰā§āύ āϤāĻŦā§ āĻāĻĒāύāĻŋ āĻāĻāϰāĻāĻŽ āĻāĻāĻāĻŋ āĻ āĻŦāĻā§āĻā§āĻ āĻā§āϰāĻžāĻĢ āĻĒāĻžāĻŦā§āύ:

āĻ āĻŦāĻā§āĻā§āĻ āϏā§āĻā§āϰā§āĻ
Â
āĻāĻŽāϰāĻž āĻāĻā§ āĻāϞā§āϞā§āĻ āĻāϰā§āĻāĻŋ āϝā§, āĻāĻĒāύāĻžāϰ āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āĻĄāĻžāĻāĻžāĻŦā§āϏ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻāĻŽāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻā§āϰ āϏāĻžāĻĨā§ āĻāĻāĻāĻŋ āĻļāĻŋāϰā§āύāĻžāĻŽ āϏāĻāϰāĻā§āώāĻŋāϤ āĻāĻā§āĨ¤ āĻāĻŋāĻ āĻā§āĻāĻžāĻŦā§ āϤāĻžāϰ āĻ āĻŦāĻā§āĻā§āĻāĻā§āϞāĻŋāĻā§ āϏāĻā§āĻāϝāĻŧ āĻāϰ⧠āϤāĻž āĻĻā§āĻāϤ⧠āĻāĻ āĻŽāĻŋāύāĻŋāĻ āϏāĻŽāϝāĻŧ āύā§āĻāϝāĻŧāĻž āϝāĻžāĻāĨ¤ āĻāĻĒāύāĻŋ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻāĻāĻŋ āĻŦā§āϞāĻŦ āĻ āĻŦāĻā§āĻā§āĻ āϏāĻā§āĻāϝāĻŧ āĻāϰāϤ⧠āĻšāϝāĻŧâââāĻāĻ āĻā§āώā§āϤā§āϰā§, āϏā§āĻā§āϰāĻŋāĻ “what is up, doc?” – Ruby āϏā§āĻā§āϰāĻŋāĻĒā§āĻāĻŋāĻ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āĻĻāĻŋā§ā§ āĻāĻĄ āĻāϰāĻŋāĨ¤
Â
āĻāĻĒāύāĻŋ irb āĻāĻŽāĻžāύā§āĻĄā§āϰ āĻĻāĻŋā§ā§ āĻāύā§āĻāĻžāϰā§āĻā§āĻāĻŋāĻ Ruby āĻŽā§āĻĄ āĻļā§āϰ⧠āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ:
$ irb
>> content = "what is up, doc?"
=> "what is up, doc?"
āĻāĻŋāĻ āĻĒā§āϰāĻĨāĻŽā§ āĻāĻāĻāĻŋ header āϤā§āϰāĻŋ āĻāϰ⧠āϝāĻž āĻ āĻŦāĻā§āĻā§āĻā§āϰ āϧāϰāύ āϏāύāĻžāĻā§āϤ āĻāϰā§- āĻāĻ āĻā§āώā§āϤā§āϰā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŦā§āϞāĻŦāĨ¤ āĻāĻ header āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻ āĻāĻļā§, āĻāĻŋāĻ āĻāĻāĻāĻŋ āϏā§āĻĒā§āϏ āĻāĻĄ āĻāϰ⧠āĻāĻŦāĻ āĻāϰ āĻĒāϰ⧠null āĻŦāĻžāĻāĻ āĻāĻĄ āĻāϰā§āĨ¤
>> header = "blob #{content.bytesize}\0"
=> "blob 16\u0000"
āĻāĻŋāĻ header āĻāĻŦāĻ āĻŽā§āϞ āĻāύāĻā§āύā§āĻ āϏāĻāϝā§āĻā§āϤ āĻāϰā§, āϤāĻžāϰāĻĒāϰ āϏā§āĻ āύāϤā§āύ āĻāύāĻā§āύā§āĻ āĻāϰ SHA-1 āĻā§āĻāϏāĻžāĻŽ āĻāĻĄ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ Ruby āϤ⧠āĻāĻāĻāĻŋ āϏā§āĻā§āϰāĻŋāĻ āĻāϰ SHA-1 āĻŽāĻžāύ āĻāĻŖāύāĻž āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϤāĻžāϰ āĻāύā§āϝ āĻāĻĒāύāĻžāϰ āĻĒā§āϰā§ā§āĻāύ āĻāĻāĻāĻŋ SHA1 āĻĄāĻžāĻāĻā§āϏā§āĻ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāĻŦāĻ require āĻāĻŽāĻžāύā§āĻĄ āĨ¤ āϤāĻžāϰāĻĒāϰ⧠āϏā§āĻā§āϰāĻŋāĻ āϏāĻš Digest::SHA1.hexdigest() āĻāϞ āĻāϰā§āύ:
>> store = header + content
=> "blob 16\u0000what is up, doc?"
>> require 'digest/sha1'
=> true
>> sha1 = Digest::SHA1.hexdigest(store)
=> "bd9dbf5aae1a3862dd1526723246b20206e5fc37"
āĻāϏā§āύ āĻāĻāĻŋāĻā§ git hash-object āĻāĻāĻāĻĒā§āĻā§āϰ āϏāĻžāĻĨā§ āϤā§āϞāύāĻž āĻāϰāĻŋāĨ¤ āĻāĻāĻžāύ⧠echo -n āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āύāϤā§āύ āϞāĻžāĻāύ āϝā§āĻ āĻāϰāĻž āĻĒā§āϰāϤāĻŋāϰā§āϧ āĻāϰāϞāĻžāĻŽ āĨ¤
$ echo -n "what is up, doc?" | git hash-object --stdin
Bd9dbf5aae1a3862dd1526723246b20206e5fc37
āĻāĻŋāĻ zlib āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻŽāĻĒā§āϰā§āϏ āĻāϰ⧠āϝāĻž āĻāĻŽāϰāĻž Ruby zlib āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāϰāϤ⧠āĻĒāĻžāϰāĻŋāĨ¤ āĻĒā§āϰāĻĨāĻŽā§ zlib āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻāĻŽā§āĻĒā§āϰāĻ āĻāϰāĻž āϞāĻžāĻāĻŦā§, āϤāĻžāϰāĻĒāϰ āϰāĻžāύ āĻāϰā§āύ Zlib::Deflate.deflate()
>> require 'zlib'
=> true
>> zlib_content = Zlib::Deflate.deflate(store)
=> "x\x9CK\xCA\xC9OR04c(\xCFH,Q\xC8,V(-\xD0QH\xC9O\xB6\a\x00_\x1C\a\x9D"
Â
āĻ āĻŦāĻļā§āώā§, āĻāĻĒāύāĻŋ zlib-deflated āĻāύāĻā§āύā§āĻ āϞāĻŋāĻāĻŦā§āύ āĻāĻāĻāĻŋ āĻĄāĻŋāϏā§āĻ āĻ āĻŦāĻā§āĻā§āĻā§āĨ¤Â āĻāĻĒāύāĻŋ āϝ⧠āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ āϞāĻŋāĻāϤ⧠āĻāĻžāύ āϤāĻžāϰ āĻĒāĻžāĻĨ āύāĻŋāϰā§āϧāĻžāϰāĻŖ āĻāϰāĻŦā§āύ (SHA-1 āĻāϰ āĻĒā§āϰāĻĨāĻŽ āĻĻā§āĻāĻŋ āĻ āĻā§āώāϰ āĻšāϞ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āύāĻžāĻŽ, āĻāĻŦāĻ āĻļā§āώ 38āĻāĻŋ āĻ āĻā§āώāϰ āϏā§āĻ āĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋāϰ āĻŽāϧā§āϝ⧠āĻĢāĻžāĻāϞā§āϰ āύāĻžāĻŽ)āĨ¤ Ruby āϤā§, āĻāĻĒāύāĻŋ FileUtils.mkdir_p() āĻĢāĻžāĻāĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύ āϏāĻžāĻŦāĻĄāĻŋāϰā§āĻā§āĻāϰāĻŋ āϤā§āϰāĻŋ āĻāϰāϤā§, āϝāĻĻāĻŋ āĻāĻāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύāĻž āĻĨāĻžāĻā§āĨ¤Â āϤāĻžāϰāĻĒāϰā§, File.open() āĻĻāĻŋāϝāĻŧā§ āĻĢāĻžāĻāϞāĻāĻŋ āĻā§āϞā§āύ āĻāĻŦāĻ write() āĻāϞ āĻĻāĻŋāϝāĻŧā§ āĻĢāĻžāĻāϞāĻāĻŋāϤ⧠zlib-compressed āĻāύāĻā§āύā§āĻ āĻāĻŋ āϞāĻŋāĻā§āύ:
>> path = '.git/objects/' + sha1[0,2] + '/' + sha1[2,38]
=> ".git/objects/bd/9dbf5aae1a3862dd1526723246b20206e5fc37"
>> require 'fileutils'
=> true
>> FileUtils.mkdir_p(File.dirname(path))
=> ".git/objects/bd"
>> File.open(path, 'w') { |f| f.write zlib_content }
=> 32
āĻāϞā§āύ, āĻāύāĻā§āύā§āĻ āĻāϰ āĻ āĻŦāĻā§āĻā§āĻāĻāĻŋ git cat-file āĻĻāĻŋā§ā§ āĻā§āĻ āĻāϰāĻŋ
---
$ git cat-file -p bd9dbf5aae1a3862dd1526723246b20206e5fc37
what is up, doc?
---
āĻāĻāĻžāĻ – āĻāĻĒāύāĻŋ āĻāĻāĻāĻŋ āĻāĻŋāĻ āĻŦā§āϞāĻŦ āĻ āĻŦāĻā§āĻā§āĻ āϤā§āϰāĻŋ āĻāϰā§āĻā§āύāĨ¤
Â
āϏāĻŽāϏā§āϤ āĻāĻŋāĻ āĻ āĻŦāĻā§āĻā§āĻ āĻāĻāĻāĻāĻžāĻŦā§ āϏāĻāϰāĻā§āώāĻŋāϤ āĻšāϝāĻŧ, āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻŦāĻŋāĻāĻŋāύā§āύ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻāĻŋ āĻšāϤ⧠āĻĒāĻžāϰā§Â – āϝā§āĻŽāύ, āϏā§āĻā§āϰāĻŋāĻ āĻŦā§āϞāĻŦā§āϰ āĻĒāϰāĻŋāĻŦāϰā§āϤā§, āĻšā§āĻĄāĻžāϰāĻāĻŋ āĻāĻŽāĻŋāĻ āĻŦāĻž āĻā§āϰāĻŋ āĻĻāĻŋāϝāĻŧā§ āĻļā§āϰ⧠āĻšāĻŦā§āĨ¤ āĻāĻāĻžāĻĄāĻŧāĻžāĻ, āϝāĻĻāĻŋāĻ āĻŦā§āϞāĻŦ āĻ āĻŦāĻā§āĻā§āĻ āϝā§āĻā§āύ⧠āĻāĻŋāĻā§ āĻšāϤ⧠āĻĒāĻžāϰā§, āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āĻā§āϰāĻŋ āĻāύāĻā§āύā§āĻ āĻā§āĻŦ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻāĻāĻžāĻŦā§ āĻĢāϰāĻŽā§āϝāĻžāĻ āĻāϰāĻžāĨ¤