Extra: Instalación y configuración de Git bajo Apache2.2

por el 03/12/12

Vamos a comenzar preparando Git para poder visualizarlo desde Apache2.2

En primer lugar descargamos msysgit. Hay varias opciones disponibles. Nosotros hemos elegido la versión Portable. A día de este manual es la versión 1.8.0. Una vez descargado lo extraemos en D:\server\git-win32 (Recordad que D:\server es el directorio que hemos estado usando para guardar todo lo relacionado con nuestro servidor).


Instalamos gitweb y sus dependencias.

sudo apt-get -y install gitweb


Instalamos gitweb y sus dependencias.

sudo yum -y install gitweb

Con esto ya tendremos Git en nuestro sistema, ahora vamos a integrarlo con Apache2.2

(Si has instalado PHP, Subversion o Trac siguiendo nuestro manual sáltate este punto) Nos dirigimos al archivo de configuración de Apache, Apache2\conf\httpd.conf y vamos al final del documento y añadimos.

# Addons config
Include conf/addons/*.conf

Dentro del directorio de configuración creamos una nueva carpeta llamada addons y dentro de esta un archivo git.conf. Abrimos el archivo y escribimos.

SetEnv GIT_PROJECT_ROOT D:/server/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \
                    info/refs | \
                    objects/(info/[^/]+ | \
                             [0-9a-f]{2}/[0-9a-f]{38} | \
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                    git-(upload|receive)-pack))$" \
    D:/server/git-win32/libexec/git-core/git-http-backend.exe/$1
ScriptAlias /git D:/server/git-win32/share/gitweb/gitweb.cgi/
Alias /static D:/server/git-win32/share/gitweb/static/


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all

A continuación, abrimos el archivo D:\server\git-win32\share\gitweb\gitweb.cgi.

La primera línea corresponde a la ruta de Perl, Msysgit viene con una versión de Perl, así que no es necesario instalarlo. Reemplazamos esa línea con la ruta correspondiente de perl

.

#!D:/server/git-win32/bin/perl

A continuación buscamos our $GIT = y le indicaremos la ruta de nuestro Git. En nuestro caso quedaría.

our $GIT = "D:/server/git-win32/bin/git";

Por último, buscamos la línea our $projectroot = , donde indicaremos la ruta donde estarán nuestros repositorios. En nuestro caso, hemos creado una carpeta en D:\server\git, por lo que quedaría:

our $projectroot = "/D/server/git";

Nota: Esta parte no admite rutas Windows, por lo que hemos reemplazado D:\ por /D/ para indicarle que es el disco duro D.


Para configurar git en nuestro apache, editamos el archivo /etc/apache2/conf.d/gitweb (se debe ser root).

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \
                    info/refs | \
                    objects/(info/[^/]+ | \
                             [0-9a-f]{2}/[0-9a-f]{38} | \
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                    git-(upload|receive)-pack))$" \
    /usr/lib/git-core/git-http-backend/$1
ScriptAlias /git /usr/share/gitweb/gitweb.cgi
Alias /static /usr/share/gitweb/static/


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all

Ahora creamos el directorio donde se guardaran los repositorios, nosotros hemos usado /var/www/git.

Para terminar editamos el archivo /etc/gitweb.conf/ para indicar la ruta para nuestros repositorios. Cambiamos el valor de $projectroot

$projectroot = "/var/www/git";

Para configurar git en nuestro apache, editamos el archivo /etc/httpd/conf.d/git.conf (se debe ser root).

SetEnv GIT_PROJECT_ROOT /var/www/git
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAliasMatch \
    "(?x)^/git/(.*/(HEAD | \
                    info/refs | \
                    objects/(info/[^/]+ | \
                             [0-9a-f]{2}/[0-9a-f]{38} | \
                             pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
                    git-(upload|receive)-pack))$" \
    /usr/lib/git-core/git-http-backend/$1
ScriptAlias /git /usr/share/gitweb/gitweb.cgi
Alias /static /usr/share/gitweb/static/


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all


    Options -Indexes FollowSymLinks
    AllowOverride AuthConfig FileInfo
    Order allow,deny
    Allow from all

Abrimos el archivo /var/www/git/gitweb.cgi y buscamos our $projectroot = , reemplazando por.

our $projectroot = "/var/www/git";

Con esto hemos terminado la instalación de Git en nuestro Apache y solo resta crear un repositorio.

En la carpeta que creamos para nuestros repositorios ejecutamos el siguiente comando por consola para crear el repositorio test.git.

D:\server\git-win32\bin\git init --bare test.git && cd test.git && git config http.receivepack true


En la carpeta que creamos para nuestros repositorios ejecutamos el siguiente comando por consola para crear el repositorio test.git.

sudo -u www-data git init --bare test.git && sudo git config http.receivepack true


En la carpeta que creamos para nuestros repositorios ejecutamos el siguiente comando por consola para crear el repositorio test.git.

sudo -u apache git init --bare test.git && sudo git config http.receivepack true

Nota: Atentos si se produce una alerta en SELinux al hacer push. Tendréis que desactivar SELinux o crear una excepción como se indica en el mensaje de la alerta.

Con nuestro nuevo repositorio ya creado, abrimos el navegador y nos dirigimos a:

https://127.0.0.1/git

Deberíamos ver algo como la imagen inferior.