Aug 02

Instalando el servidor de Git en Windows

Jugando toda esta semana, al final he conseguido instalar un servidor de Git en Windows.

La instalación de Git es ahora fácil al haber un instalador de Windows. Eso sí, para ser usado a través de bash para Git o de Cygwin, puesto que la opción de meterlo en el PATH de Windows no está aconsejada.

El git daemon quedó totalmente descartado al no tener autentificación de usuarios y quedarse colgado en Windows cuando se intenta un pull.

Así que me puse a intentar la siguiente opción de servidor, el ssh. Windows no lleva servidor de ssh, así que hay que buscarse uno. Primero probé con servidores específicos de Windows, gratuitos, en concreto FreeSSHd, La instalación muy sencilla y además coge los usuarios de Windows, por lo que lo tengo funcionando rápidamente. Un cliente ssh puede conectarse y obtiene un cmd de Windows remoto. El problema viene al intentar integrarlo con Git. Al ser un cmd de Windows, no tiene en el PATH los comandos de Git, Es más, no necesita los comandos de git que vienen en el directorio bin, sino algunos de los que vienen en el directorio libexec/git-core y alguna dll de bin. Tras copiar los ejecutables concretos y dlls concretas que hacen falta en C:\Windows, ya intenta funcionar el git clone ssh://… … pero sólo lo intenta, da error. Buscando en google, me encuentro con que mucha gente tiene el mismo problema, que nadie da solución y que aparentemente FreeSSHd devuelve algún caracter que no le gusta al protocolo de git y va mal, posiblemente los famosos retornos de carro /r/n o sólo /n, por lo que descarto el servidor FreeSSHd para usar con Git. Busqué otros servidores SSH de Windows, pero no encontré ninguno gratuito o que me convenciera.

Así que intenté OpenSSH para Windows, una instalación mínima de cygwin con OpenSSH para Windows. No conseguí hacerlo funcionar rápidamente, posiblemente debido a algún problema en el PC donde hice las pruebas, así que pasé a la siguiente opción, instalar cygwin con git y openssh. La guía del enlace anterior es una maravilla, exactamente lo que necesitaba y funcionó a la primera, incluso instalando OpenSSH como servicio de Windows e importando los usuarios propios de Windows. Un git clone ssh://  también funcionó bien sin problemas …. pero ya sabemos que esto de la programación no es tan maravilloso como parece y siempre hay algún "pero". El único problema, que mucha gente tiene en google y que nadie parece haber resuelto, es que no se pueden clonar repositorios de otros discos que no sean el C:\. Cosas como ssh://host/D:/repo, ssh://host/d/repo o ssh://host/cygdrive/d/repo no funcionan. Como todos sabemos, es buena costumbre en Windows dejar C:\ para el sistema operativo y meter nuestros datos en otro disco (D:\ por ejemplo), así que esta opción, aunque va con repositorios en C:\, no me convence.

ACTUALIZACIÓN: Lo de usar distinto drive está funcionando. Desinstalé el git de windows e instalé el de cygwin a través del setup.exe de cygwin. Ya lo había hecho al instalar el OpenSSH. Ahora git clone ssh://localhost/cygdrive/e/repo funciona correctamente. Quizás el fallo se debiera a lguna incompatibilidad entre los paths del git de Windows que te bajas de http://git-scm.com/ y el de cygwin. 

Así que me cogí los servidores de Git de este comentario y me puse a ello. Una rápida búsqueda en Google para comparar y ver cómo se instalan en Windows me decidió rápidamente a probar gitblit. Entre esta guía de instalación de gitosis en windows y esta otra de gitblit (apartado GO: Single stack solution, con todas las dependencias integradas y 5 minutos para tenerlo funcionando), está claro. Viendo rápidamente el fichero de configuración de gitblit, veo que soporta LDAP, por lo que puedo intentar ponerlo en el Active Directory de Windows. Dicho y hecho, lo prometido por gitblit es cierto, en cinco minutos está funcionando bien y sin problemas. Sólo desempaquetar el zip, indicarle en el fichero de configuración el path donde están tus repositorios y arrancarlo con doble click. La integración con Active Directory me costó un poco más, pero más por culpa de Microsoft que de gitblit, Active Directory no es exactamente igual que LDAP y me dio algún problema hasta encontrar la solución. (principalmente, si necesitas un usuario para consultar LDAP, el nombre de usuario es estilo "cn=jsmith,ou=usuarios,dc=compania,dc=com", mientras que en Active Directory el usuario es "John Smith", es decir, el nombre "expandido" y sin cn=, ou= ni dc=. El segundo problema el campo email. gitblit espera un campo email y Active Directory (al menos el nuestro) tiene uno mail (sin la e delante). Aguí gitblit lanza una excepción y no va. Afortunadamente, el fichero de propiedades de gitblit permite indicar cómo se llama este campo.

Me he quedado con ganas de hacer alguna prueba más con lo del disco no C:\ de OpenSSH y de probar el servidor scm-manager, pero creo que he jugado bastante, tengo servidor git "oficial" con gitblit funcionando y todavía me queda actualizar Hudson o instalarle el plugin correspondiente para que entienda de git.

Resumiendo, si tienes un servidor en Windows, quieres un servidor Git con los usuarios de Active Directory y no quieres "jugar" mucho tiempo, gitblit es una buena opción.

Entradas relacionadas:

2 Responses to “Instalando el servidor de Git en Windows”

  1. Jorge Says:

    Curradísimo el post, y muy interesante.

    Justo pensaba ponerme a ello en unos días, y me has ahorrado muchísimo trabajo 🙂

    Gracias!

  2. Lo mejor de mi RSS del 30 de julio al 5 de agosto | Linux Hispano Says:

    […] Instalando el servidor de Git en Windows – Diario de programación […]

Leave a Reply