160
Git Pour les (pas si) nuls

Git pour les (pas si) nuls

Embed Size (px)

DESCRIPTION

Git introduction

Citation preview

Page 1: Git pour les (pas si) nuls

GitPour les (pas si) nuls

Page 2: Git pour les (pas si) nuls

Générique

MoiChez

LicenceTrouvez

pres

Sources

@malk_zameth@linagoraCC-BY-SA 3.0slideshare.net/malk_zameth/git-pour-les-pas-si-nuls● The Friendly Manual● Pro Git● kernel.

org/pub/software/scm/git/docs/gitworkflows.html

● rogerdudler.github.com/git-guide/

Page 3: Git pour les (pas si) nuls

Partie I: Intro

Page 4: Git pour les (pas si) nuls

Qu'est-ce?

Page 5: Git pour les (pas si) nuls

Contrôle de version (VCS)Mais c'est quoi "contrôle de version"?

Page 6: Git pour les (pas si) nuls

Gestion de l'information dans le temps

c-a-d.?

Page 7: Git pour les (pas si) nuls

Mémoire de ce qu'on a fait

Un grand archive de copies donc?

Page 8: Git pour les (pas si) nuls

Grand archive organisant automatiquement

Je lui delegue la memoire de ce que mes fichiers on été.

Page 9: Git pour les (pas si) nuls

DistribuéJe controle mes versions en local et à distance (nul

maître)

Page 10: Git pour les (pas si) nuls

Synchro fichierremplaçant RSync

Page 11: Git pour les (pas si) nuls

Transfert fichierremplaçant ftp

Page 12: Git pour les (pas si) nuls

Pourquoi utiliser un VCS?Je gagne quoi moi?

Page 13: Git pour les (pas si) nuls

Ne pas perdre le passéComme le "de-faire" et "re-faire" de mon editeur.

Mais pour toujours.

Page 14: Git pour les (pas si) nuls

Visualiser le changementVoire comment un fichier a changé, ce qu'a été fait.

Page 15: Git pour les (pas si) nuls

Arreter de faire la même chose a la main

le massacre des .oldles copies de dossier sous-le-coude

Page 16: Git pour les (pas si) nuls

Avoir plusieurs versions de vos idées qui co-

existentc'est le cas dans votre tête déjà, mettez sur fichier!

Page 17: Git pour les (pas si) nuls

Pourquoi utiliser un DVCS?Quel gain d'un Git/Hg/Bz sur un SVN ?

Page 18: Git pour les (pas si) nuls

“Aucun homme n'est une île, un tout, complet en

soi”Jhon Donne

Page 19: Git pour les (pas si) nuls

Faciliter la collaborationJe partage directement avec toi ce que nous avons en

commum.

Page 20: Git pour les (pas si) nuls

Plus de commits en pratique

Je peux commiter sans impacter personne, sans que ça se voit, je peux editer/delester/regrouper mes commits avant de publier : donc je le fait plus

souvent.

Page 21: Git pour les (pas si) nuls

Decouple VCS de l'accès à l'infra

Je commite dans l'avion, dans le train, pendant que mon serveur est hors service.

Page 22: Git pour les (pas si) nuls

Decouple VCS de l'Existance de l'infra

Je peux utiliser sans jamais avoir un serveur quelque part. Où avant qu'il soit prêt.

Page 23: Git pour les (pas si) nuls

Pourquoi utiliser Git?plutôt qu'un autre DVCS ?

Page 24: Git pour les (pas si) nuls

PuissancePlein (il faut admettre: trop), de fonctionalités.

Page 25: Git pour les (pas si) nuls

VitesseGit et Hg sont les deux allucinants et personne les bat.

Page 26: Git pour les (pas si) nuls

SimplicitéNe pas confondre avec "faible courbe d'aprentissage".

C'est l'invèrse du jeu d'échecs.

Page 27: Git pour les (pas si) nuls

SécuriséOn peut utiliser/obliger les clefs SSH pour ecrire sur un

depot et/ou lire.

Page 28: Git pour les (pas si) nuls

