Secondo this:git memorizza informazioni diff negli oggetti commit?
E 'importante notare che questo è molto diverso dalla maggior parte dei sistemi SCM che si può essere a conoscenza. Subversion, CVS, Perforce, Mercurial e simili utilizzano tutti i sistemi di storage Delta: memorizzano le differenze tra un commit e il successivo. Git non lo fa questo - memorizza un'istantanea di ciò che tutti i file nel tuo progetto appaiono in questa struttura ad albero ogni volta che esegui il commit. Questo è un concetto molto importante di da comprendere quando si usa Git.
Eppure, quando ho eseguito 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
... essa stampa il diff della impegnarsi con i commit precedenti. So che git non memorizza le differenze negli oggetti blob, ma memorizza le differenze negli oggetti commit? O è git show
che calcola dinamicamente il diff?
Una nota a margine: Git esegue effettivamente la compressione delta degli oggetti, ma è solo per motivi di compressione. Le persone a volte fraintendono questo come dicendo che Git memorizza le diff. C'è una certa documentazione del formato qui: http://book.git-scm.com/7_the_packfile.html (tieni presente che gli oggetti in cui registra i delta sono solo blob di dati che ha scoperto essere simili, non sono necessariamente versioni consecutive dello stesso file, anche se potrebbero essere. E, naturalmente, i delta non sono diffusi line-by-line. – Cascabel
Aggiornamento del link molto pertinente da Jefromi: http://git-scm.com/book/ it/Git-Internals-Packfiles –