Git (pronunciado "guit"2 ) es un software de control de versiones diseñado por Linus Torvalds, pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente. Al principio, Git se pensó como un motor de bajo nivel sobre el cual otros pudieran escribir la interfaz de usuario o front end como Cogito o StGIT. 3 Sin embargo, Git se ha convertido desde entonces en un sistema de control de versiones con funcionalidad plena. 4 Hay algunos proyectos de mucha relevancia que ya usan Git, en particular, el grupo de programación del núcleo Linux.
El mantenimiento del software Git está actualmente (2009) supervisado por Junio Hamano, quien recibe contribuciones al código de alrededor de 280 programadores.
Imagen de http://www.danielnavarroymas.com/ |
Nuestra idea es crear un repositorio git en local y después poder acceder a él mediante el protocolo http/s (git over http) con validación en nuestro servidor LDAP.
Así pues vamos paso a paso. Lo primero es crear un repositorio en local. Para ello creamos una carpeta y dentro de ella ejecutaremos git con el parámetro init:
root@eithel-server:/var/www/git# mkdir test.git
root@eithel-server:/var/www/git# cd test.git/
root@eithel-server:/var/www/git/test.git# git init
Initialized empty Git repository in /var/www/git/test.git/.git/
root@samsagaz:/var/www/git/test.git#
Vamos a ver como se ha inicializado nuestro directorio:
Pues muy bien, ya vemos que efectivamente tenemos una carpeta inicializada para poder trabajar con git. Así que hagamos un commit inicial para ver que tal:
root@eithel:/var/www/git/test.git# git add .root@eithel:/var/www/git/test.git# git commit -m 'initial commit'
# En la rama master
#
# Commit inicial
#
nada que hacer (crear/copiar archivos y utilice «git add» para continuar)
Podemos hacer también git status para ver el estado del repositorio.
Pues bien, ya tenemos repositorio funcionando. Ahora queremos acceder por http/s y queremos que nos pida el usuario para que se valide por LDAP.
Vamos a suponer en este artículo que ya tenemos el servidor Apache instalado. Así pues, ahora lo que vamos ha hacer es configurar nuestro git.conf :
SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
<Directory "/usr/lib/git-core*">
Options ExecCGI Indexes
Require all granted
</Directory>
<Directory /var/www/git>
Options ExecCGI Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
<Location /git/test.git/>
DAV on
# SSLRequireSSL
Require all granted
AuthName "GIT Repo"
AuthType Basic
AuthBasicProvider ldap
AuthLDAPURL ldap://ldapserver:389/ou=People,dc=eithel?uid
AuthLDAPGroupAttributeIsDN off
AuthLDAPGroupAttribute memberUid
require user mi_usuario_LDAP
#Satisfy any
</Location>
Por otro lado nos tenemos que asegurar que los módulos de apache que necesitamos esten activos. Esto lo podemos saber haciendo:/usr/sbin/apache2ctl -t -D DUMP_MODULES
Necesitaremos los módulos authnz_ldap_module y ldap_module para la validación con LDAP y los módulos alias_module, env_module, dav_fs y cgi para el funcionamiento del enlace apache-git.
Si entramos en la carpeta del repositorio creado /var/www/git/test.git podemos ver que configuración tiene por defecto.
more config
Si queremos modificar valores podemos usar el comando git con el parámetro config
git config --file config http.receivepack true
git config --bool core.bare true
Por ejemplo podemos configurar el repositorio de esta manera (en este ejemplo dejaríamos modificar la rama principal):
[core]
repositoryformatversion = 0
filemode = true
bare = true
sharedrepository = 1
[receive]
denyNonFastforwards = true
[http]
receivepack = true
Entonces desde el ordenador cliente, por ejemplo, podemos hacer:
cliente@mipc:/# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 202 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://ediaz@repository-eithel/git/test.git
* [new branch] master -> master
Ahora según el uso que le vayáis a dar, es cuestión ya de ir configurando el respositorio y el cliente para, por ejemplo, excluir según que tipo de archivos del control de versiones mediante la creación del archivo .gitignore, etc.