Repositorio de código con Git y Gitolite en Debian

Desde que Linus Torvalds, creador del Kernel Linux, desarrolló el sistema de control de versiones Git, ha ido comiendo terreno su implantación en la comunidad del Software Libre, hasta el punto de que ya son pocos los proyectos importantes que no usan éste como sistema control de versiones.

Gitolite te permite crear un servidor git centralizado con mucha facilidad, pudiendo controlar muy fácilmente los usuarios, los repositorios y los grupos de desarrolladores así como sus relaciones.

Ya había tenido experiencia con Gitosis, y aunque lo estamos usando en otros proyectos en un servidor personal, no me había convencido del todo. Para un grupo de investigación de la Universidad Carlos III en el que actualmente estoy trabajando decidí estudiar alternativas, y surgió gitolite.

Hay algunos tutoriales en Internet sobre cómo configurar tu servidor con gitolite, pero ninguno me convenció al 100% y me encontré con algún problema que no estaba bien explicado, por lo que para mí era necesaria una aclaración, de ahí esta entrada. :-)

Para este tutorial se tendría que tener conocimientos básicos de bash.

Para cualquier duda, podéis consultarme por los comentarios. :-)

Tutorial de Gitolite

Primero de todo añadimos el repositorio de lenny-backports (si no está ya en el archivo) a /etc/apt/sources.list

(# significa hacer estas acciones como root, $ como usuario normal)

# nano /etc/apt/sources.list

Introducimos la siguiente línea en el archivo:

deb http://www.backports.org/debian lenny-backports main

Una vez hecho esto instalamos git y gitolite en la máquina.

# apt-get -t lenny-backports install gitweb git-daemon-run gitolite

Instalados los paquetes, añadimos nuestra clave pública ssh (Si no tenemos una nos hacemos una con el comando ssh-keygen). Ésta suele estar guardada en...

~/.ssh/id_rsa.pub

La subimos al servidor en /tmp (este comando lo ejecutamos desde nuestra máquina, no en el servidor):

$ scp ~/.ssh/id_rsa.pub [email protected]:/tmp

Ahora volvemos a entrar al servidor por SSH, y ejecutamos lo siguiente:

# cd /var/lib/gitolite

gl-setup /tmp/id_rsa.pub

Esto añade a gitolite la clave ssh para poder descargarnos el repositorio de administración de gitolite, poder crear nuevos repositorios en la máquina y nuevos usuarios que trabajen en ellos.

Llega el momento de crear nuevos proyectos y dar acceso a usuarios a su proyecto. Descargamos el repositorio de admin de gitolite, gitolite-admin, en nuestra máquina donde generamos la clave ssh (usuario):

$ git clone [email protected]:gitolite-admin.git

Tenemos dos directorios, conf, donde creamos los nuevos proyectos y los permisos de los usuarios, y keydir, donde pondremos las claves públicas ssh de los nuevos trabajadores de nuestros proyectos. Vamos a añadir un proyecto example con un usuario juan que lo controla (permisos lectura/escritura), y dos personas, javier y luis, que sólo lo leen para descargarse los datos pero no pueden escribir en el proyecto.

Editamos el archivo conf/gitolite.conf dentro de gitolite-admin y al final añadimos lo siguiente:

repo example:
RW+ = juan
R = javier luis

Una vez hecho esto añadimos las claves públicas SSH de los usuarios juan, luis, y javier en la carpeta keydir. Recordamos que las claves ssh se generan con el comando ssh-keygen, y que se encuentran en /home/usuario/.ssh/id_rsa.pub

Los metemos en el directorio keydir, renombrando el id_rsa.pub con el nombre de usuario.pub, en nuestro caso la carpeta keydir tendría los siguientes archivos, con las claves ssh de nuestros compañeros:

keydir/
luis.pub
javier.pub
juan.pub

Ya tenemos todo para descargarnos el repositorio example y trabajar con él, falta subir estos cambios a gitolite, para que nos cree el repositorio, los permisos y todo lo que necesitamos.

En la carpeta gitolite-admin que descargamos y en la que hemos estado trabajando:

$ git add . (Añadimos todos los cambios del proyecto, lo que hemos hecho en la carpeta conf y en keydir) $ git commit -m 'Añadido repositorio example' $ git push origin master (Subimos los cambios al servidor)

¡Ya podemos trabajar con nuestro proyecto example!

En nuestra máquina podremos hacer...

$ git clone [email protected]:example.git

Espero que esté un poco claro. :-)

Javier Aguirre

Read more posts by this author.

comments powered by Disqus