Devenu lingua francaEn 2009 persone m'aurait convaincu que j'écrirais ça un

jour

Page 29: Git pour les (pas si) nuls

GitHubCar le reseau social est une bonne idéee aussi pour le

travail.

Page 30: Git pour les (pas si) nuls

Où utiliser Git?

Page 31: Git pour les (pas si) nuls

Sur chaque fichier qui sera édité.

Toujours.Pas d'exceptions.

Page 32: Git pour les (pas si) nuls

Quand utiliser git?

Page 33: Git pour les (pas si) nuls

À chaque édition.Toujours.

Pas d'exceptions.

Page 34: Git pour les (pas si) nuls

Qui doit utiliser Git?

Page 35: Git pour les (pas si) nuls

Cette présentation vise deux publiques.

Page 36: Git pour les (pas si) nuls

Tout être humain voulant "chercher bonheur".Vous éditez des fichiers? Continuons donc!

Page 37: Git pour les (pas si) nuls

Tout être humain voulant "gêrer des projets"

Vous produisez des fichiers en équipe? Continuons donc!

Page 38: Git pour les (pas si) nuls

Comment utiliser Git?

Page 39: Git pour les (pas si) nuls

Partie II: Git tout seul dans sa machine sans

connectionOui ça vaut largement déjà le coup!

Page 40: Git pour les (pas si) nuls

Il faut un client gitTrois parfums

Page 41: Git pour les (pas si) nuls

Vous êtes dev?Vous avez donc déjà un Environnement de Dev?

Page 42: Git pour les (pas si) nuls

Intégrez Git a votre Environnement!

Eclipse: EgitEmacs: Magit

Vim: vim-fugitiveSublime Text 2: sublime-text-2-git

Page 43: Git pour les (pas si) nuls

Pas Dev; pas peur du terminal?

Page 44: Git pour les (pas si) nuls

La ligne de commande est votre amie.

git tout court donc, dans toute sa puissance.

Page 45: Git pour les (pas si) nuls

Et si j'ai peur du terminal?

Page 46: Git pour les (pas si) nuls

Dans cette présentation je vous prends par la main

et peut être après vous n'aurez plus peur.

Page 47: Git pour les (pas si) nuls

Et si après j'ai toujours peur du terminal?

Page 48: Git pour les (pas si) nuls

git-colaou bien gitg, giggle, gitk+git-gui etc.

Page 49: Git pour les (pas si) nuls

Pas à paspour apprendre git, il vaut mieux utiliser un peu

Page 50: Git pour les (pas si) nuls

Créez un repertoire de test

la où vous voulez, disons:mkdir -p ~/git-test; cd ~/git-test

Page 51: Git pour les (pas si) nuls

Créez un fichier de votre choix

votre oeuvre litteraire a vous, un programme, disons:echo "mon merveilleux fichier" > test.txt

Page 52: Git pour les (pas si) nuls

git initon dit a git "Interesse toi a ce répértoire et ces sous-

répértoires"

Page 53: Git pour les (pas si) nuls

Nous avons maintenant un .git

ls .git donne quoi?

Page 54: Git pour les (pas si) nuls

HEADLibellé comme un autre.

point "le plus a jour", le "present" le "dernier commit".

Page 55: Git pour les (pas si) nuls

git statusquel est ma situation actuelle?

Page 56: Git pour les (pas si) nuls

Mon fichier n'est pas encore pris en compte par

git!

Page 57: Git pour les (pas si) nuls

git commitJ'ai fait des modifications/ajouts et veux que ils soient

pris en compte.

Page 58: Git pour les (pas si) nuls

Erreur!git connais pas le fichier.

Page 59: Git pour les (pas si) nuls

Commit a deux étapes

Page 60: Git pour les (pas si) nuls

d'abord on un indexe des changements

on apelle ça "stage":J'ai fait des changements, garde les dans le

colimateur, il a d'autres fortement associés que je dois finir.

Page 61: Git pour les (pas si) nuls

git add <nom du fichier>disons git add test.txt.

notez que le message de git status change.

Page 62: Git pour les (pas si) nuls

