Git es un sistema distribuido de control de revisiones.
Vamos a crear un repositorio remoto compartido de git y le añadiremos la siguiente funcionalidad:
- Acceso de lectura y escritura usando el protocolo ssh.
- Acceso anónimo de sólo lectura vía git-daemon.
- Navegar por los repositorios de git vía web.
- Mandar notificaciones por email cuando el usuario realiza un commit.
Este artículo muestra cómo configurar un repositorio de Git en una distribución Debian (Sid).
Crear el repositorio en la máquina remota
Primero vamos a configurar la máquina remota donde instalaremos el repositorio de git.
Creamos el directorio donde colocaremos el repositorio de git:
$ mkdir /gitrepoInstalamos git
$ sudo aptitude install gitTodos los usuarios capaces de leer y escribir en el repositorio deben pertenecer al grupo gitgroup:
$ sudo groupadd gitgroup $ sudo chgrp -R gitgroup /gitrepo$ sudo chmod g+w /gitrepoDirectorio "home" genérico para los usuarios pertenecientes al grupo gitgroup:
$ sudo mkdir /home/gitgroup$ sudo chgrp -R gitgroup /home/gitgroupAñadimos nuestro usuario actual al grupo gitgroup.
$ sudo adduser mi_usuario gitgroupLos cambios se harán efectivos después de volverse a loguear.
$ groupsmi_usuario sudo gitgroup
Creamos ahora un repositorio git vacío.
$ cd /gitrepo$ git init --bare --shared=0664 my_git_project
Initialized empty shared Git repository in /gitrepo/bar/NOTA:
0664: el usuario "otro" tiene permisos de sólo lectura.
0660: el usuario "otro" no tiene permisos.
$ chgrp -R gitgroup my_git_projectLa opción --shared hace que los directorios, los nuevos ficheros que se creen, etc, tengan los permisos adecuados.
Ahora tenemos un repositorio vacío donde podemos subir nuestros nuevos commits, o algún repositorio preexistente.
Acceso de lectura y escritura
Para permitir acceso de lectura y escritura empleamos el servidor de ssh.
El servidor ssh se encarga de la autentificación, y si es correcta, permite al usuario acceder al contenido del repositorio y ejecutar comandos de git.
Instalar el servidor ssh en la máquina remota:
$ sudo aptitude install openssh-serverCreamos algunos usuarios restringidos p.ej: "user_git" que sólo podrán ejecutar comandos git:
$ sudo adduser --shell /usr/bin/git-shell --home /home/gitgroup --ingroup gitgroup --disabled-login user_git$ sudo passwd user_git$ sudo adduser user_git gitgroupDespués de configurar correctamente el servidor ssh ya podemos clonar el repositorio desde "fuera":
Éste es el formato general de una dirección de ssh: ssh://[user@]host.xz[:port]/path/to/repo.git/
$ git clone ssh://user_git@my_computer/gitrepo/my_git_project
Cloning into 'my_git_project'...
user_git@myComputer's password:
warning: You appear to have cloned an empty repository.Si ya tenemos un repositorio preexistente en nuestra máquina local, podemos subirlo al repositorio remoto:
Local_box$ cd repo$ git remote add remote_repo ssh://user_git/gitrepo/bar$ git push remote_repo master:masterEsto significa que hemos creado una configuracion remota llamada "remote_repo",
entonces subimos el contenido de la rama master del repositorio local a la rama master del repositorio remoto.
Acceso de sólo lectura
Proporcionamos acceso anónimo de sólo lectura a nuestro repositorio utilizando git-daemon
Instalamos git-daemon:
Git-daemon ya viene instalado con el paquete git. No necesitamos por tanto instalar más paquetes.
$ dpkg -S /usr/lib/git-core/git-daemon
git: /usr/lib/git-core/git-daemonLlamaremos al git-daemon mediante el demonio xinetd.
$ sudo aptitude install xinetdConfiguramos xinetd para el demonio git:
$ sudo nano /etc/xinetd.d/gitservice git
{
disable = no
socket_type = stream
wait = no
user = nobody
group = gitgroup
server = /usr/lib/git-core/git-daemon
server_args = --reuseaddr --syslog --inetd --verbose
log_on_failure += USERID
}
Reiniciamos el servicio xinetd:
$ sudo service xinetd restartProporcionamos acceso para los usuarios anónimos:
$ cd /gitrepo/my_git_project$ touch git-daemon-export-okEn la máquina local podemos ahora clonarlo:
$ git clone git://REMOTE_IP/gitrepo/my_git_project my_git_projectNavegar por el repositorio via web
Para navegar via web por el repositorio git vamos a usar la herramienta gitweb.
Instalamos gitweb:
$ sudo aptitude install gitweb # Instala también apache como una dependencia.$ sudo aptitude install libapache2-mod-perl2 # mode perl de apache para ejecuar los scripts cgi.Configuramos apache:
Puedes añadir ésto a /etc/apache2.conf o donde convenga:
# Configuración para ejecutar scripts perl cgi:
<Files ~ "\.(pl|cgi)$">
SetHandler perl-script
PerlResponseHandler ModPerl::PerlRun
Options +ExecCGI
PerlSendHeader On
</Files>
# Configuración para crear un host virtual
<VirtualHost *:80>
DocumentRoot /var/www
Alias /gitrepo /usr/share/gitweb
SetEnv GITWEB_CONFIG /etc/gitweb.conf
ServerName your.computer.name
<Directory /var/www/git>
Allow from all
AllowOverride all
Order allow,deny
Options +ExecCGI
AddHandler cgi-script .cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
Configuramos gitweb:
$ sudo nano /etc/gitweb.conf# path to git projects (.git) $projectroot = "/gitrepo"; # lugar donde colocamos nuestros proyectos de git. $home_link_str = "Gitrepo"; # Muestra ésto como "base" de nuestros proyectos en el navegador. # Muestra estas direcciones para clonar los proyectos de git. our @git_base_url_list = qw(git://your_remote_IP/gitrepo ssh://your_remote_IP/gitrepo); $site_name = "My Git Repository"; # Page name. $export_ok = "git-daemon-export-ok"; # Igual que para hacerlos visibles con git-daemon. $feature{'blame'}{'default'} = [1];
Configurar la descripción del proyecto de git.
NOTA: No se debe configurar la Description como una variable de git a gitweb no la detectará.
$ cd /gitrepo/my_git_project$ echo "Mi primer proyecto en este repositorio" > descriptionConfiguramos el dueño del proyecto:
$ git config gitweb.owner "User name <user@email.address>"Configuramos el usuario del servidor web para garantizarle permisos para acceder al directorio gitrepo:
$ sudo adduser www-data gitgroupNOTA: Como www-data tiene acceso de escritura por gitgroup, el directorio DocumentRoot no debería ser el mismo que /var/www/git.
$ sudo service apache2 restartAhora podemos abrir http://tu_IP_remota/gitrepo en nuestro navegador y observar la lista de nuestros proyectos.
Seleciona uno de ellos y entra en el sumario. Puedes comprobar los commits, etc.
Mandar un email cuando el usuario envía un commit
Mandar un email es una funcionalidad útil en un proyecto compartido donde varios usuario pueden realizar commits.
Necesitaremo un hook que viene con el paquete git:
$ dpkg -S /usr/share/git-core/contrib/hooks/post-receive-email
git: /usr/share/git-core/contrib/hooks/post-receive-emailAhora vamos al proyecto git y configuramos los hooks indicándole el adecuado hook post-receive-email.
$ cd /gitrepo/my_git_project/hooks$ cp /usr/share/git-core/contrib/hooks/post-receive-email post-receive$ chmod a+x post-receiveAñadimos los usuarios que serán notificados via email:
$ git config hooks.mailinglist "foo@bar.com,baz@bar.net"Configuramos el contenido del mensaje de email mediante la variable de git: hooks.showrev
Ésta primera, muestra menos información que la configuración que sigue:
$ git config hooks.showrev "git show -C %s; echo"en ésta: adáptala a tu sistema. p.ej: IP_de_tu_repositorio y my_git_project
$ git config hooks.showrev "t=%s; printf 'http://IP_de_tu_repositorio/gitrepo/?p=my_git_project;a=commitdiff;h=%%s' \$t; echo;echo; git show -C \$t; echo"El email se cortará después de 100 líneas:
$ git config hooks.emailmaxlines 100NOTA: sendmail o el demonio de email que sea debe estar correctamente configurado y ejecutándose
$ sudo aptitude install sendmail$ sudo service sendmail startREFERENCIA
$ man git-daemonCompartir un repositorio git entre varios usuarios:
http://serverfault.com/questions/26954/how-do-i-share-a-git-repository-with-multiple-users-on-a-machine
Mandar un email cuando un usuario realiza un commit:
http://stackoverflow.com/questions/552360/git-push-email-notification
http://git.kernel.org/cgit/git/git.git/tree/contrib/hooks/post-receive-email?id=HEAD
Instalar y configurar gitweb:
https://www.kernel.org/pub/software/scm/git/docs/gitweb.html
https://www.kernel.org/pub/software/scm/git/docs/gitweb.conf.html
http://gofedora.com/how-to-install-configure-gitweb/
Configurar los scripts perl cgi en apache2:
http://stackoverflow.com/questions/560749/how-do-i-configure-apache2-to-run-perl-cgi-scripts
Traducido de:
How to Create a shared Git Repository in Debian (ssh, git-daemon, gitweb)
puede que también le interese:
GIT : Guía Rápida : Chuleta
No hay comentarios:
Publicar un comentario