Según this:¿git almacena información de diff en los objetos de commit?
Es importante tener en cuenta que esto es muy diferente de la mayoría de los sistemas SCM que es posible que esté familiarizado. Subversion, CVS, Perforce, Mercurial y similares todos usan sistemas de almacenamiento Delta; almacenan las diferencias entre una confirmación y la siguiente. Git no hace esto - almacena una instantánea de cómo se ven todos los archivos en su proyecto en esta estructura de árbol cada vez que se compromete. Este es un concepto muy importante de para entender cuando se usa Git.
Sin embargo, cuando corro git show $SHA1ofCommitObject
...
commit 4405aa474fff8247607d0bf599e054173da84113
Author: Joe Smoe <[email protected]>
Date: Tue May 1 08:48:21 2012 -0500
First commit
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..de8b69b
--- /dev/null
+++ b/index.html
@@ -0,0 +1 @@
+<h1>Hello World!</h1>
diff --git a/interests/chess.html b/interests/chess.html
new file mode 100644
index 0000000..e5be7dd
--- /dev/null
+++ b/interests/chess.html
@@ -0,0 +1 @@
+Did you see on Slashdot that King's Gambit accepted is solved! <a href="http://game
... que emite el diff del compromiso con las confirmaciones anteriores. Sé que git no almacena diffs en objetos blob, pero ¿almacena los diffs en objetos commit? ¿O es git show
calculando dinámicamente la diferencia?
Una nota al margen: Git en realidad comprime delta los objetos, pero es solo por el bien de la compresión. La gente a veces malinterpreta esto diciendo que las tiendas Git diffs. Hay alguna documentación del formato aquí: http://book.git-scm.com/7_the_packfile.html (Tenga en cuenta que los objetos que registra deltas entre son solo bloques de datos que descubrió que eran similares, no necesariamente versiones consecutivas del mismo archivo, aunque podrían serlo. Y, por supuesto, los deltas no son diffs línea por línea.) – Cascabel
Actualizando el enlace muy relevante de Jefromi: http://git-scm.com/book/ es/Git-Internals-Packfiles –