ā§§ā§Ļ.ā§¨Â  āĻ—āĻŋāϟ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞāĻ¸Â  – āĻ—āĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϏ

 

āĻ—āĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāĻ¸Â 


āĻ—āĻŋāϟ āĻāĻ•āϟāĻŋ āĻ•āĻ¨ā§āĻŸā§‡āĻ¨ā§āϟ-āĻāĻĄā§āϰ⧇āϏ⧇āĻŦāϞ āĻĢāĻžāχāϞ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽāĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āφāϏāϞ⧇ āĻ•āĻŋ āĻŦ⧁āĻāĻžā§Ÿ? āĻāϰ āĻŽāĻžāύ⧇ āĻšāĻšā§āϛ⧇, āĻ—āĻŋāϟ āĻāϰ āϕ⧋āϰ⧇ āĻāĻ•āϟāĻŋ āϕ⧀-āĻ­ā§āϝāĻžāϞ⧁ āĻĄāĻžāϟāĻž āĻ¸ā§āĻŸā§‹āϰ āφāϛ⧇āĨ¤ āĻāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻŦ⧁āĻāĻž āϝāĻžā§Ÿ āϝ⧇, 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}’āĨ¤

āĻ—āĻŋāϟ āϝ⧇ āĻĄā§‡āϟāĻž āϏāĻžā§āϚāϝāĻŧ āĻ•āϰāϛ⧇ āϤāĻž āĻ…āύ⧇āĻ•āϟāĻž āĻāϰāĻ•āĻŽ āĻĻ⧇āĻ–āĻžāϝāĻŧ:

data-model-1
āϚāĻŋāĻ¤ā§āϰ 147. āĻ—āĻŋāϟ āĻĄā§‡āϟāĻž āĻŽāĻĄā§‡āϞ⧇āϰ āϏāĻšāϜ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ

āφāĻĒāύāĻŋ āĻŽā§‹āϟāĻžāĻŽā§āϟāĻŋ āϏāĻšāĻœā§‡āχ āφāĻĒāύāĻžāϰ āύāĻŋāĻœā§‡āϰ āĻŸā§āϰāĻŋ  āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻ—āĻŋāϟ āϏāĻžāϧāĻžāϰāĻŖāϤ āφāĻĒāύāĻžāϰ āĻ¸ā§āĻŸā§‡āϜāĻŋāĻ‚ āĻāϰāĻŋāϝāĻŧāĻž āĻŦāĻž āχāĻ¨ā§āĻĄā§‡āĻ•ā§āĻ¸Â  āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻ¨ā§‡ā§Ÿ āĻāĻŦāĻ‚ āϏ⧇āϟāĻžÂ  āĻĨ⧇āϕ⧇ āĻŸā§āϰāĻŋ āĻāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻāĻ•āϟāĻŋ āϏāĻŋāϰāĻŋāϜ āϞāĻŋāϖ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻŋ  āϤ⧈āϰāĻŋ āĻ•āϰ⧇āĨ¤ āϏ⧁āϤāϰāĻžāĻ‚, āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻĒā§āϰāĻĨāĻŽā§‡ āĻ•āĻŋāϛ⧁ āĻĢāĻžāχāϞ āĻ¸ā§āĻŸā§‡āϜ āĻ•āϰ⧇ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āĻĄā§‡āĻ•ā§āĻ¸Â  āϏ⧇āϟ āφāĻĒ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤Â 

āĻāĻ•āϟāĻŋ āĻāĻ•āĻ• āĻāĻ¨ā§āĻŸā§āϰāĻŋ–āφāĻĒāύāĻžāϰ 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 āĻĢāĻžāχāϞ⧇āϰ āĻĒā§āϰāĻĨāĻŽ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āφāĻĒāύāĻŋ āĻāχ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻ—āĻŋāϟ āϝ⧇ āĻĄā§‡āϟāĻž āϧāĻžāϰāĻŖ āĻ•āϰ⧇āϛ⧇āύ āϤāĻž āĻāχāϰāĻ•āĻŽ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻ­āĻžāĻŦāϤ⧇ āĻĒāĻžāϰ⧇āύ:

data-model-2
āϚāĻŋāĻ¤ā§āϰ 148. āφāĻĒāύāĻžāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻ—āĻŋāϟ āĻĄā§‡āϟāĻžāϰ āĻ•āύāĻŸā§‡āĻ¨ā§āϟ āĻ¸ā§āĻŸā§āϰāĻžāĻ•āϚāĻžāϰ

