Git
Git, c'est quoi ?
Le versioning
Pour faire très simple, le versioning de fichier permet de gérer les resources d'un projet, en gardant un historique des différentes versions, en permettant de partager naturellement du code entre plusieurs collaborateurs, de gérer plusieurs versions d'un projet en même temps, de structurer son développement.
Git vs. SVN
En un caractère : Git > SVN !
SVN a longtemps régné en maître comme système de versionning, mais souffrait de nombreux problèmes inhérents à son architecture, et brillament corrigés par Git. Par exemple, Git est plus rapide, plus optimisé dans sa gestion des branches, moins dépendant d'une connexion internet, etc.
Pour mieux comprendre la différence, regardez cette vidéo.
Git vs Mercurial
Mercurial est un autre système de versioning, lui aussi de grande qualité. Cependant il est moins répandu, et nous vous recommandons de commencer par Git.
Installer Git
Linux
Selon votre distribution:
# pacman -S git # apt-get install git # yum install git ...
MacOS X
Windows
Utiliser un client Git
Linux
Sur un système Unix, Git révèle toute sa puissance lorsqu'il est utilisé en ligne de commande. Toutefois, vous pouvez opter pour un client comme Smartgit pour vous mettre en confiance.
MacOS X
Tower semble populaire sous Mac, mais il est payant. Comme les utilisateurs Linux, les utilisateurs Mac peuvent facilement utiliser la ligne de commande
Windows
Smartgit est aussi disponible sur Windows.
TortoiseGit Permet d'intégrer Git dans le navigateur de fichier (accesible avec un clic droit)
Intégré à votre éditeur de texte
Il aussi est très possible que votre éditeur de texte propose une intégration de Git.
Utilisation basique de Git
Créer un nouveau projet
Tout d'abord, créez un répertoire vide, ou déplacez vous vers le répertoire existant à versionner. Ensuite, lancez:
git init
Récupérer un projet existant
git clone <url du projet>
Faire son premier commit
git add <mon fichier> git commit -m "<description du commit>"
Voir l'historique des commits
git log
Connaître sa situation depuis le dernier commit
git status
Astuce: Ne pas versionner les mauvais fichiers
Si vous ne souhaitez pas versionner certains fichiers (fichiers de log, binaires générés, informations relatives aux mot de passes...), créez un fichier .gitignore à la racine du projet versionné, et écrivez tous les fichiers que vous souhaitez ignorer. Par exemple, pour ignorer tous les fichiers .log, insérez dans .gitignore :
*.log
Se synchroniser avec un seveur distant
Git trouve réellement son intérêt lorsqu'il est synchronisé avec un serveur distant (remote). Ainsi, vous disposez d'un backup complet en cas de perte de vos données locales, et vous pouvez collaborer à plusieurs sur un même projet.
À noter: en terme d'architecture, Git est totalement décentralisé. Cependant, par soucis de simplicité, il est conseillé d'opter pour un serveur central auquel tous les collaborateurs se rattachent.
Les services disponibles au LIRMM
Il existe plusieurs solutions pour bénéficier d'un serveur Git au sein du LIRMM. Certains utilisent un serveur interne à leur équipe. Si ce n'est pas votre cas, voici quelques resources disponibles.
Pour les projets Open-Source: GitHub
Github est la plateforme qui offre le plus de visibilité actuellement pour un projet open-source, et propose une très bonne interface web pour gérer un projet avec Git.
Les doctorants peuvent profiter de pack étudiants pour avoir 5 projets gratuits, mais leur utilisation n'est pas recommandée par le CNRS.
Au sein du LIRMM
Gitlab est un clone Open-Source de Github. Le LIRMM a mit à disposition un serveur gitlab.
Département Robotique: Gitlab
Pour les membres du département robotiques, vous pouvez utiliser sans contraintes ce Gitlab. Il est aussi possible d'inviter des membres externes sur un projet.
GitLab de l'université de Montpellier
L'Université de Montpellier propose elle aussi son gitlab, avec cependant quelques contraintes dans le nombres de projets par personnes.
Définir un serveur distant
git remote add origin <url du server>
(astuce: si vous avez récupéré votre projet avec git clone, le serveur existe déjà sous le nom de origin.)
Envoyer sa version sur le serveur
git push origin <ma branche> (au plus simple, remplacez ma branche par "master")
Récupérer la version du serveur
git pull origin <ma branche> (au plus simple, remplacez ma branche par "master")
Introductions aux branches
Les branches permettent de quitter le modèle linéaire des commits, et d'avoir plusieurs versions d'un projet en parallèle (chaque branche pouvant évoluer de manière indépendante des autres). Les branches peuvent aussi être fusionnées (mergées), par exemple pour intégrer des changements sur la branche principale.
Contrairement à son ancêtre SVN, Git a une gestion très optimisée des branches, et encourage fortement à en utiliser.
Pour avoir un apercu d'un workflow avancé en utilisant des branches, vous pouvez consulter Git Flow.
Créer une branche
git checkout -b <ma nouvelle branche>
Se déplacer entre les branches
git checkout <ma branche>
Merger une branche vers une autre
git merge <la branche à merger> (depuis la branche qui va recevoir le merge)
Supprimer une branche
git branch -d <la branche à supprimer>
Pour aller plus loin: Resources
Le livre Pro Git est incroyablement complet. Nous vous recommandons au moins la lecture du chapitre 2, qui pose des bases très solides.
Ensuite, Atlassian propose aussi des tutoriels intéressants.
Enfin, de nombreuses questions sur Git peuvent être résolues grâce à StackOverflow ;).