2012-06-27 28 views

Respuesta

31

Mercurial (hg) también utiliza 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é git y mercurial utilizan hash: 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.

6

Se utiliza como método de identificación de compromiso y 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 comprobará la suma de comprobación contra los archivos que recibió para asegurarse de que no recibió una versión dañada o modificada del código.

+6

Para ser precisos, la suma de comprobación no es de los * cambios * realizados en la confirmación, es de todo el árbol, y sí, incluye el mensaje de confirmación. También se hace referencia a cada árbol por un nombre SHA1, como lo es cada archivo en ese árbol. –

1

Tanto Git como HG usan SHA1 para identificar las confirmaciones. 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 es not suitable para hacer referencia a una revisión particular en diferentes copias de un repositorio, por lo que no se puede usar del mismo modo que el número de revisión SVN.

Cuestiones relacionadas