git

(ça se prononce "guitte")

Logiciel de gestion de version

Réchèr

Dresseur de pythons / Grand marabout

2016-12-32

ConcreteWorld.🌏 - afterwork d'humagogie #2

Avertissement

Lors du visionnage public de cette présentation, les gens se sont endormis et/ou sont devenus fous.

Je décline toute responsabilité.

À quoi ça sert ?

  • Conserver un historique de ses fichiers (quel que soit leur type).

  • Savoir qui a modifié quoi et quand.

  • Savoir où est la dernière version d'un fichier

Étape 1

Utiliser git en étant seul

Installation

  • Fichier d'install : https://git-scm.com/

  • Fonctionne sous Windows, Mac, ...

  • Licence libre : GNU GPL (Comme Linux)

Git fonctionne en ligne de commande uniquement.

Des interfaces graphiques facilitent son utilisation.

  • SourceTree

  • TortoiseGit

  • etc.

 

.

 

 

 

 

Création d'un repository

Il s'agit d'un endroit sur le disque,
où on versionne une arborescence de fichiers et de répertoires.

Le repository contient au départ une seule branche, appelée master.

Versionner des fichiers

Pas besoin de se soucier de git durant son travail.

Une modification sur un fichier peut être dans 3 états :

  • Unstaged : non prise en compte

  • Staged : prête à être historisée

  • Committed : historisée

Organisation des commits

Dans le message de description, la première ligne résume très rapidement le commit, les lignes suivantes (facultatives) donnent des détails.

 

Pas la peine de lister les fichiers modifiés ou de décrire au caractère près les modifications effectuées. On peut retrouver ces informations automatiquement.

 

Un commit peut modifier plusieurs fichiers, mais il ne doit faire "qu'une seule chose".

Gestion des fichiers binaires

Même fonctionnement.

Mais l'affichage des différences est inexploitable.

Restauration à un état précédent

L'action checkout permet de se repositionner sur un ancien commit et de remettre les fichiers dans l'état où ils étaient.

  • Ça fait peur. On a l'impression de "perdre" son travail.

  • Éviter d'avoir les fichiers ouverts dans des applis qui verrouillent les fichiers. (Word, Excel, ...).

  • Éviter d'avoir des modifications en unstaged ou staged

  • Les dates du système de fichiers n'ont plus aucun sens.
Les fichiers et répertoires sont modifiés directement dans le repository.

Stockage de l'historique

Tout est dans le répertoire .git.

Seules les différences d'un commit à l'autre sont stockées. Ce qui permet d'économiser de la place.

mode "detached HEAD"

Il s'agit du mode après avoir effectué un checkout sur un ancien commit.

  • Il est conseillé de ne faire aucune modification dans les fichiers, ni aucun commit.

  • On peut créer des branches.

  • C'est un mode pour explorer l'historique.

Étape 2

Utiliser git avec d'autres personnes

Création du repository central

  • Sur un serveur ou un espace partagé.
  • Avec l'option bare.

Le repository sert uniquement au stockage.

 

On ne peut pas travailler directement dessus (pas de commits).

Clonage du repository

Le clonage crée un lien entre le repository original et sa copie.


On pourra ensuite les synchroniser entre eux, avec les actions push et pull.

Utilisation des branches

Lorsqu'on travaille à plusieurs sur un même repository, chacun doit créer ses branches.

On ne fait pas de commit dans la branche master.

Une branch = un pointeur sur un commit particulier, permettant de faire évoluer le contenu différement.

Lors d'un checkout sur une branche :

  • Le contenu du repository change, comme lors d'un checkout sur un commit.
  • Le pointeur de branche avance au fur et à mesure des commits

Synchronisation des branches

Push = envoyer les commits de ses branches au repository central.

Pull = récupérer les branches du repository central.

Le pull crée des nouvelles branches dans le repository local. Mais ce sont des branches "distantes".

  • Les checkouts sont possibles, mais pas les commits.
  • Une branche locale associée à la branche distante peut être créé.

Lors d'un pull, la branche locale courante avance jusqu'à sa branche distante.

Merge (fusion) de branches