puis:git commit

J'ai fini un sous ensemble de modifications qui sont liés, je veux donner a eux une description.

Page 63: Git pour les (pas si) nuls

On peut faire plusieurs stage sur le même fichier

Page 64: Git pour les (pas si) nuls

Et si le concept même de stage ne me sert a rien?

Page 65: Git pour les (pas si) nuls

git commit -ane m'embete pas avec le stage et commite mes

changements

Page 66: Git pour les (pas si) nuls

A vous de jugezil n'y a pas de "meilleure" manière, le stage est un outil

optionnel a utiliser ou a oublier.

Page 67: Git pour les (pas si) nuls

Que contient le passé de mon projet?

Page 68: Git pour les (pas si) nuls

git logles gros chiffres incomprehensibles? identifiants

uniques!

Page 69: Git pour les (pas si) nuls

Messages de commit: fil d'Arianne vers le passé

Page 70: Git pour les (pas si) nuls

Qu'ai je fait moi dans ce passé?

Page 71: Git pour les (pas si) nuls

git log --author

Page 72: Git pour les (pas si) nuls

Qu'a été fait depuis hier?

Page 73: Git pour les (pas si) nuls

git log --since "yesterday"

Page 74: Git pour les (pas si) nuls

memorisez le moins possible

Page 75: Git pour les (pas si) nuls

Notez les commandes qui vous sont utiles

qui vous utilisez vraiment

Page 76: Git pour les (pas si) nuls

donnez des noms a ces commandes

de noms à vous, personnels que votre cerveau souviendra

Page 77: Git pour les (pas si) nuls

git config alias.<nom> <commande>

git config alias.st statusgit config alias.lg "log --pretty=oneline --abbrev-

commit --graph --decorate"l'option --global les mets dans votre fichier de conf à

vous

Page 78: Git pour les (pas si) nuls

Voir le passé

Page 79: Git pour les (pas si) nuls

git show <version>:<nom du fichier>

git show HEAD~3:test.txt

Page 80: Git pour les (pas si) nuls

Voire les differences entre les fichiers actuels

et HEAD

Page 81: Git pour les (pas si) nuls

git diff

Page 82: Git pour les (pas si) nuls

Entre l'actuel est un point du passé

Page 83: Git pour les (pas si) nuls

git diff <version>git diff head~3

Page 84: Git pour les (pas si) nuls

Entre deux points du passé

Page 85: Git pour les (pas si) nuls

git diff <version>..<version>

git diff HEAD~3..HEAD~4

Page 86: Git pour les (pas si) nuls

Comment Ré-écrire l'histoire?

Page 87: Git pour les (pas si) nuls

Je veux oublier des changements

Page 88: Git pour les (pas si) nuls

git reset <version>Ne Jamais faire sur quelque chose qu'on publie. On ne

réecrit pas de l'histoire déjà racconté!

Page 89: Git pour les (pas si) nuls

Je veux regrouper des changements

Page 90: Git pour les (pas si) nuls

git rebase -i <version>Aussi a ne faire que si on a pas publié l'info.

Page 91: Git pour les (pas si) nuls

Je oublier des changements en indiquant

bien cela comme une action

Page 92: Git pour les (pas si) nuls

git revert <version a oublier>

Page 93: Git pour les (pas si) nuls

Petit commits frequents : plus de souplesse et

pouvoiron peut mieux choisir quoi reverter dans le futur

on peut toujours regrouper des petits commits dans un seul plus grand (squash)

Page 94: Git pour les (pas si) nuls

les numero de version unique sont indigestes

Je veux donner un nom a une version spécifique

Page 95: Git pour les (pas si) nuls

git tag <nom de la version>

git tag 1.0git tag publiee_dans_la_newsletter_octobre_2012

Page 96: Git pour les (pas si) nuls

Je veux travailler avec plusieurs visions du même

documentau même temps

Page 97: Git pour les (pas si) nuls

les branches

Page 98: Git pour les (pas si) nuls

git branch <branche>fait la creation de la branche, a partir de HEAD

