2011-03-24 9 views
11

estoy usando git para clonar un acuerdo de recompra a través de https así:¿Puedo agregar un nombre de usuario y contraseña a git clone usando la opción --recursive (para submódulos)?

git clone https://username:[email protected]/git/repo.git 

Esto está bien, pero tiene un gran número de subrepos para clonar, así que estoy usando la opción --recursive.

problema aquí es que para el nivel superior que toma el nombre de usuario & pase especifica pero para cada uno de recompra sub que pide nuevamente sus datos por lo que obtenemos lo siguiente:

C:>git clone --recursive https://username:[email protected]/git/repo.git 
Cloning into repo... 
remote: Counting objects: 15, done. 
remote: Compressing objects: 100% (15/15), done. 
remote: Total 15 (delta 8), reused 0 (delta 0) 
Unpacking objects: 100% (15/15), done. 
Submodule 'sub1' (https://alocation/git/repo.sub1) registered for path 'sub1' 
Submodule 'sub2' (https://alocation/git/repo.sub2) registered for path 'sub2' 
Submodule 'sub3' (https://alocation/git/repo.sub3) registered for path 'sub3' 
Submodule 'sub4' (https://alocation/git/repo.sub4) registered for path 'sub4' 
Cloning into sub1... 
Username: 
Password: 
remote: Counting objects: 10, done. 
remote: Compressing objects: 100% (8/8), done. 
remote: Total 10 (delta 0), reused 0 (delta 0) 
Unpacking objects: 100% (10/10), done. 
Username: 
..............................etc.... 

¿Puedo dar el nombre de usuario contraseña & separablemente, así que no tengo que ingresar cada vez.

El caso de uso obvio es para una estructura de subrepo profunda como esta, donde hay muchos archivos. Ingresar los mismos datos para cada subrepo va a ser tedioso & propenso a errores.

Respuesta

7

Las credenciales deben ser válidas para cualquier submódulo con una dirección que se suponga que los acepta.

Un único caso en el que podría fallar es cuando el .gitmodules archivo apunta a otra cesión temporal, como lo ilustra el case 214 del proyecto Corazonada Kod.

Para asegurarse de que esas credenciales se pasen a cada solicitud al servidor 'alocation', no necesita ajustar nada en Git, pero esta es probablemente una configuración proxy ssh, curl o http.

Yo descartaría ssh (alocation no ejecutaría nada como 'nombre de usuario' pero preferiría tener una cuenta de usuario dedicada).

Compruebe la variable de entorno http_proxy y https_proxy si tiene un proxy.

Pero trata también de un simple curl https://alocation/git/repo.git:
Con un $HOME/.netrc (%HOME%\_netrc en Windows), puede especificar el nombre de usuario/contraseña esperada.

machine alocation 
    login username 
    password mypassowrd 

Si ese trabajo para https://alocation/git/repo.git (es decir, sin que le pide un nombre de usuario y contraseña), que funcionará para cualquier otra cesión temporal (en este caso submódulos).

+1

Gracias por la respuesta VonC. Desafortunadamente, el texto anterior está tomado de un repositorio real. es decir, los subrepos se enumeran como se muestra. ¿Podemos agregar algo a la lista .gitsubmodule para recoger esto? – Neophyte

+0

@Neophyte: sospecho que esto no es un problema de Git en absoluto. He actualizado mi respuesta para ilustrar las otras vías para explorar: mi apuesta es en el archivo '.netrc'. – VonC

+2

Gracias agregando el _netrc hizo el truco – Neophyte

Cuestiones relacionadas