Installation et configuration de Git sur Debian et initialisation d'un dépôt Git

On trouve facilement beaucoup de documentation sur l'utilisation de GIT, mais quand il s'agit de l'installation et de la configuration d'un serveur ça devient  plus rare.  Ce n'est pas une tache très compliquée, mais j'ai du croiser beaucoup de docs et naviguer dans les chapitres du livre ProGit. Le plus dur n'a pas été l'installation mais obtenir une procédure d'initialisation des nouveaux projets.

 

1. Installation de Git

Avant tou il faut être Root sur le serveur.

L'installation est très simple sur Debian, il suffit d'utiliser les paquets du dépot:

 
> aptitude install git-core

Je vais utiliser le protocol ssh pour GIT, j'ai donc besoin d'un utilisateur git sur le serveur avec un dossier Home. J'y stockerai les repository de GIT.

 
> adduser git

 

2. Configuration des utilisateurs

Ensuite il faut créer une configuration minimum pour chaque utilisateur.

 
> su user_name
> cd
> git config --global user.name "user_name"
> git config --global user.email "user_name@domaine.tld"

Cela va créer un fichier .gitconfig à la racine du home de l'utilisateur. Les champs user.name et user.email sont le minimum requis pour utiliser GIT, s'il ne sont pas setter, GIT renverra systèmatiquement une erreur.
On peut completer ce fichier pour avoir par exemple de la coloration dans les commandes de git ou des alias.

 
[user]
        name = user_name
        email = user_name@test.com
 
#Mise en couleur des messages
[color]
    ui = auto
[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green
[color "diff"]
    meta = yellow bold
    frag = magenta bold
    old = red bold
    new = green bold
[color "status"]
    added = yellow
    changed = green
    untracked = cyan
 
#Création d'alias
[alias]
        co = checkout
        st = status
        ci = commit
 

 

Avec Git on utilise beaucoup (tout le temps) des branches, il est donc utile de savoir dans quelle branche on se situe. Pour cela il faut éditer ou créer le fichier .bash_profile ou .profile à la racine du compte de l'utilisateur et y ajouter:

 
# .bash_profile
 
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
 
 
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
 
function proml {
  local LIGHT_GREEN="\[\033[1;32m\]"
  local       WHITE="\[\033[1;37m\]"
  local  LIGHT_GRAY="\[\033[0;37m\]"
  case $TERM in
    xterm*)
    TITLEBAR='\[\033]0;\u@\h:\w\007\]'
    ;;
    *)
    TITLEBAR=""
    ;;
  esac
 
PS1="${TITLEBAR}\
$LIGHT_GRAY\u@\h:$WHITE\w$LIGHT_GREEN\$(parse_git_branch)\
$LIGHT_GRAY\$ "
PS2='> '
PS4='+ '
}
proml
 

Une dernière chose à faire, ajouter les clés des utilisateurs au compte GIT. Cela permettra d'authentifier les commiteurs plus facilcement.
Si vous n'avez pas de clé, c'est simple à créer. Je vous conseilles de ne pas mettre de mot de passe à votre clé, sinon vous aurez à le saisir à chaque commande GIT faisant appel au repository Origin.

 
> ssh-keygen -t rsa -C "user@domain.tldd"

Ensuite il faut copier la clé publique dans la liste des clés autorisées du compte git.

 
> ssh-copy-id -i ~/.ssh/id_rsa.pub git@localhost

Normalement vous devirez pouvoir vous connecter au compte GIT sans avoir à taper votre mot de passe avec la commande.

 
> ssh git@localhost

Si ce n'est pas le cas, le problème vient peut être de la configuration ssh du serveur. Vérifiez que l'authentification par clé est authorisée dans le fichier /etc/ssh/sshd_config

 
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
 

 

3. Initialisation d'un nouveau dépôt GIT

Si vous avez l'habitude de créer des dépots SVN, avec GIT c'est très différent. N'importe quel utilisateur autre que le user git peut initier un nouveau repository. Je commence avec l'utilisateur ulrich dans son home:

 
> su ulrich
> cd

Je crée un dossier portant le nom de mon projet. Ensuite j'ajoute un fichier README.txt, il faut un premier fichier à commiter pour réaliser l'initialisation puis j'initialise le dépôt.

 
> mkdir projet1
> cd projet1
 
> git init
 
> touch README.txt
> git add README.txt
> git add .
> git commit -m "init du projet"
 

A l'issue du commit vous devriez avoir un message de GIT vous indiquant qu'un fichier a été ajouté. Si vous avez configurer le visualisation des branches, vous devriez voir apparaitre le nom de la branche master. Ne surtout pas oublier la commande git add . qui permet d'ajouter les fichiers cachés.
Le dépôt existe mais il n'est pas encore "centralisé" sur le compte GIT. On va réaliser une copie un peu particluier de notre nouveau dépôt puis on la copiera sur le compte git.

 
> cd ..
> git clone --bare projet1 projet1.git
> scp -r projet1.git git@localhost

On peut supprimer projet1.git, il ne nous sert plus à rien. A partir de ce moment, n'importe quel autre utilisateur peut faire un  clone du repository et commencer à commiter dedans.

 
> git clone git@localhost:projet1.git

Toujours avec mon compte ulrich, il faut que j'indique à mon dépôt local où est le dépôt origin.

 
> git remote add origin git@localhost:projet1.git

Il ne reste plus qu'à travailler et à commiter. J'espère que cet article vous sera autant utile à vous qu'à moi.

Il y a 6 commentaires

  • Ahlonko05-27-2013 16:52:42

    Bravo ! Vous m'avez éviter 2 jours de formations personnelles . Je vais pouvoir préciser les choses beaucoup plus rapidement avec ProGit.

    Merci à vous,

  • ahg08-23-2013 13:08:13

    Svp, que designe le "init du projet" dans la partie Initialisation d'un nouveau depot GIT. Merci de me repondre.

  • Ulrich08-26-2013 10:32:40


    Il s'agit du commentaire du commit.


  • Switi09-04-2013 18:35:36

    Est-ce qu'une interface graphique accédable via par exemple http://git.monserveur.com/adminpanel serait disponible ?

  • Ulrich09-05-2013 14:34:46


    Je pense que les projets Gitorious ou Gitweb devraient répndre à vos besoins.


  • Florian10-27-2013 12:24:36

    Bonjour,
    Merci pour ce tuto qui m'a été très utile.
    Par contre, lorsque je fais "scp -r projet1.git git@localhost" une copie de "project1.git" est effectué dans mon répertoire sous le nom "git@localhost".
    Pour qu'il soit copié dans le réperoire "/home/git" il a fallut que je rajoute ":" à la fin de la commande ("scp -r projet1.git git@localhost:").