¿Cómo puedo identificar de forma única un repository git?

Me gustaría crear una herramienta que compruebe si ya tengo un clon local de un repository remoto antes de clonar dicho repository. Para hacer esto, necesito una forma de probar si B es lo mismo que el repository A, con lo que supongo que quiero decir que tienen historias fusionables. B podría nombrarse de manera diferente a A, y podría tener twigs adicionales, los casos de uso habituales.

¿Hay alguna forma de hacer esto? Tengo una idea tentativa de cómo hacerlo, pero pensé que quizás alguien aquí tiene una respuesta definitiva.

Idea tentativa

Obtenga una list de sucursales y busque twigs comunes (por hash). Luego, para las twigs comunes, verifique que las confirmaciones iniciales sean las mismas (mediante hash). En ese momento yo diría 'lo suficientemente bueno'. Me imagino que estoy bien, a less que alguien haya estado jugando con la historia, cuyo uso-caso estoy dispuesto a descuidar. Para hacer esto, necesito una forma de get la twig y confirmar la información desde el repository remoto, sin hacer un clon. Puedo resolver esto usando ssh & bash, pero sería preferible una solución git-only.

Comentarios sobre la idea a medias también son bienvenidos.

Por qué esto no es un duplicado del ID único del repository de Git

La pregunta a la que se hace reference busca una identificación de depósito única o una forma de crear una. No existe tal bestia, e incluso si lo hizo, es cuestionable si sería relevante aquí, ya que quiero determinar si dos repositorys tienen historias fusionables (es decir, podría search y fusionar entre los dos) – un problema ligeramente mejor definido . Estoy dispuesto a ignorar la posibilidad de que un usuario haya modificado la historia, pero me encantaría saber cómo manejar ese caso también.

Como puede ver en la pregunta relacionada; NO HAY identificación única para un repository git. Sin embargo; usted podría simplemente comparar el SHA-1 del primer compromiso en la twig maestra ; eso debería ser suficiente en el 99.999% de todos los casos (suponiendo que el primer compromiso nunca se cambiará).

Y si quiere estar aún más seguro, podría considerar usar también el SHA-1 del segundo compromiso; nuevamente suponiendo que nunca cambiará :). con el SHA-1 de los primeros dos commits; Supongo que tienes aproximadamente 1/2 ^ 320 = 4.7 * 10 ^ -97 posibilidad de estar equivocado …

Si no está seguro de que haya incluso una twig principal; podría suponer que solo tiene una confirmación raíz sin padres y tomar su SHA-1. Puede usar este command para get la confirmación (o confirmaciones) de la raíz:

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$" 

(copydo de esta respuesta )

o (más fácil de entender, gracias @TomHale):

 git rev-list --parents HEAD | tail -1 

Dentro del file .git/config usted tiene la url de donde se clonó el repository.

Puedes comparar los orígenes de 2 repositorys.

Ejemplo:

 [remote "origin"] url = git://myohost/myproject.git