tag remove practices crear best git github

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.

  1. Empuje desde el repositorio de git de la estación de trabajo a la carpeta en la unidad de google.
  2. Fuerza al 100% de sincronización cambiando el nombre del directorio del proyecto en gDrive.
  3. 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í.