Ne va PAS a la branche

Page 99: Git pour les (pas si) nuls

git checkout <branche>change de branche, va la branche choisie

Page 100: Git pour les (pas si) nuls

cela prête à confusionOn peut un jur creer une branche et oublier de

changer vers elle, faire des bêtises!

Page 101: Git pour les (pas si) nuls

git checkout -b <branche>fait la creation de la branche et immediatement

change de branche (faites en un alias, utilisez toujours comme ça)

Page 102: Git pour les (pas si) nuls

Consolider des branches en une seule

Page 103: Git pour les (pas si) nuls

git merge <branche a merger sur l'actuelle>

Page 104: Git pour les (pas si) nuls

pas envie de garder la branche?

Page 105: Git pour les (pas si) nuls

git branch -d <branche a effacer>

on a pas besoin de griller des neurones a inventer de tres bons nos pour des branches temporaires qu'on

effacera juste après

Page 106: Git pour les (pas si) nuls

On a toujours une branche

celle par defaut s'apelle master

Page 107: Git pour les (pas si) nuls

Utilisez de branches!

Page 108: Git pour les (pas si) nuls

Utilisez-les souvent!avant de demarrer chaque nouvelle direction dans les

fichier du projet; chaque nouvelle idée; chaque nouvelle demande.

Page 109: Git pour les (pas si) nuls

Pourquoi?

Page 110: Git pour les (pas si) nuls

Jongle entre une version connue et celle en cours

très vite

Page 111: Git pour les (pas si) nuls

idées et experimentationsdans un coin prévu.

Page 112: Git pour les (pas si) nuls

gestion de version sur les idées

que je peux, finalement, abandoner sans rien toucher de mon historique

Page 113: Git pour les (pas si) nuls

J'évite une infinité de problèmes.

99% des fois que j'aide quelqu'un avec un "problème" sur git: le problème n'aurait jamais existé si la

personne au depart de son changement avait crée une branche!

Page 114: Git pour les (pas si) nuls

Partie III : Git avec des remotes"serveurs distants"

Page 115: Git pour les (pas si) nuls

prendre une copie d'un depot distant

elle deviendra locale, une reference au depot distant sera faite sur le nom par defaut origin

Page 116: Git pour les (pas si) nuls

git clone <url du depot>git clone https://github.com/malk/git-playback.git

Page 117: Git pour les (pas si) nuls

ajouter un remotepour les même projet on peut avoir beaucoup

genre un du client, un pour chaque collaborateur, etc.

Page 118: Git pour les (pas si) nuls

git remote add <nom> <url>

git remote add mmozuras https://github.com/mmozuras/git-playback.git

Page 119: Git pour les (pas si) nuls

On a nos remotes

Page 120: Git pour les (pas si) nuls

prendre les changements distants

copies à coté, mes fichiers ne changent pas

Page 121: Git pour les (pas si) nuls

git fetch <remote> <branche>

git fetch mmozuras master

Page 122: Git pour les (pas si) nuls

Incorporer des changements distants

déjà récupérés par un fetch

Page 123: Git pour les (pas si) nuls

On sait déjà faire ça!c'est une branche comme une autre!

Page 124: Git pour les (pas si) nuls

On fait un merge!

Page 125: Git pour les (pas si) nuls

git merge origin/masterje merge la branche master dans origin ( origin/master ) dans ma branche actuelle (je choisit l'actuelle avec

un checkout)

Page 126: Git pour les (pas si) nuls

On ne merge que la version déjà "fetché"

si on oublie le fetch on merge une version peut etre déjà vieille

Page 127: Git pour les (pas si) nuls

Confusion possiblecomment éviter?

Page 128: Git pour les (pas si) nuls

git pull <remote> <branche>git pull origin master

fait un fetch puis un merge: plus d'oubli.

Page 129: Git pour les (pas si) nuls

Incorporer changements locaux dans branche

distanteSi nous avons les permissions!

Page 130: Git pour les (pas si) nuls

git push <remote> <branche>

git push --tags origin masterl'option tags fait un push des tags créees aussi

