Formation GIT – Devenez le maître du temps !!! – Git push



Formation GIT – Devenez le maître du temps !!! – Git push

0 0


formationgit

Formation sur les bases de git

On Github fabien0102 / formationgit

Formation GIT

Devenez le maître du temps !!!

Formateur : Fabien BERNARD / @fabien0102

Problématiques de base

  • J'avais un super code, j'ai tout cassé, comment retrouver mon ancien code ?
  • J'ai besoin d'un coup de main ou je code à plusieurs
  • J'ai encore tout cassé (décidement), mais depuis quand ?

Ce que git va m'apporter

  • Avoir accès à l'historique de mes modifications
  • Me permettre d'expérimenter sans risquer de tout casser
  • De coder "simplement" à plusieurs
  • De synchroniser mon code sur un serveur
  • De travailler tranquilou dans mon coin

Un peu de théorie

Et oui, ça permet de savoir ce que l'on fait ;)

Git est un système décentralisé

Autrement dit, chaque personne qui clone un dépot git, n'est pas dépendant du serveur.

Il peut donc se synchroniser quand il veut, envoyer ses modifications à sa guise, etc…

Attention aux conflits

Certe on peut travailler hors-ligne, et c'est cool, mais une fois que nos commits sont envoyés au serveur :

On ne peut plus les modifier !!

Les commandes de base

Kit de survie dans Git ou comment naviguer dans l'histoire.

Git status

La commande qui me permet de savoir où j'en suis.

$ git status

Git status

# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   index.html
#
# Changes not staged for commit:
#   (use "git add ..." to update what will be committed)
#   (use "git checkout -- ..." to discard changes in working directory)
#
#       modified:   index.html
#
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#       lib/css/gitgraph.css
#       lib/js/gitgraph.min.js

Git commit

$ git add index.html
$ git commit

Git commit

i pour passer en mode edition

Mon super message
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       modified:   index.html
#
~

:x pour enregistrer

Bravo tu viens de faire ton premier commit

Ouais génial, mais comment je le vois ?

Git log

Avec cette commande je peux voir tous mes commits et ceux des autres

$ git log

Git log

commit efec542ed94bb10d02a1442f06893b41f881c7f9
Author: Nicolas Carlo 
Date:   Fri Dec 20 18:01:05 2013 +0100

    Misc. updates

commit ed3322b55b40526e56997f2288a48665e40437c4
Author: Nicolas Carlo 
Date:   Fri Dec 20 18:01:33 2013 +0100

    Quickly fix timers position into popover

commit 42669899ab4021f3ed64095576745cfe71fad405
Author: Nicolas Carlo 
Date:   Fri Dec 20 17:59:11 2013 +0100

    Refactor building styling

Git checkout

THE commande à connaître, c'est cette commande qui me permet de naviguer dans l'histoire

$ git checkout ed3322b55b4052

Git checkout

Note : checking out 'ed3322b55b4052'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b new_branch_name

HEAD is now at ed3322b... Quickly fix timers position into popover

Git checkout

À noter : On peut aussi checkout sur des tag et des branch

Git branch

Mais git va plus loin qu'un simple système de versionning plat.

Git introduit une notion de branch qui va nous permettre de faire cohabiter plusieurs réalités !

Git branch

Création d'une nouvelle branche :

$ git branch mybranch
$ git checkout mybranch

ou

$ git checkout -b mybranch

Je peux maintenant faire des commits qui seront sur cette branche

Git branch

Ici nous avons deux versions de code qui cohabitent.

Les deux bouts de code associés aux commits blanc ne peuvent (pour l'instant) pas être executé en même temps.

Git branch

$ git checkout master
$ git merge develop

Mes deux versions de code ont été merge.

J'ai maintenant mon code en entier sur master (en gris sur notre example).

Git branch

J'ai maintenant le choix de continuer de commit sur ma branche, la laisser de côté, ou la supprimer.

J'ai décidé de la supprimer :

$ git branch -d develop

Bravo tu connais maintenant les commandes de base

Voyons maintenant comment interagir avec un serveur.

Interaction client(s)/serveur(s)

Et si on travaillait ensemble ?

Git Clone

$ git clone https://github.com/fabien0102/formationgit.git

Et voilà le code est copié sur ma machine.

Git Clone

Je peux voir qu'une remote est automatiquement ajoutée.

$ git remote -v
origin  git@github.com:fabien0102/formationgit.git (fetch)
origin  git@github.com:fabien0102/formationgit.git (push)

Git Clone

Je peux aussi constater que j'ai les branches distantes sur mon pc.

$ git branch --all
* master
remotes/origin/master

Git stash

Parfois il arrive que j'ai des modifications en cours que ne veux pas commiter.

Heureusement je peux mettre ces modifications de côté et les récupérer quand je veux.

$ git stash

Et hop il n'y a plus rien !

$ git stash pop

Tadaaaaaaaa, tout est réapparru !

Git pull

$ git pull

Je suis sur master et je viens de récupérer les commits du serveur.

Git pull

La branche grise est la distante, en faisant un git pull, je merge la branche distante dans la local.

Le "problème" c'est que je viens de faire un commit de merge, celui-ci n'est pas obligatoire.

Git pull

$ git pull --rebase

Et voilà, mes modifications (non présente sur le serveur) sont repassés après les commits distants récupérés

Git push

$ git push

Et hop ! Tout le monde à mes modifications ! (Du coup je ne peux plus les modifier)

git push

Je peux aussi décider de créer une nouvelle branche distante

$ git push origin myBadassFeature

ou d'en supprimer

$ git push origin :myBadassFeature

Les outils graphiques

Ba oui, c'est quand même plus simple ^^

Les outils graphiques

  • Git gui
  • Source tree

Source Tree

Bonnes pratiques

Ou comment savoir travailler en équipe

Bonnes pratiques

  • Les commits doivent être atomiques (avec un message clair)
  • Une ou deux branches toujours stables (master et develop)
  • Une branche par feature

Le github flow

Le github flow

  • master toujours stable
  • Que des commits de merge sur master
  • Une feature / hotfix = une branche
  • Résolution de conflit dans les branches de feature

Au programme pour la prochaine scéance

  • Gestion de conflits
  • Modification de l'histoire (rebase)
  • Recherche de bugs automatisée (bisect)

Liens utiles

Git-scm

L'aide de github

THE END

BY Fabien BERNARD