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?
- il permet de ne pas perdre votre travail: vous avez besoin d'un espace centralisé où le sauvegarder
- 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
- 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.
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
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
- Introduction à GIT en français par Pierre-Antoine Champin du Liris
- juste un petit guide pour bien démarrer avec git. no deep shit ;)
- Try Git - initiation en Anglais de Github
Nous vous proposons une "initiation maison" qui évloluera au grés de vos retours.
Le minimum
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
-
posez vos questions à Google avec les commandes en anglais: stackoverflow regorge de questions sur des cas d'utilisation de git, du plus simple au plus compliqué.
-
posez vos questions au CRI ISIMA/LIMOS, git est un outil que nous utilisons au quotidien, nous alimenterons régulièrement le blog du CRI ISIMA/LIMOS avec de nouveaux cas d'utilisation
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.
- GitKraken
- TortoiseGit
- N'hésitez pas à nous suggérer ceux que vous utilisez