-
1. Inicio - Sobre el Control de Versiones
-
2. Fundamentos de Git
-
3. Ramificaciones en Git
-
4. Git en el Servidor
- 4.1 Los Protocolos
- 4.2 Configurando Git en un servidor
- 4.3 Generando tu clave pública SSH
- 4.4 Configurando el servidor
- 4.5 El demonio Git
- 4.6 HTTP Inteligente
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Git en un alojamiento externo
- 4.10 Resumen
-
5. Git en entornos distribuidos
-
6. GitHub
-
7. Herramientas de Git
- 7.1 Revisión por selección
- 7.2 Organización interactiva
- 7.3 Guardado rápido y Limpieza
- 7.4 Firmando tu trabajo
- 7.5 Buscando
- 7.6 Reescribiendo la Historia
- 7.7 Reiniciar Desmitificado
- 7.8 Fusión Avanzada
- 7.9 Rerere
- 7.10 Haciendo debug con Git
- 7.11 Submódulos
- 7.12 Agrupaciones
- 7.13 Replace
- 7.14 Almacenamiento de credenciales
- 7.15 Resumen
-
8. Personalización de Git
-
9. Git y Otros Sistemas
- 9.1 Git como Cliente
- 9.2 Migración a Git
- 9.3 Resumen
-
10. Los entresijos internos de Git
-
A1. Apéndice A: Git en otros entornos
- A1.1 Interfaces gráficas
- A1.2 Git en Visual Studio
- A1.3 Git en Eclipse
- A1.4 Git con Bash
- A1.5 Git en Zsh
- A1.6 Git en Powershell
- A1.7 Resumen
-
A2. Apéndice B: Integrando Git en tus Aplicaciones
- A2.1 Git mediante Línea de Comandos
- A2.2 Libgit2
- A2.3 JGit
-
A3. Apéndice C: Comandos de Git
- A3.1 Configuración
- A3.2 Obtener y Crear Proyectos
- A3.3 Seguimiento Básico
- A3.4 Ramificar y Fusionar
- A3.5 Compartir y Actualizar Proyectos
- A3.6 Inspección y Comparación
- A3.7 Depuración
- A3.8 Parcheo
- A3.9 Correo Electrónico
- A3.10 Sistemas Externos
- A3.11 Administración
- A3.12 Comandos de Fontanería
4.6 Git en el Servidor - HTTP Inteligente
HTTP Inteligente
Ahora ya tenemos acceso autentificado mediante SSH y anónimo mediante
git://
, pero hay también otro protocolo que permite tener ambos
accesos a la vez.
Configurar HTTP inteligente consiste, básicamente, en activar en el
servidor web un script CGI que viene con Git, llamado git-http-backend
.
Este CGI leerá la ruta y las cabeceras enviadas por los comandos
git fetch
o git push
a una URL de HTTP y determinará si el cliente
puede comunicar con HTTP (lo que será cierto para cualquier cliente a partir
de la versión 1.6.6).
Si el CGI comprueba que el cliente es inteligente, se comunicará inteligentemente
con él; en otro caso pasará a usar el comportamiento tonto (es decir,
es compatible con versiones más antiguas del cliente).
Revisemos una configuración básica. Pondremos Apache como servidor de CGI. Si no tienes Apache configurado, lo puedes instalar en un Linux con un comando similar a este:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env
Esto además activa los módulos mod_cgi
, mod_alias
, y mod_env
, que van a hacer
falta para que todo esto funcione.
A continuación tenemos que añadir algunas cosas a la configuración de Apache para
que se utilice git-http-backend
para cualquier cosa que haya bajo la
carpeta virtual /git
.
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/
Si dejas sin definir la variable de entorno GIT_HTTP_EXPORT_ALL
, Git solo servirá
a los clientes anónimos aquellos repositorios que contengan el archivo daemon-export-ok
,
igual que hace el “demonio” Git.
Ahora tienes que decirle a Apache que acepte peticiones en esta ruta con algo similar a esto:
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Order allow,deny
Allow from all
Require all granted
</Directory>
Finalmente, si quieres que los clientes autentificados tengan acceso de escritura, tendrás que crear un bloque Auth similar a este:
<LocationMatch "^/git/.*/git-receive-pack$">
AuthType Basic
AuthName "Git Access"
AuthUserFile /opt/git/.htpasswd
Require valid-user
</LocationMatch>
Esto requiere que hagas un archivo .htaccess
que contenga las contraseñas
cifradas de todos los usuarios válidos. Por ejemplo, para añadir el usuario
“schacon” a este archivo:
$ htdigest -c /opt/git/.htpasswd "Git Access" schacon
Hay un montón de maneras de dar acceso autentificado a los usuarios con Apache, y tienes que elegir una. Esta es la forma más simple de hacerlo. Probablemente también te interese hacerlo todo con SSL para que todos los datos vayan cifrados.
No queremos profundizar en los detalles de la configuración de Apache, ya que
puedes tener diferentes necesidades de autentificación o querer utilizar un
servidor diferente. La idea es que Git trae un CGI llamado git-http-backend
que cuando es llamado, hace toda la negociación y envío o recepción de datos
a través de HTTP. Por sí mismo no implementa autentificación de ningún tipo,
pero puede controlarse desde el servidor web que lo utiliza. Puedes configurar
esto en casi cualquier servidor web que pueda trabajar con CGI, el que más
te guste.
Nota
|
Para más información sobre cómo configurar Apache, mira la documentación: http://httpd.apache.org/docs/current/howto/auth.html |