Hostear repositorios Git de forma sencilla

Git SCM

Primero que nada, gracias a Cesar por la idea de usar git para backups  de ahi me vino toda esa git mania :D

Cuando se trata de sistemas de control de versiones, los primeros que se me vienen a la mente son git y subversion, por motivos de laziness prefiero el primero, por que lo conozco mejor y por que puedo hacer este setup con los ojos vendados (Not really :( )

Bueno, me ahorrare unas lineas diciendo que este setup:

  • Usa llaves ssh para la autenticacion de usuarios
  • Usa un repositorio git para manejar los repositorios de git (Got it?)
  • Solo usa una cuenta de usuario para el manejo de git

Usaremos el proyecto Gitosis, desarrollado por Tommi Virtanen, como se imaginan el proyecto esta hosteado en git :P

Nos fuimos:

Paso 1: Instalar Gitosis

Instalamos git y setuptools de python:

apt-get install git-core python-setuptools

Ahora clonamos el codigo fuente de gitosis y lo instalamos:

cd /usr/src/
git clone git://eagain.net/gitosis.git
cd gitosis
python setup.py install

Paso 2: Crear el usuario para git

Creamos el usuario git (puede llamarse como ustedes quieran):

adduser \
    --system \
    --shell /bin/bash \
    --gecos 'Control de Versiones Git' \
    --group \
    --disabled-password \
    --home /home/git \
    git

Notar que tiene la contraseña deshabilitada, ya que no es necesaria; y tambien que le dimos una shell valida (Que si es necesaria para que ande gitosis).

Ahora para iniciar la instancia de gitosis, necesitaremos una llave pública RSA, si no tienen una pueden crearla con este comando:

ssh-keygen -t rsa -C janitux

Con nuestra llave lista, la copiamos al server que tendra gitosis, e iniciamos finalmente la creacion de la instancia gitosis:

su -c "/usr/bin/gitosis-init < /tmp/id_rsa.pub" git

Y este comando por si tenemos un bug en python-setuptools:

chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

Y comienza la fiesta, clonamos el repositorio de administracion de gitosis:

git clone git@SERVER:gitosis-admin.git

Y ya estamos listos para administrar nuestros repositorios con gitosis! :D

gitosis admin FTW!

Paso 3: Crear Repositorios con gitosis

La administración de gitosis es muy sencilla, basta modificar el fichero gitosis.conf del directorio que clonamos en el paso anterior.
La sintaxis de este fichero se basa en directivas de grupos, se define el grupo, en que repositorios tendrán permisos de escritura o lectura; para más información sobre gitosis.conf ver el fichero example.conf

En fin, en este ejemplo crearemos el grupo “equipo”, con “pato” y “pedro” como miembros del grupo y este grupo tendrá permisos de escritura en los repositorios “mirepo” y “repob”. (Nota: el nombre de usuario se determina mediante los ficheros en el directorio keydir, es el nombre del fichero, sin la extensión .pub)


[group equipo]
writable = mirepo repob
members = pato pedro

Tambien tenemos que agregar las llaves publicas de pato y pedro:


cp id_rsa_pato.pub gitosis-admin/keydir/pato.pub
cp id_rsa_pedro.pub gitosis-admin/keydir/pedro.pub

Con esto estariamos listos para dar un commit y que se apliquen los cambios:

git add gitosis.conf keydir/
git commit -a -m "Creado grupo equipo, con pato y pedro como miembros, y permiso de escritura en los proyectos mirepo y repob"
git push

Y finally creamos el repositorio con el commit inicial:


mkdir -p ~/Git/mirepo
cd ~/Git/mirepo
git init
git remote add origin git@SERVER:mirepo.git
## Hacer trabajos, agregas ficheros con git add, y haces un commit con git commit -a
git push origin master:refs/heads/master

FINALLY! estamos listos para seguir trabajando con nuestros repositorios git :)

Mi única recomendación, sean claros con los nombres de sus mensajes en el commit.

Y obviamente, los creditos van a Garry Dolley, por este howto :D

Leave a Reply