Intégration continue - EPSI POE mars 2017 - David Gayerie Licence Creative Commons

Git est un gestionnaire de contrôle de source (Source Control Management ou SCM). Il permet de partager efficacement les fichiers source d'un projet. Pour ce cours, Git va nous permettre de partager et de suivre les modifications du code source de nos applications et la configuration de nos machines cibles. Un système de contrôle de version tel que Git est fondamental pour permettre à une équipe de travailler collectivement sur une base de code commune. Git est avant tout conçu gérer des fichiers en mode texte.

Git a été originellement développé par Linus Torvalds pour gérer les évolutions du code source du noyau Linux.

Installation

Git est disponible dans tous les dépôts de logiciels des distributions Linux. Pour une distribution basée sur Debian (Ubuntu, Mint...), il suffit de taper en ligne de commande :


sudo apt install git
			

Pour Mac, vous pouvez télécharger l'installeur à l'adresse : http://git-scm.com/download/mac

Pour Windows, vous pouvez télécharger l'installeur à l'adresse : http://git-scm.com/download/win

Configuration

Avant votre première utilisation, il est conseillé de configurer Git en indiquant l'identité que vous utiliserez. Pour cela vous devez définir votre nom et votre email avec les commandes :


git config --global user.name "VOTRE_NOM"
git config --global user.email "VOTRE_EMAIL"
			

Si vous avez un éditeur de texte préféré, vous pouvez également donner son chemin avec la commande


git config --global core.editor "CHEMIN DE L'EDITEUR"
			

Initialisation d'un dépôt

Si vous partez d'un répertoire dont vous désirez suivre les changements avec Git, vous initialisez votre dépôt local en vous positionnant dans le répertoire souhaité et tapant la commande :


git init
		

Cette commande crée un répertoire caché .git qui va contenir l'ensemble des informations permettant à Git de suivre les modifications.

Si vous disposez d'une URL d'un dépôt Git, vous pouvez le cloner pour commencer à modifier son contenu localement grâce à la commande :


git clone <URL> [<répertoire>]
		

Vous pouvez éventuellement désigner le répertoire à créer qui contiendra le résultat du clone sinon Git le déduit du contenu de l'URL.

Suivi des modifications du dépôt

À tout moment, vous pouvez utiliser la commande


git status
		

Cette commande vous permet de connaître l'état des fichiers qui ont évolué par rapport à votre dépôt local.

Pour Git, un fichier peut avoir quatre états :

Untracked (non suivi) :
Le fichier existe sur le disque mais ne fait pas partie du dépôt.
Unmodified (non modifié) :
Le fichier existe sur le disque et dans le dépôt et ce fichier n'a pas été modifié localement. La commande git status ignore les fichiers dans cet état.
Modified (modifié) :
Le fichier existe sur le disque et dans le dépôt et ce fichier a été modifié.
Staged :
Ce fichier est dans un état différent par rapport au dépôt. Il peut avoir été modifié, ajouté ou supprimé. Et l'utilisateur l'a ajouté à la staging area. Dans ce cas, les modifications seront incorporées au dépôt au prochain commit.

Les commandes ci-dessous permettent de gérer les états d'un fichier :


git add <fichier/répertoire>
		

Permet d'ajouter le fichier à la staging area. S'il s'agit d'un nouveau fichier ou s'il a été modifié, le fichier passe à l'état Staged sinon cette commande est sans effet.


git rm <fichier>
		

Permet d'ajouter le fichier à la staging area en demandant sa suppression. Le fichier passe à l'état Staged et est supprimé du répertoire de travail.


git reset -- <fichier/répertoire>
		

Permet de retirer de la staging area un fichier qui y a été ajouté.


git checkout <fichier/répertoire>
		