Merge = rassembler deux branches pour cumuler leurs commits.

Ça peut se passer bien ou mal.

Si plusieurs personnes travaillent sur la même branche, le risque est présent à chaque pull.

Avec les branches, ce risque est transféré sur les merges.

Résolution de conflits

Conflit = modification d'un même fichier, au même endroit, dans deux branches différentes.

Pour résoudre un conflit, il faut décider du contenu final du fichier.

Le merge est effectué lorsque tous les conflits sont résolus.

Gestion des tags

Tag = une étiquette sur un commit.

Ils permettent de repérer les versions livrées, celles en cours de test, ...

Un commit doit être vu comme une action anodine. Son absence de bug n'a pas à être garantie.

 

Un tag est moins anodin. C'est une preuve de l'exécution de tests de validation.

Différents types de workflows

Centralisé

Workflow "Feature branch"

Workflow git

Étape 3

Utiliser git avec le monde entier

Repository publics

Le repository central est sur un site qui le rend disponible à tous :

GitHub, GitLab, FramaGit, ...

Méthode :

  • fork (comme un clone)
  • branch
  • développement d'une amélioration
  • pull request (demande au propriétaire du repository original d'intégrer les modifs)

Associer git à d'autres outils

  • Autres interfaces graphiques
  • Aide à la résolution de conflits
  • Bug-tracker
  • Gestion de tâches
  • Éditeur de texte
  • ...

Importance de la ligne de commande

Lors du choix d'un logiciel, il est important de s'assurer qu'il comporte des moyens d'échange simple et atomique avec l'extérieur :

ligne de commande, api web, fichiers d'import/export, ...

Vous ne vous servirez pas forcément de ces moyens d'échange.

Mais vous avez besoin qu'ils existent.

D'autres personnes vont utiliser ces moyens pour développer des outils qui pourrons vous être utiles.

Source des images

  • https://git-scm.com/downloads/logos
  • http://www.g33kwatch.com/geek-culture/conventions/pax-east-2012-picture-gallery-convention-thoughts-g33kwatch-podcast/
  • http://knowyourmeme.com/photos/965898-masturbating-spider-man
  • https://twitter.com/sourcetree
  • https://tortoisegit.org/
  • http://hamsterhideout.com/forum/topic/86298-warrior-cat-discussions/page-13#entry870755
  • https://fr.pinterest.com/pin/381469030909300536/
  • http://www.namespedia.com/image/Lieske_3.jpg
  • http://www.mes-coloriages-preferes.biz/Coloriage/Imprimer/Personnages-celebres/Troll-face/Oh-Crap/279531
  • http://s1.ibtimes.com/sites/www.ibtimes.com/files/styles/v2_article_large/public/2011/08/27/151360-horsemaning-dethrones-planking-completely-12-coolest-and-most-awkward-.jpg
  • http://worldobserveronline.com/2014/06/19/theres-bad-news-people-stare-computer-screens-day/
  • http://www.lavenir.net/cnt/dmf20150316_00617213?pid=2256898
  • http://www.visguy.com/2009/09/11/visio-server-shape-icon-customization-tool/
  • http://thefarmproduction.blogspot.fr/2009/01/pushpull-of-life.html
  • https://fr.pinterest.com/pin/457326537133917217/
  • https://fr.pinterest.com/pin/457326537133917190/
  • http://christmasstockimages.com/free/objects/slides/gift_tag_jpg_orig.htm
  • https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow
  • http://www.michellehenry.fr/prep.htm
  • http://cssnerd.com/2012/09/03/github-pure-css3-octocat/
  • https://developer.atlassian.com/blog/2015/12/tips-tools-to-solve-git-conflicts/
  • https://blog.axosoft.com/2015/10/13/gitkraken-git-gui-client-mac-windows-linux/
  • https://seeseekey.net/archive/tag/service
  • http://pervertprayer.blogspot.fr/2012/07/first-review-english-version-comming.html
  • http://www.gif-maniac.com/gifs/54/54151.gif
  • L'animation des marionnettes a été créé spécialement pour l'occasion
Made with Slides.com