tutorial framework español commands comandos git

framework - ¿Por qué Git usa SHA-1 como números de versión?



git repository (3)

Git y HG usan SHA1 para identificar commits. SVN opera un modelo secuencial de cambio y, por lo tanto, es compatible con un número de versión incremental, mientras que Git y HG son mucho más sofisticados y admiten un modelo de desarrollo de gráficos acíclicos dirigidos que es mucho más fácil de derivar y fusionar.

El número incremental HG es diferente del número incremental SVN y no es adecuado para referirse a una revisión particular en diferentes copias de un repositorio, por lo que no se puede usar de la misma manera que el número de revisión SVN.

Git usa SHA-1 para que el usuario remita una confirmación.

Subversion (SVN) y Mercurial (hg) usan un número incremental.

¿Por qué el equipo de Git tomó esa decisión de diseño de usar SHA-1 en lugar de usar algo más descriptivo?


Mercurial (hg) también usa hashes SHA1. Simplemente también trata de obtener números de revisión del historial de compromisos. Sin embargo, estas revisiones solo son válidas en un repositorio. Si mira otro repositorio, no se garantiza que estas revisiones coincidan.

En cuanto a por qué los hashes de git y mercurial usan: ambos tienen un historial de compromiso no lineal. debido a que ambos se distribuyen, las personas pueden trabajar en la misma base de código en sus repositorios locales sin tener que sincronizar con una autoridad central (como lo requieren SVN y CVS). Ahora bien, si las personas confían sus cosas localmente y las fusionan más adelante, tendrá dificultades para encontrar un esquema coherente para formar revisiones de números enteros en aumento lineal. E incluso si pudieras, obtendrías un resultado diferente entre repositorios diferentes.

Al final, todo se debe a la naturaleza distribuida. Es una forma simple de encontrar identificadores únicos para commits. Y como un producto secundario también puede codificar la historia completa hacia una única confirmación en el hash. Lo que significa que, incluso si tiene la misma diferencia en una confirmación, probablemente obtendrá diferentes valores hash SHA1.


Se usa tanto como un método de identificación de compromiso como de verificación. El número SHA1 es la suma de comprobación de todos los cambios realizados en la confirmación más el nombre del autor más el SHA1 de la confirmación principal. (y IIRC también incluye el mensaje de confirmación, aunque no estoy seguro).

Cuando tira / recupera desde un control remoto, git verificará la suma de comprobación contra los archivos que recibió para asegurarse de que no recibió una versión corrompida o modificada del código.