Configurar Gitosis
Gitosis es básicamente una herramienta que nos permite gestionar los accesos a repositorios Git. Esto lo realiza a través de SSH, gestionando el fichero authorized_keys del usuario gitosis.
Instalación
Para su instalación, bastará con ejecutar lo siguiente:
$ sudo apt-get install git-core gitosis
dependiendo de la versión de Ubuntu/Debian disponible, el paquete que contiene Git se puede llamar git o git-core.
Una vez instalado, vamos a dar acceso al administrador. Para ello, supongamos un usuario con permisos de administración llamado user.
$ sudo -H -u gitosis gitosis-init < /home/user/.ssh/id_user.pub
Initialized empty Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /srv/gitosis/repositories/gitosis-admin.git/
Ahora, desde el cliente, vamos a probar la conexión SSH:
$ ssh gitosis@miservidor.com
Si todo ha ido bien, tenemos el acceso al servidor, así que ya podemos cerrar la conexión SSH.
Añadir repositorios y usuarios
Lo primer es clonar el repositorio de administración. A través de él podremos controlar los repositorios y los usuarios de forma simple y sencilla.
$ git clone gitosis@miservidor.com:gitosis-admin.git
Cloning into gitosis-admin...
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
Aquí tenemos disponibles dos elementos claves:
- gitosis.conf: Fichero de configuración
- keydir: directorio con las claves públicas de los usuarios que tienen acceso
Vamos a crear otro repositorio nuevo llamado miproyecto, para ello editamos gitosis.conf:
[gitosis]
[group gitosis-admin]
writable = gitosis-admin
members = user
[group miproyecto]
writable = miproyecto
members = user member1 member2
Y añadimos las claves de los usuarios member1 y member2:
$ cd gitosis-admin
$ cp ~/member1.pub keydir/
$ cp ~/member2.pub keydir/
Ahora vamos a subir los cambios al servidor:
$ git add keydir gitosis.conf
$ git commit -m 'miproyecto con member1 y member2'
$ git push
Creando nuevos repositorios
Hasta ahora, hemos indicado a gitosis que habrá un nuevo repositorio y los usuarios que tienen acceso a él. Ahora vamos realmente a crear el repositorio. Todo esto se hace desde el lado del cliente:
$ git init miproyecto.git
Initialized empty Git repository in /home/member1/miproyecto.git/.git/
$ cd miproyecto.git/
$ git remote add origin gitosis@miservidor.com:miproyecto.git
Si tratamos de subir los cambios al servidor, nos indicará que el repositorio está vacío.
$ git push origin master
Initialized empty Git repository in /srv/gitosis/repositories/miproyecto.git/
error: src refspec master does not match any.
error: failed to push some refs to 'gitosis@miservidor.com:miproyecto.git'
Así que vamos a crear algo de contenido:
$ echo "" > README
$ git add README
$ git commit
[master (root-commit) 0dcec56] Initial commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 README
$ git push origin master
Initialized empty Git repository in /srv/gitosis/repositories/miproyecto.git/
Counting objects: 3, done.
Writing objects: 100% (3/3), 215 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To gitosis@miservidor.com:miproyecto.git
* [new branch] master -> master
Y con esto todo listo :)
Tags
La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.