Page 131: Git pour les (pas si) nuls

Avant tout push

● Un petit git status○ Suis-je au bon endroit? sinon checkout.○ Il manque quelquechose a comitter? on ne push que

HEAD!● Je fait un pull de la branche distante● J'incorpore tout, événtuel, changement● resout tout, éventuel, conflit: les

commiter.● C'est bon je peux "pusher".Suivez cette checklist ça vous évitera des soucis!

Page 132: Git pour les (pas si) nuls

Partie IV : Gestion de projet

On doit produire de choses ensemble: évitons le chaos

Page 133: Git pour les (pas si) nuls

Workflow

Page 134: Git pour les (pas si) nuls

Processus de travailComment j'enchaine les diverses étapes de travail pour

produire.

Page 135: Git pour les (pas si) nuls

Plusieurs VCS contrainent ou forcent un workflow

Page 136: Git pour les (pas si) nuls

Git permet une infinitéun aperçu kernel.

org/pub/software/scm/git/docs/gitworkflows.html

Page 137: Git pour les (pas si) nuls

Dont plusieurs incompatibles!

Page 138: Git pour les (pas si) nuls

Si vous ne choisissez pas un workflow pour vous

Page 139: Git pour les (pas si) nuls

Vous avez un sans se rendre compte, naturellement

Ou peut être plusieurs!

Page 140: Git pour les (pas si) nuls

Si vous ne choisissez pas un pour votre équipe

Page 141: Git pour les (pas si) nuls

Vous avez surement déjà plusieurs!

J'espere qu'ils soient tous compatibles! La chance!

Page 142: Git pour les (pas si) nuls

Cela peut engendrer dès problèmes

Page 143: Git pour les (pas si) nuls

Trouvez donc un workflow!

Deux bonnes heures bien investies!Je peux vous aider au pire.

Page 144: Git pour les (pas si) nuls

Definissez les phases de vie de votre production

Création? Consolidation? mise en prod? hotfix? quoi d'autre?

Tout ça ça deviens de branches.

Page 145: Git pour les (pas si) nuls

Definissez les intercations entre ces phases

et transformez-les en alias/script git avec des noms qu'ont un sens pour votre équipe.

Page 146: Git pour les (pas si) nuls

Et vous aurez un workflowmon point de départ favori:

http://nvie.com/posts/a-successful-git-branching-model/

Page 147: Git pour les (pas si) nuls

Quel commit a inséré ce bug?

Page 148: Git pour les (pas si) nuls

git bisecton declare des versions comme ayant ou pas le bug (on teste a chaque fois) et par dichotomie ils nous aide a

retrouver la version qu'a inseré le bug

Page 149: Git pour les (pas si) nuls

Qui a inseré cette ligne dans le fichier?

Page 150: Git pour les (pas si) nuls

git blameDonne auteur par ligne (--L pour limiter les lignes)

Page 151: Git pour les (pas si) nuls

Où a-t-on écrit tel truc? Entre mes fichiers au sein d'un projet?

Page 152: Git pour les (pas si) nuls

git grepcomme grep, mais dans l'arbre de fichiers controlé par

git

Page 153: Git pour les (pas si) nuls

Voire l'effet des commits de quelqu'un comme un slideshow de son travail

Page 154: Git pour les (pas si) nuls

git playbackhttps://github.com/mmozuras/git-playbackgénère un fichier html avec un tel slideshow

Page 155: Git pour les (pas si) nuls

Aprendre git a resoudre un conflit d'une manière

comme on a déjà fait avant

l'apprendre a suivre nos habitudes et donc économiser du temps.

Page 156: Git pour les (pas si) nuls

git ReReRefaut d'abord activer

git config --global rerere.enabled 1après ça la commande marche

Page 157: Git pour les (pas si) nuls

ouvrir un serveur http tournant une page en

navigation de l'arborescence d'un depot

git

Page 158: Git pour les (pas si) nuls

git instaweb(j'avais dit: trop ;)

Page 159: Git pour les (pas si) nuls

Devenir un pro du git

Page 160: Git pour les (pas si) nuls