SHA vs. GUID
Da Il modello dell'oggetto Git , l'enfasi è mia:
- Git can quickly determine whether two objects are identical or not, just by comparing names.
- Since object names are computed the same way in every repository, the same content stored in two repositories will always be stored under the same name.
-
Git can detect errors when it reads an object, by checking that the object's name is still the SHA1 hash of its contents.
Quindi, sì, è una protezione contro la corruzione. Ecco perché il GUID non funzionerà, è casuale e non dipende dai contenuti.
Checksum di cosa?
Sempre dallo stesso articolo:
It is important to note that this is very different from most SCM systems that you may be familiar with. Subversion, CVS, Perforce, Mercurial and the like all use Delta Storage systems - they store the differences between one commit and the next. Git does not do this - it stores a snapshot of what all the files in your project look like in this tree structure each time you commit. This is a very important concept to understand when using Git.
Git memorizza istantanee binarie, ma non delta, in blob
oggetti. La struttura della directory e i nomi dei file sono memorizzati in tree
oggetti. Una buona spiegazione può essere trovata qui: Git Internals - Git Objects
Git calcola i checksum SHA di questi oggetti, non i delta o i file originali. blob
s contiene solo il contenuto dei file originali, mentre i nomi di questi file vanno in tree
s.
Git di apprendimento
Se vuoi imparare git come utente, non devi conoscere gli interni. Al momento, uso Git da oltre 3 anni e non ho usato nessuna di queste informazioni in pratica neanche una volta. È bello sapere, ma non è obbligatorio.
Se sei interessato all'architettura generale di Git, leggi questo: Git in L'architettura delle applicazioni open source .