Qu'est ce que git?

git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, auteur du noyau Linux, et distribué selon les termes de la licence publique générale GNU version 2. En 2016, il s’agit du logiciel de gestion de versions le plus populaire qui est utilisé par plus de douze millions de personnes.

Que fait git?

  1. il permet de ne pas perdre votre travail: vous avez besoin d'un espace centralisé où le sauvegarder
  2. il permet de garder un trace de l'historique de vos modifications: vous avez besoin d'une copie de référence et d'un moyen de gérer les modifications sur cette copie
  3. il permet de collaborer de manière efficace avec d'autres personnes sur votre travail: vous avez besoin d'une gestion partagée de l'historique des modifications

SVN fait ca très bien ...

C'est vrai! On a pour habitude de dire que git n'est pas pire ;) La différence majeure est la centralisation du dépôt (repository): avec SVN le serveur de version doit toujours être accessible pour par exemple pouvoir remonter dans l'historique des modifications. Git lui est décentralisé c'est à dire que vous travaillerez toujours sur une copie complète de votre dépôt qui vous permettra de travailler sans le serveur qui vous sert de référence. 

Vous pourrez mettre à jour le dépôt après coup.

GitHub / GitLab

Un argument pour utiliser git plutôt que SVN est l'adhésion qu'il a suscité au travers de projets devenus majeurs dans le paysage du logiciel libre et opensource. GitHub, une plateforme d'héberegement de dépôts git, a vu le jour en 2006 et a supplanté en quelques mois SourceForge.

Actuellement, la plupart des logiciels Open Source sont hébergés sur cette plateforme. Le modèle économique est simple: tout dépôt est publique dans la version gratuite et le support pour la gestion des équipes est minimal.

L'une des fonctionnalités majeures de GitHub est la "pull request" qui permet à quiconque ayant un compte utilisateur de soumettre une modification ou un correctif.

En 2011 GitLab s'est positionné comme une alternative Github en proposant des dépôts privés dans sa version gratuite et surtout en proposant GitLab CE qui permet l'hébergement d'une forge souveraine.

C'est ce produit GitLab CE qui est utilisé pour https://gitlab.isima.fr.

En savoir plus sur ce projet

Installer git

Configurer git

Avant d'utiliser git vous devez configurer à minima votre nom et votre mail

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

ces deux informations seront associées à chacune de vos contributions

- Documentation configuration

Se familiariser avec git

git est un outil puissant, dont on utilise souvent une infime partie.

La bonne nouvelle c'est qu'utiliser une partie, même infime, des fonctionnalités de git

  • vous rendra beaucoup de services
  • vous permettra de collaborer
  • vous fera mécaniquement progresser dans l'utilisation de git

GitLab détaille dans ce post pourquoi le jeu en vaut la chandelle: Why Git is Worth the Learning Curve

Au final le mieux est de parler de ses problèmes: avec l'équipe CRI ISIMA/LIMOS, avec ses collègues ...

Plus on utilise, plus on partage les expériences et les pratiques, plus on progresse: ce blog est aussi là pour ça.

A minima il faut être capable de gérer l'historique de vos modifications.

Il existe de nombreuse ressources traitant ce sujet de manière plus ou moins exhaustives

Nous vous proposons une "initiation maison" qui évloluera au grés de vos retours.

Le minimum

Git minimal workflow

Vous découvrirez ici les quelques commandes fondamentales qui vous permettront de gérer seul, un projet git.

C'est un passage obligé avant d'espérer faire des choses plus complexes.

Créer un dépôt git (init)

créer un répertoire et se positionner dedans en ligne de commande

mkdir myproject && myproject

initialiser le repo git

git init

qui affiche

Dépôt Git vide initialisé dans /data/htdocs/tsst/.git/

on peut initialiser un dépôt git alors qu'il contient déjà des fichiers: il n'y a pas de contrindication

Rapatrier un dépôt git existant en local (clone)

cloner le repo ( de ce blog par exemple)

git clone git@gitlab.isima.fr:cri/blog.git

qui affiche

Clonage dans 'blog'...
remote: Counting objects: 529, done.
remote: Compressing objects: 100% (310/310), done.
remote: Total 529 (delta 190), reused 488 (delta 167)
Réception d'objets: 100% (529/529), 3.24 MiB | 398.00 KiB/s, fait.
Résolution des deltas: 100% (190/190), fait.
Vérification de la connectivité... fait.

notez l'url en git@gitlab.isima.fr:cri/blog.git (ssh plutôt que https) elle permet d'utiliser les clés ssh que vous avez importées dans gitlab

Interroger l'état de votre dépôt (status)

git status

affiche

Sur la branche master

Validation initiale

rien à valider (créez/copiez des fichiers et utilisez "git add" pour les suivre)

ajoutez un fichier toto.txt à la racine de votre dépôt et retaper la commande

git status

qui affiche maintenant

Sur la branche master

Validation initiale

Fichiers non suivis:
  (utilisez "git add <fichier>..." pour inclure dans ce qui sera validé)

    toto.txt

aucune modification ajoutée à la validation mais des fichiers non suivis sont présents (utilisez "git add" pour les suivre)

git a détecté qu'il y avait du nouveau dans votre dépôt! il vous indique d'ailleurs comment inclure ce nouveau fichier dans ce qui sera votre prochaine modification (commit). Si un fichier existant avait été modifié il se serait passé exatcement la même chose

L'espace contenant les fichiers inclus dans la prochaine modification s'appelle l'index (ou encore staging area comme sur le schéma précédent).

Ajouter des fichiers dans l'index (add)

comme git nous l'a suggéré plus haut nous allons ajouter le fichier toto.txt à l'index

$ git add toto.txt

si on regarde maintenant l'état du dépôt

$ git status

affiche

Sur la branche master

Validation initiale

Modifications qui seront validées :
  (utilisez "git rm --cached <fichier>..." pour désindexer)

    nouveau fichier: toto.txt

git nous indique, à toutes fins utiles, comment enlever le fichier toto.txt de l'index

nous n'avons pas encore écrit dans l'historique local, il faut faire un commit pour cela

Valider le(s) fichier(s) de l'index (commit)

un commit est un ensemble cohérent de modifications, il ne s'agit

  • ni de commiter à chaque fois qu'un fichier est modifié
  • ni d'effectuer des modifications tous azimut en mettant finalement un message de commit du style "grosses modifications"
git commit -m "ajout du fichier toto"

Garder un historique lisible, c'est rendre votre projet intelligible à ceux qui y participeront.

Découper préalablement les actions que vous avez à réaliser en tâches à faire (todo) et vous ne vous poserez plus jamais de questions sur l'intitulé de vos commits ;)

Pousser vos commits sur le dépôt distant original (push)

Si vous avez cloné votre repo, sachez qu'il garde dans le fichier .git/config son url d'origine, référencée par défaut sous le nom d'origin.

Pour écrire les commits que vous avez effectués sur votre dépôt local vers le dépôt distant

git push origin master

Si le projet sur lequel vous travaillez est hébergé sur gitlab.isima.fr par exemple vous pouvez aller vous connecter sur la page du projet et vous verrez apparaître vos derniers commits dans l'historique du projet.

Aller plus loin

GUI

git est un outil pensé pour une utilisation en ligne de commande, il existe toutefois des outils graphiques qui permettent d'effectuer des opérations, même complexes de manière visuelle.