Permet d'annuler les modifications locales d'un fichier. Le fichier ne doit pas être dans la staging area (utilisez git reset pour l'en sortir). Le checkout annule les modifications et les suppressions.


git diff <fichier/répertoire>
		

Permet de visualiser les différences entre les modifications locales et le dépôt local.


git diff --staged <fichier/répertoire>
		

Permet de visualiser les différences entre les modifications dans la staging area et le dépôt local.

Validation des modifications

Une fois que vous êtes satisfaits des modifications que vous avez apportées à vos fichiers, il vous suffit de les ajouter à la staging area et d'utiliser la commande commit :


git commit -m "un message explicatif"
		

L'option -m permet de passer un message explicatif des modifications. Si vous n'ajoutez pas cette option, Git ouvrira un éditeur de texte pour vous permettre de saisir ce message. La commande commit permet d'ajouter les modifications de la staging area au dépôt local.

Pour suivre l'historique des opérations de commit, vous pouvez utiliser la commande :


git log
		

Utilisation d'un dépôt distant

Git vous permet de connecter votre dépôt local à un ou plusieurs dépôt distants (appelés remote repositories). Il devient possible de synchroniser votre dépôt local avec eux afin de partager vos modifications et d'intégrer les modifications effectuées par d'autres. Git est un système décentralisé dans la mesure ou il ne présuppose pas l'existence d'un dépôt de référence. Dans la pratique, il existe souvent un dépôt distant privilégié que l'on nomme par convention origin.

Si vous créez un dépôt local par clonage (git clone ...) alors cette opération a pour résultat de créer un dépôt local rattaché au dépôt d'origine justement nommé origin. Si vous avez initialisé un dépôt local (git init) alors vous pouvez le rattacher à un dépôt distant à tout moment.

Pour connaître la liste des dépôts distants associés à votre dépôt local, vous utilisez la commande :


git remote -v
		

Pour associer un dépôt distant à votre dépôt local, vous utilisez la commande :


git remote add <nom du dépôt> <URL du dépôt>
		

Vous êtes libres de choisir le nom que vous désirez mais par convention, on utilise origin pour désigner le dépôt distant qui est à l'origine du dépôt local.

Pour récupérer les modifications du dépôt distant, utilisez la commande :


git pull <nom du dépôt> master
		

Pour envoyer les évolutions de votre dépôt local dans le dépôt distant :


git push <nom du dépôt> master
		

Exclusion de fichiers

La plupart du temps, il n'est pas souhaitable d'ajouter des fichiers au dépôt Git. Il s'agit le plus souvent de fichiers résultants de la compilation ou de tout procédé de génération. Ils peuvent donc être facilement recréés. Un dépôt Git n'oublie rien ! Même si vous supprimez un fichier, ce dernier est toujours présent dans des versions antérieures et donc il est toujours conservé quelque part dans le dépôt. Il est donc fortement conseillé de n'ajouter à un dépôt que les fichiers nécessaires. Vous pouvez créer un fichier .gitignore dans votre répertoire de travail. Ce fichier permet de lister tous les fichiers/répertoires que Git doit totalement ignorer.

Exemple de contenu du fichier .gitignore pour un projet Java :

# fichiers temporaires pour Maven
target

# fichiers de configuration Eclipse
.classpath
.project
.settings

# fichiers de configuration Itellij IDEA
.idea
*.iml
			

GitHub

GitHub est un site permettant de créer et d'héberger des dépôts Git distants. Son utilisation est gratuite pour les dépôts libres de droit. Si ce n'est pas déjà fait, créez-vous un compte afin de pouvoir ultérieurement partager vos projets.

Références

Exercice : projet Git local

Objectif
Comprendre et maîtriser les commandes Git

Exercice : projet Git distant

Objectif
Comprendre et maîtriser les commandes Git

Créez un compte sur GitHub (si ce n'est pas déjà fait). Puis en reprenant votre projet de l'exercice précédent :

Exercice : partagez votre projet Git

Objectif
Travailler de manière collaborative avec Git

Autorisez un autre étudiant à effectuer des commandes push sur votre dépôt distant. Avec GitHub, cela se fait avec l'option Collaborators dans les Settings du dépôt.

Puis modifiez le contenu du projet en parallèle et envoyez chacun vos modifications dans le dépôt distant.