2. GIT Repositorios

Note

Servidor git sobre ssh / http

1dnf install git nginx
2systemctl enable sshd
3systemctl start sshd
4systemctl enable nginx
5systemctl start nginx

Directorio de trabajo /home/git

  1. Crear una carpeta con el nombre del repositorio acabado en ‘.git’ (best practice)

useradd -m git
password git
mkdir /home/git/<REPO>.git
cd <REPO>.git
git init --bare

Configuración para git sobre http

  1. Instalación básica de nginx. Fichero default.d/git.conf

    location /home/git/ {
      rewrite /home/git/(.*) /$1 break;
      root /home/git;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME /usr/libexec/git-core/git-http-backend;
      fastcgi_param GIT_PROJECT_ROOT /home/git;
      fastcgi_param PATH_INFO $uri;
      fastcgi_param REMOTE_USER $remote_user;
      fastcgi_param GIT_HTTP_EXPORT_ALL "";
      fastcgi_pass unix:/run/fcgiwrap/fcgiwrap.sock;
      auth_basic "Restricted Access";
      auth_basic_user_file /etc/nginx/gitpasswd;
    

    }

  2. Configuracion del fcgiwrap.service

    [Unit]
    Description=Simple CGI Server
    After=nss-user-lookup.target
    
    [Service]
    EnvironmentFile=/etc/sysconfig/fcgiwrap
    ExecStart=/usr/sbin/fcgiwrap ${DAEMON_OPTS} -c ${DAEMON_PROCS}
    User=git
    Group=gitgroup
    
    [Install]
    Also=fcgiwrap.socket
    
  3. Configuracion del fcgiwrap.socket

    [Unit]
    Description=fcgiwrap Socket
    
    [Socket]
    ListenStream=/run/fcgiwrap/fcgiwrap.sock
    RuntimeDirectory=fcgiwrap
    SocketUser=nginx
    SocketMode=0660
    
    [Install]
    WantedBy=sockets.target
    
  4. Permisos de usuarios y grupos

    sudo groupadd gitgroup
    sudo usermod -aG gitgroup git
    sudo usermod -aG gitgroup nginx
    sudo chgrp -R gitgroup /home/git/<REPO>.git
    sudo chmod -R g+rw /home/git/<REPO>.git
    sudo chmod -R g+s /home/git/<REPO>.git
    
  5. Para evitar problemas

    vi /etc/gitconfig
    [safe]
      directory = /home/git/<REPO1>.git
      directory = /home/git/<REPO2>.git
    
    vi /home/git/<REPO>.git/config
    [...]
         repositoryformatversion = 0
         filemode = true
         bare = true
         sharedrepository = 1
    [receive]
         denyNonFastforwards = true
    [http]
        receivepack = true
    [safe]
         directory = /home/git/<REPO>.git
    

Client side

  1. Clonar el repositorio desde ssh

    git clone ssh://git@<IP>/home/git/<REPO.git>
    
  2. Clonar el repositorio desde http

    git clone http://core.iglu.net/home/git/<REPO>.git