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 12 commentaires.

Ecrit par Sylvain le 3 sept. 2017

Attention, il me semble qu'il faut plutot écrire : scp -r projet1.git git@localhost: sinon cela créé une copie locale

Ecrit par haccoun le 16 juil. 2017

git est installé sur le serveur. if faut aussi installer git sur le client ?.

Réponse de Ulrich le 16 juil. 2017

Oui il faut également installer git sur le client

Ecrit par Guy le 15 janv. 2015

Bonjour, je dois travailler sur la traduction d'un dossier/dépôt déjà installé sur Git (https://code.google.com/p/dibl/wiki/NewStitches#Stitches_for_interleaved_pair_traversal_patterns) par un autre auteur. Pour ce faire, et surtout pour éviter d'abîmer le travail de son auteur, je devrais travailler sur mon ordi pour recréer la même arborescence mais en français. Je dois bien reconnaître que je suis hésiatnt pour me lancer dans l'aventure et je ne vois pas bien comment, après avoir installé Git sur ma Debian 7.8, je peux "rapatrier" ce dépôt pour le retravailler en toute tranquilité chez moi avat de le transférer, une fois la plus grosse partie des traductions effectuée. J'ai, bien entendu obtenu les droits pour travailler sur ce dépôt. Je ne dois pas créer un nouveau dépôt mais compléter celui existant. Merci de m'éclairer (me rassurer ?) un petit peu plus.

Réponse de Ulrich le 15 janv. 2015

Bonjour,

Après avoir récupéré le dépôt avec "git clone", vous pouvez commiter vos modifications avec "git commit". Elles ne seront envoyées sur le dépôt d'origine qu'après avoir utilisé la commande "git push".

Pour faciliter le travail de  vérification, je vous conseille de créer une branche et de travailler dessus dès que vous avez cloné le dépot: "git checkout -b nom_branche". Une fois finis vous pourrez envoyer la branche sur le dépot d'origine avec la commande "git push origin nom_branche".

Ecrit par Seb le 22 déc. 2014

Je suis d'accord avec Florian, le ":" est nécessaire en fin d'instruction pour la copie en scp

Ecrit par Florian le 27 oct. 2013

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:").

Ecrit par Switi le 4 sept. 2013

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

Réponse de Ulrich le 5 sept. 2013

Je pense que le projet Gitweb devraient répndre à vos besoins.

Ecrit par ahg le 23 août 2013

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

Réponse de Ulrich le 26 août 2013

Il s'agit du commentaire du commit.

Ecrit par Ahlonko le 27 mai 2013

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

Ajouter un commentaire