2012-05-17 19 views
10

Tengo un repositorio privado en Github que contiene 3 submódulos, los 3 son también privados.Problemas con los submódulos de git cuando los submódulos son repos privados de Github

He generado 4 claves SSH en mi servidor EC2 y las he aplicado como Github implementan claves en los 4 repositorios privados.

Soy capaz de clonar el repositorio principal ya que reconoce la clave SSH. Cuando ejecuto "git submodule update" falla en los repositorios privados con el siguiente error:

ERROR: Repository not found. fatal: el extremo remoto colgó inesperadamente

Si reviso manualmente esos repos privados, funciona, pero no cuando se utiliza el comando del submódulo git. ¿Alguna idea? ¿Esto no es totalmente compatible?

Respuesta

9

La autenticación de github es un poco extraña. No usan nombres de usuario; solo infieren en función de la clave pública que presentó qué usuario es usted. Como usted generó cuatro teclas de implementación, nadie sabe cuál será utilizada por su servidor cuando se conecta a github: github aceptará cualquiera de ellas, y luego rechazará cualquier acceso a los repositorios que no tengan esa clave registrada.

Como tal, la solución más simple es simplemente usar una sola tecla de implementación para todos los repositorios.

Sin embargo, si no puede, puede modificar esto utilizando alias de host ssh. Añadir a ~/.ssh/config estrofas de su servidor como el siguiente:

Host repo-foo 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-foo 
    IdentitiesOnly yes 

Host repo-bar 
    HostName ssh.github.com 
    Port 443 
    User git 
    IdentityFile /path/to/my-ssh-key-file-for-bar 
    IdentitiesOnly yes 

a continuación, seleccione sus submódulos en repo-bar:username/bar.git y repo-foo:username/foo.git en lugar de utilizar la forma [email protected]:....

Esto efectivamente hará que git y ssh traten a cada depósito como vivo en un servidor diferente, y entregue un archivo de identidad explícito, para que no exista confusión sobre qué clave usar.

+1

Sí, pensé que, sin embargo, las claves de implementación son únicas y no puedo ubicarlas en varios proyectos. Veré qué más puedo hacer, pero principalmente solo quiero implementaciones sin contraseña. –

+1

Esto no es extraño; es bastante estándar! Y la solución estándar es precisamente lo que ha sugerido. – Ashe

+0

@Len, por estándar que sea, es bastante extraño. github debería arreglar sus cosas para permitir que se use la misma clave de despliegue en múltiples repos :) – bdonlan

Cuestiones relacionadas