remove - git:// protocolo bloqueado por empresa, ¿cómo puedo evitarlo?
git tag best practices (7)
Intentar algo como git clone git://github.com/ry/node.git
no funcionará, resulta en:
Initialized empty Git repository in /home/robert/node/.git/
github.com[0: 207.97.227.239]: errno=Connection timed out
fatal: unable to connect a socket (Connection timed out)
Sin embargo, la clonación a través de HTTP funciona bien. Hasta ahora he descubierto que es un problema con el protocolo, pero estoy tratando de instalar Cloud9 que requiere el comando
git submodule update --init --recursive
que está tratando de usar el protocolo git: // y está fallando. ¿Hay alguna manera de cambiar cómo funcionará ese comando o algo así?
Introducción
Agregaré aquí mi propio enfoque ( que no es obligatorio si tienes un repositorio git de acceso público que admita https ).
Trabajo en una compañía donde el repositorio git solo es accesible desde el interior de la empresa. Pero también trabajo desde casa.
¿Cómo presiono al repositorio de la compañía desde su casa?
Creé un repositorio con una carpeta en mi unidad de Google. A excepción de git y https, puede incluir repositorios como rutas.
Entonces, en lugar de presionar hacia el origen, presiono "gDrive". Esto hace que la carpeta se sincronice desde la estación de trabajo de mi casa con la unidad de Google, y luego mi computadora de trabajo extrae los cambios. Además, dado que a veces los archivos en el directorio ".git" no se sincronizan, cambio el nombre de la carpeta temporalmente de, por ejemplo, "troncal" a "troncal2". Esto obliga a las computadoras del hogar y del trabajo a estar 100% sincronizadas con Google Drive.
Luego, inicio sesión en mi computadora de trabajo a través de checkpoint-vpn remote (o teamviewer) y envío mis actualizaciones al repositorio de git de trabajo.
Además, el proceso funcionaría al revés para empujar a un repositorio de git fuera de la empresa que está bloqueado.
- Empuje desde el repositorio de git de la estación de trabajo a la carpeta en la unidad de google.
- Fuerza al 100% de sincronización cambiando el nombre del directorio del proyecto en gDrive.
- Acceda a la computadora del hogar a través de algún tipo de control remoto y presione cambios.
Ampliando la respuesta de Nathan anterior, también puede probar el protocolo ssh si su firewall corporativo está interfiriendo con https. En mi caso, el cortafuegos estaba bloqueando el protocolo git, reemitiendo certificados ssl para https y esto estaba rompiendo bower para mí, incluso con la opción strict-ssl desactivada. Puede hacer una reescritura url similar para ssh, y crear una clave / par ssh como se describe en github .
git config --global url."ssh://[email protected]".insteadOf git://github.com
También tendrías que activar el ssh-agent para tu instalación de git.
Github también proporciona acceso a http (s), que es mucho menos probable que su empresa lo bloquee. Para decirle al submódulo que use eso, puedes hacer esto:
git submodule init
git config submodule.<name>.url https://github.com/...
git submodule update
En realidad, esto es exactamente por lo que init y update son comandos separados: puede iniciar, personalizar ubicaciones y luego actualizar. update --init
es solo un atajo para cuando no necesitas personalizar ninguna URL.
Para cualquier otra persona que pase por esto, también podría usar una URL ssh (si su empresa bloquea git: // pero no ssh), pero en este caso el OP presumiblemente no tiene acceso SSH al repositorio remoto.
Otra opción que no implica tocar la configuración de git es cambiar la configuración de ssh para usar el puerto 443 en lugar del puerto 22 normal.
Referencia: Usar SSH sobre el puerto HTTPS
De ese artículo:
edit the file at ~/.ssh/config, and add this section:
Host github.com
Hostname ssh.github.com
Port 443
Después, pude hacer git push con éxito a Github. En casa, puede cambiar la configuración de ssh hacia atrás tal como estaba, si lo desea.
Si esto es un problema con su firewall bloqueando el puerto de protocolo git: (9418), entonces debe hacer un cambio más persistente para que no tenga que recordar emitir comandos sugeridos por otras publicaciones para cada repositorio de git.
La siguiente solución también funciona para los submódulos que también pueden estar usando el protocolo git:
Dado que el mensaje de git en realidad no apunta inmediatamente al puerto de bloqueo del firewall 9418, intentemos diagnosticarlo como el problema real.
Diagnosticando el problema
Referencias: https://superuser.com/q/621870/203918 y https://unix.stackexchange.com/q/11756/57414
Hay varias herramientas que podemos usar para determinar si el firewall causa nuestro problema: use el que esté instalado en su sistema.
# Using nmap
# A state of "filtered" against port 9418 (git) means
# that traffic is being filtered by a firewall
$ nmap github.com -p http,git
Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT
Nmap scan report for github.com (192.30.252.131)
Host is up (0.24s latency).
PORT STATE SERVICE
80/tcp open http
9418/tcp filtered git
# Using Netcat:
# Returns 0 if the git protocol port IS NOT blocked
# Returns 1 if the git protocol port IS blocked
$ nc github.com 9418 < /dev/null; echo $?
1
# Using CURL
# Returns an exit code of (7) if the git protocol port IS blocked
# Returns no output if the git protocol port IS NOT blocked
$ curl http://github.com:9418
curl: (7) couldn''t connect to host
OK, entonces ahora que hemos determinado que es nuestro puerto git bloqueado por un firewall, ¿qué podemos hacer al respecto? Sigue leyendo :)
Reescritura de URL básica
Git proporciona una forma de reescribir las URL usando git config
. Simplemente emita el siguiente comando:
git config --global url."https://".insteadOf git://
Ahora, como por arte de magia, todos los comandos de git realizarán una sustitución de git://
por https://
¿Qué cambios hizo este comando?
Eche un vistazo a su configuración global usando:
git config --list
Verás la siguiente línea en el resultado:
url.https://.insteadof=git://
Puedes ver cómo se ve en el archivo, echando un vistazo a ~/.gitconfig
donde ahora deberías ver que se han agregado las siguientes dos líneas:
[url "https://"]
insteadOf = git://
¿Quieres más control?
Simplemente use una URL más completa / específica en el reemplazo. Por ejemplo, para que solo las URL de GitHub utilicen https: // en lugar de git: //, podría usar algo como:
git config --global url."https://github".insteadOf git://github
Puede ejecutar este comando varias veces usando diferentes reemplazos. Sin embargo, en el caso de que una URL coincida con múltiples reemplazos, la coincidencia más larga "gana". Solo se realizará un único reemplazo por URL.
Cambios en todo el sistema para administradores del sistema
Si usted es un administrador de sistema de Linux y no desea que sus usuarios tengan que pasar por los dolores anteriores, puede realizar un cambio rápido en la configuración de git de todo el sistema.
Simplemente edite o agregue los siguientes contenidos a /etc/gitconfig
y sus usuarios no tendrán que preocuparse por nada de lo anterior:
[url "https://"]
insteadOf = git://
También tuve el mismo problema por un tiempo. Luego intenté cambiar la configuración de git usando el comando sugerido:
git config --global url."https://".insteadOf git://
que lamentablemente no funcionó el truco para mí . ¡Todavía estaba teniendo el mismo problema!
Lo que realmente solucionó mi problema al fin es que reinicié la URL remota de mi repositorio usando el siguiente comando:
git remote set-url origin https://github.com/<my_user_name>/<my_repo_name>.git
que fue previamente así:
git remote set-url origin [email protected]:<my_user_name>/<my_repo_name>.git
Después de configurar la URL remota usando https://
lugar de [email protected]
el problema se resolvió para mí.
es porque el destinatario de GIT para el servidor de nodo ha cambiado, debe ingresar ahora:
git clone https://github.com/joyent/node
buena suerte