āĻ•āĻŽāĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸÂ 

 

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āωāĻĒāϰ⧇āϰ āϏāĻŦāϗ⧁āϞ⧋ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ–āύ āϤāĻŋāύāϟāĻŋ āĻŸā§āϰāĻŋ āφāϛ⧇ āϝāĻž āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟāϕ⧇ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋāĻ¤ā§āĻŦ āĻ•āϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϗ⧇āϰ āϏāĻŽāĻ¸ā§āϝāĻžāϟāĻŋ āϰāϝāĻŧ⧇ āϗ⧇āϛ⧇: āĻ¸ā§āĻ¨ā§āϝāĻžāĻĒāĻļāϟāϗ⧁āϞāĻŋ āĻ¸ā§āĻŽāϰāĻŖ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϤāĻŋāύāϟāĻŋ 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 <schacon@gmail.com> 1243040974 -0700
committer Scott Chacon <schacon@gmail.com> 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 <schacon@gmail.com>
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 <schacon@gmail.com>
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 <schacon@gmail.com>
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

				
			

āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āϏāĻŽāĻ¸ā§āϤ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟāĻžāϰ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇āύ āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻāχāϰāĻ•āĻŽ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ—ā§āϰāĻžāĻĢ āĻĒāĻžāĻŦ⧇āύ:

data-model-3
āϚāĻŋāĻ¤ā§āϰ 149. āφāĻĒāύāĻžāϰ āĻ—āĻŋāϟ āĻĄāĻŋāϰ⧇āĻ•ā§āϟāϰāĻŋāϰ āĻāϰ āϏāĻ•āϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ

āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ

 

āφāĻŽāϰāĻž āφāϗ⧇ āωāĻ˛ā§āϞ⧇āĻ– āĻ•āϰ⧇āĻ›āĻŋ āϝ⧇, āφāĻĒāύāĻžāϰ āĻ—āĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϟāĻŋ āĻļāĻŋāϰ⧋āύāĻžāĻŽ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āφāϛ⧇āĨ¤ āĻ—āĻŋāϟ āϕ⧀āĻ­āĻžāĻŦ⧇ āϤāĻžāϰ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϗ⧁āϞāĻŋāϕ⧇ āϏāĻžā§āϚāϝāĻŧ āĻ•āϰ⧇ āϤāĻž āĻĻ⧇āĻ–āϤ⧇ āĻāĻ• āĻŽāĻŋāύāĻŋāϟ āϏāĻŽāϝāĻŧ āύ⧇āĻ“āϝāĻŧāĻž āϝāĻžāĻ•āĨ¤ āφāĻĒāύāĻŋ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāĻŦ⧇āύ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ āĻŦā§āϞāĻŦ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϏāĻžā§āϚāϝāĻŧ āĻ•āϰāϤ⧇ āĻšāϝāĻŧ — āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ “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?
---

				
			

āĻāϟāĻžāχ – āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ  āĻ—āĻŋāϟ āĻŦā§āϞāĻŦ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧇āϛ⧇āύāĨ¤

 

āϏāĻŽāĻ¸ā§āϤ āĻ—āĻŋāϟ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻāĻ•āχāĻ­āĻžāĻŦ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āĻšāϝāĻŧ, āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāϟāĻŋ āĻšāϤ⧇ āĻĒāĻžāĻ°ā§‡Â  – āϝ⧇āĻŽāύ,  āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚ āĻŦā§āϞāĻŦ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āĻšā§‡āĻĄāĻžāϰāϟāĻŋ āĻ•āĻŽāĻŋāϟ āĻŦāĻž āĻŸā§āϰāĻŋ āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻšāĻŦ⧇āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āϝāĻĻāĻŋāĻ“ āĻŦā§āϞāĻŦ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āϝ⧇āϕ⧋āύ⧋ āĻ•āĻŋāϛ⧁ āĻšāϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŽāĻŋāϟ āĻāĻŦāĻ‚ āĻŸā§āϰāĻŋ āĻ•āύāĻŸā§‡āĻ¨ā§āϟ āϖ⧁āĻŦ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻĢāϰāĻŽā§āϝāĻžāϟ āĻ•āϰāĻžāĨ¤