mardi 22 mars 2016

Installation d'un serveur Git sur Ubuntu


1 - Sur le serveur Git

1.1 - Installation de "git"

Ajout du "PPA (Personal Package Archive) officiel" fournit pat Git :
sudo add-apt-repository ppa:git-core/ppa

Mise à jour du "repository" utilisé par "apt-get" :
$ sudo apt-get update

Installation de Git
$ sudo apt-get install git

Test d'utilisation de Git
$ git --version
git version 2.11.0


(  Pour désinstaller Git et toutes ses dépendances :
 $ sudo apt-get remove --auto-remove git  )


1.2 - Création du user "git"

$ sudo adduser git
Saisie du password pour le user "git"

$ su git
$ cd
$ pwd
/home/git


1.3 - Création d'un "repository" vide

$ cd /opt/git
mkdir project1.git
$ cd project1.git
$ git init --bare
( l'option "--bare" sert à initialiser un dépôt sans répertoire de travail )
$ ls -lisa
Structure classique des fichiers et répertoire git :
   branches
   config
   description
   HEAD
   hooks
   info
   objects
   refs

2 - Sur le "client" Git

Sur le poste qui va se connecter au serveur...


2.1 - Mise en place de la connexion "ssh" avec clé publique

- Test de la connexion ssh avec mot de passe :
( sous Windows utiliser "Git Bash" qui permet de travailler en ligne de commande )
$ ssh git@<hostname> 
En l'absence de clé publique le mot de passe est demandé

- Génération des clés ( clé publique et clé privée ) si elles n'existent pas déjà
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which you want to save the key (xxx/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in xxx/.ssh/id_rsa.
Your public key has been saved in xxx/.ssh/id_rsa.pub.
The key fingerprint is :
... 
The key’s ramdonart image is:
... 
2 fichiers sont générés dans le répertoire $HOME/.ssh de l’utilisateur :
  - id_rsa  ( la clé privée )
  - id_rsa.pub  ( la clé publique )

- Copie de la clé publique sur le serveur git pour le user "git"
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@<hostname>
git@<hostname>’s password:
Number of key(s) added: 1
Now try to logging into the machine, 
with "ssh 'git@<hostname>‘”

- Test de la connexion ssh sans mot de passe :
$ ssh git@<hostname> 
Le mot de passe n'est plus demandé

L'accès en "ssh" sans mot de passe est maintenant OK.
Git va donc pouvoir utiliser le serveur remote avec le protocole "ssh"

2.2 - Utilisation de Git en SSH à partir du poste client

Initialisation du repository local (sur le poste client)
$ git init

Création d'un fichier (par exemple un simple fichier ".txt" )

Staging et commit du nouveau fichier
$ git add .
$ git commit -m "Initial commit"

Définition du serveur "remote" avec un chemin absolu (SSH est le protocole par défaut)
$ git remote add origin git@<hostname>:/opt/git/project1.git
git remote -v
origin  git@<hostname>:/opt/git/project1.git (fetch)
origin  git@<hostname>:/opt/git/project1.git (push)
ou avec le préfixe "ssh://" pour être plus explicite
git remote add origin ssh://git@<hostname>:/opt/git/project1.git

Pour utiliser un chemin relatif : "/~" = répertoire "home" de l'utilisateur (ici home de "git")
git remote add origin ssh://git@<hostname>:/~/project1.git

Pour faire un "push" sur le serveur "remote"
$ git push origin master

     Vérification du résultat du "push" sur le serveur (remote)  :
     Côté serveur :
  $ git log       
     Le commit fait côté client doit apparaitre dans le résultat de la commande

Pour faire un "fetch" à partir du serveur "remote"
git fetch



3 - Au-delà du protocole SSH 

Le serveur Git peut être adressé avec différents protocoles
  • file://
  • ssh://
  • git://
  • http://
  • https://

Le protocole git:// nécessite de lancer le "git daemon" sur le serveur,
il permet un accès non authentifié mais n'est pas "internet friendly" (il écoute sur un port spécifique, le 9418 par défaut)

Le protocole http:// ou https:// suppose la mise en place d'un serveur http,
généralement "Apache" avec utilisation de WebDAV ou du script CGI "git-http-backend"

Pour plus d'information sur les différents modes d'accès à un serveur Git voir l'article de Patrick Debois http://www.jedi.be/blog/2009/05/06/8-ways-to-share-your-git-repository/