Los Protocolos
- Git puede usar cuatro protocolos principales para transferir datos: Local, HTTP, Secure Shell (SSH) y Git.
Local Protocol
- Se
utiliza habitualmente cuando todos los miembros del equipo tienen
acceso a un mismo sistema de archivos, como por ejemplo un punto de
montaje NFS, o en el caso menos frecuente de que todos se conectan al
mismo computador. Aunque este último caso no es precisamente el ideal,
ya que todas las instancias del repositorio estarían en la misma
máquina; aumentando las posibilidades de una pérdida catastrófica.
- Para clonar un repositorio local, puedes usar algo como:
git clone /opt/git/project.git
o
git clone file:///opt/git/project.git
- Git trabaja
ligeramente distinto si indicas file:// de forma explícita al comienzo
de la URL. Si escribes simplemente el camino, Git intentará usar enlaces
rígidos (hardlinks) o copiar directamente los archivos que necesita. Si
escribes con el prefijo file://, Git lanza el proceso que usa
habitualmente para transferir datos sobre una red; proceso que suele ser
mucho menos eficiente.
- Para añadir un repositorio local a un proyecto Git existente
git remote add local_proj /opt/git/project.git
Ventajas
- Los repositorios basados en carpetas y archivos, son más simples y aprovecha de los permisos preexistentes de acceso
Desventajas
- Dificultad de asceso en distintas ubicaciones
Protocolos HTTP
- Git
puede utilizar el protocolo HTTP de dos maneras. Antes de la versión
1.6.6 de Git, solo había una forma de utilizar el protocolo HTTP y
normalmente en sólo lectura. Con la llegada de la versión 1.6.6 se
introdujo un nuevo protocolo más inteligente que involucra a Git para
negociar la transferencia de datos de una manera similar a como se hace
con SSH. En los últimos años, este nuevo protocolo basado en HTTP se ha
vuelto muy popular puesto que es más sencillo para el usuario y también
más inteligente. Nos referiremos a la nueva versión como el HTTP
“Inteligente” y llamaremos a la versión anterior el HTTP “tonto”.
HTTP Inteligente
- funciona
de forma muy similar a los protocolos SSH y Git, pero se ejecutan sobre
puertos estándar HTTP/S y pueden utilizar los diferentes mecanismos de
autenticación HTTP. Esto significa que puede resultar más fácil para los
usuarios, puesto que se pueden identificar mediante usuario y
contraseña (usando la autenticación básica de HTTP) en lugar de usar
claves SSH.
- Es, probablemente, la forma más popular de usar Git
ahora, puesto que puede configurarse para servir tanto acceso anónimo
(como con el protocolo Git) y acceso autenticado para realizar envíos
(push), con cifrado similar a como se hace con SSH. En lugar de tener
diferentes URL para cada cosa, se puede tener una única URL para todo.
Si intentamos subir cambios (push) al repositorio nos pedirá usuario y
contraseña, y para accesos de lectura se puede permitir el acceso
anónimo o requerir también usuario.
- De hecho, para servicios
como GitHub, la URL que usamos para ver el repositorio en la web (por
ejemplo, “https://github.com/schacon/simplegit”) es la misma que
usaríamos para clonar y, si tenemos permisos, para enviar cambios.
HTTP Tonto
- Si
el servidor no dispone del protocolo HTTP “Inteligente”, el cliente de
Git intentará con el protocolo clásico HTTP que podemos llamar HTTP
“Tonto”. Este protocolo espera obtener el repositorio Git a través de un
servidor web como si accediera a archivos normales. Lo bonito de este
protocolo es la simplicidad para configurarlo. Básicamente, todo lo que
tenemos que hacer es poner el repositorio Git bajo el directorio raíz de
documentos HTTP y especificar un punto de enganche (hook) de
post-update (véase Puntos de enganche en Git). Desde este momento,
cualquiera con acceso al servidor web donde se publique el repositorio
podrá también clonarlo. Para permitir acceso lectura con HTTP, debes
hacer algo similar a lo siguiente:
cd /var/www/htdocs/
git clone --bare /path/to/git_project gitproject.git
cd gitproject.git
mv hooks/post-update.sample hooks/post-update
chmod a+x hooks/post-update
Ventajas
- Con el inteligente tenemos un único URL para todos los tipos de acceso
Inconvenientes
- Git sobre HTTP/S puede ser un poco más complejo de configurar comparado con el SSH.
El Procotolo SSH
- SSH
es un protocolo muy habitual para alojar repositorios Git en hostings
privados. Esto es así porque el acceso SSH viene habilitado de forma
predeterminada en la mayoría de los servidores, y si no es así, es fácil
de habilitarlo. Además, SSH es un protocolo de red autenticado, y es
sencillo de utilizar.
- Para clonar un repositorio a través de SSH, puedes indicar una URL ssh:// tal como:
git clone ssh://user@server/project.git
- También puedes usar la sintaxis estilo scp del protocolo SSH:
git clone user@server:project.git
Ventajas
- Es fácil de configurar.
- Es seguro ya que las transferencias son encriptadas y autentificadas.
- Es eficiente, comprimiendo los datos lo más posible antes de transferirlos.
Desventajas:
- Imposibilidad para dar acceso anónimo al repositorio
El protocolo Git
- El
protocolo Git es un demonio (daemon) especial, que viene incorporado
con Git. Escucha por un puerto dedicado (9418), y nos da un servicio
similar al del protocolo SSH; pero sin ningún tipo de autentificación.
- Para
que un repositorio pueda exponerse a través del protocolo Git, tienes
que crear en él un archivo git-daemon-export-ok; sin este archivo, el
demonio no hará disponible el repositorio.
Ventajas
- Es el más rápido de todos los disponibles.
Desventajas
- Es su falta de autentificación