¿Hay compromisos de SHA duplicates?

Cada vez que realiza una confirmación, git / hg genera un SHA para identificar de manera única ese compromiso en el historial del repository.

Supongamos que quiero fusionar dos repositorys (que no tenemos información de cuáles). Esto hace popup la pregunta: si alguien quería una confirmación específica de ese mismo repository fusionado, ¿habría un hash SHA duplicado que confundiría a git al recibir ese comentario? Y si no es así, ¿qué haría Git?

En última instancia, creo que la pregunta también es: ¿hay hashes duplicates en cada repository del mundo integer?

¿Hay hashes duplicates en cada repository del mundo integer?

Posiblemente sí, pero eso es extremadamente improbable . Permítanme citar el libro de Git en este, que contiene un ejemplo muy ilustrativo:

Mucha gente se preocupa en algún momento de que, por casualidad, tendrán dos objects en su repository que tengan el mismo valor de SHA-1. ¿Entonces que?

Si por casualidad usted compromete un object que tiene el mismo valor SHA-1 que un object anterior en su repository, Git verá el object anterior en su database Git y asumirá que ya fue escrito. Si intenta volver a verificar ese object en algún momento, siempre obtendrá los datos del primer object.

[…]

Aquí hay un ejemplo para darle una idea de lo que se necesitaría para get una colisión SHA-1. Si todos los 6.5 billones de humanos en la Tierra estuvieran progtwigndo, y cada segundo, cada uno producía un código que era el equivalente de toda la historia del kernel de Linux (3.6 millones de objects Git) y empujándolo a un enorme repository Git, tomaría aproximadamente 2 años hasta que ese repository contenga suficientes objects para tener un 50% de probabilidad de una sola colisión de object SHA-1. Existe una mayor probabilidad de que todos los miembros de tu equipo de progtwigción sean atacados y asesinados por lobos en incidentes no relacionados en la misma noche.

En resumen: sí, una colisión SHA1 es teóricamente posible, pero tan astronómicamente improbable que Git simplemente no considere este caso.

En última instancia, creo que la pregunta también es: ¿hay hashes duplicates en cada repository del mundo integer?

Improbable. Hasta ahora nadie ha encontrado una colisión SHA1. Si bien puede haber hashes duplicates, estos hashes duplicates identificarán los mismos objects con los mismos contenidos.

ver también:

¿Cómo manejaría Git una colisión SHA-1 en una burbuja? y probabilidad de colisiones SHA1