Git pour les (pas si) nuls
Upcoming SlideShare
Loading in...5
×
 

Git pour les (pas si) nuls

on

  • 2,391 views

Git introduction

Git introduction

Statistics

Views

Total Views
2,391
Views on SlideShare
2,390
Embed Views
1

Actions

Likes
0
Downloads
36
Comments
0

1 Embed 1

https://twitter.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Git pour les (pas si) nuls Git pour les (pas si) nuls Presentation Transcript

  • GitPour les (pas si) nuls
  • Générique Moi @malk_zameth Chez @linagora Licence CC-BY-SA 3.0 Trouvez slideshare.net/malk_zameth/git- pres pour-les-pas-si-nuls ● The Friendly Manual Sources ● Pro Git ● kernel. org/pub/software/scm/git/docs/ gitworkflows.html ● rogerdudler.github.com/git-
  • Partie I: Intro
  • Quest-ce?
  • Contrôle de version (VCS) Mais cest quoi "contrôle de version"?
  • Gestion de linformation dans le temps c-a-d.?
  • Mémoire de ce quon a fait Un grand archive de copies donc?
  • Grand archive organisant automatiquementJe lui delegue la memoire de ce que mes fichiers on été.
  • DistribuéJe controle mes versions en local et à distance (nul maître)
  • Synchro fichier remplaçant RSync
  • Transfert fichier remplaçant ftp
  • Pourquoi utiliser un VCS? Je gagne quoi moi?
  • Ne pas perdre le passéComme le "de-faire" et "re-faire" de mon editeur. Mais pour toujours.
  • Visualiser le changementVoire comment un fichier a changé, ce qua été fait.
  • Arreter de faire la même chose a la main le massacre des .old les copies de dossier sous-le-coude
  • Avoir plusieurs versions de vos idées qui co- existentcest le cas dans votre tête déjà, mettez sur fichier!
  • Pourquoi utiliser un DVCS? Quel gain dun Git/Hg/Bz sur un SVN ?
  • “Aucun homme nest uneîle, un tout, complet en soi” Jhon Donne
  • Faciliter la collaborationJe partage directement avec toi ce que nous avons en commum.
  • Plus de commits en pratiqueJe 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.
  • Decouple VCS de laccès à linfraJe commite dans lavion, dans le train, pendant que mon serveur est hors service.
  • Decouple VCS de lExistance de linfraJe peux utiliser sans jamais avoir un serveur quelque part. Où avant quil soit prêt.
  • Pourquoi utiliser Git? plutôt quun autre DVCS ?
  • PuissancePlein (il faut admettre: trop), de fonctionalités.
  • VitesseGit et Hg sont les deux allucinants et personne les bat.
  • SimplicitéNe pas confondre avec "faible courbe daprentissage". Cest linvèrse du jeu déchecs.
  • SécuriséOn peut utiliser/obliger les clefs SSH pour ecrire sur un depot et/ou lire.
  • Devenu lingua francaEn 2009 persone maurait convaincu que jécrirais ça un jour
  • GitHubCar le reseau social est une bonne idéee aussi pour le travail.
  • Où utiliser Git?
  • Sur chaque fichier qui sera édité. Toujours. Pas dexceptions.
  • Quand utiliser git?
  • À chaque édition. Toujours. Pas dexceptions.
  • Qui doit utiliser Git?
  • Cette présentation vise deux publiques.
  • Tout être humain voulant "chercher bonheur". Vous éditez des fichiers? Continuons donc!
  • Tout être humain voulant "gêrer des projets"Vous produisez des fichiers en équipe? Continuons donc!
  • Comment utiliser Git?
  • Partie II: Git tout seuldans sa machine sans connection Oui ça vaut largement déjà le coup!
  • Il faut un client git Trois parfums
  • Vous êtes dev?Vous avez donc déjà un Environnement de Dev?
  • Intégrez Git a votre Environnement! Eclipse: Egit Emacs: Magit Vim: vim-fugitive Sublime Text 2: sublime-text-2-git
  • Pas Dev; pas peur du terminal?
  • La ligne de commande est votre amie. git tout court donc, dans toute sa puissance.
  • Et si jai peur du terminal?
  • Dans cette présentation je vous prends par la main et peut être après vous naurez plus peur.
  • Et si après jai toujours peur du terminal?
  • git-colaou bien gitg, giggle, gitk+git-gui etc.
  • Pas à paspour apprendre git, il vaut mieux utiliser un peu
  • Créez un repertoire de test la où vous voulez, disons: mkdir -p ~/git-test; cd ~/git-test
  • Créez un fichier de votre choixvotre oeuvre litteraire a vous, un programme, disons: echo "mon merveilleux fichier" > test.txt
  • git initon dit a git "Interesse toi a ce répértoire et ces sous- répértoires"
  • Nous avons maintenant un .git ls .git donne quoi?
  • HEAD Libellé comme un autre.point "le plus a jour", le "present" le "dernier commit".
  • git statusquel est ma situation actuelle?
  • Mon fichier nest pasencore pris en compte par git!
  • git commitJai fait des modifications/ajouts et veux que ils soient pris en compte.
  • Erreur!git connais pas le fichier.
  • Commit a deux étapes
  • dabord on un indexe des changements on apelle ça "stage": Jai fait des changements, garde les dans lecolimateur, il a dautres fortement associés que je dois finir.
  • git add <nom du fichier> disons git add test.txt. notez que le message de git status change.
  • puis: git commitJai fini un sous ensemble de modifications qui sont liés, je veux donner a eux une description.
  • On peut faire plusieursstage sur le même fichier
  • Et si le concept même de stage ne me sert a rien?
  • git commit -ane membete pas avec le stage et commite mes changements
  • A vous de jugezil ny a pas de "meilleure" manière, le stage est un outil optionnel a utiliser ou a oublier.
  • Que contient le passé de mon projet?
  • git logles gros chiffres incomprehensibles? identifiants uniques!
  • Messages de commit: fildArianne vers le passé
  • Quai je fait moi dans ce passé?
  • git log --author
  • Qua été fait depuis hier?
  • git log --since "yesterday"
  • memorisez le moins possible
  • Notez les commandes qui vous sont utiles qui vous utilisez vraiment
  • donnez des noms a ces commandesde noms à vous, personnels que votre cerveau souviendra
  • git config alias.<nom> <commande> git config alias.st status git config alias.lg "log --pretty=oneline --abbrev- commit --graph --decorate"loption --global les mets dans votre fichier de conf à vous
  • Voir le passé
  • git show <version>:<nom du fichier> git show HEAD~3:test.txt
  • Voire les differencesentre les fichiers actuels et HEAD
  • git diff
  • Entre lactuel est un point du passé
  • git diff <version> git diff head~3
  • Entre deux points du passé
  • git diff <version>.. <version> git diff HEAD~3..HEAD~4
  • Comment Ré-écrire lhistoire?
  • Je veux oublier des changements
  • git reset <version>Ne Jamais faire sur quelque chose quon publie. On ne réecrit pas de lhistoire déjà racconté!
  • Je veux regrouper des changements
  • git rebase -i <version>Aussi a ne faire que si on a pas publié linfo.
  • Je oublier deschangements en indiquant bien cela comme une action
  • git revert <version a oublier>
  • Petit commits frequents : plus de souplesse et pouvoir on peut mieux choisir quoi reverter dans le futuron peut toujours regrouper des petits commits dans un seul plus grand (squash)
  • les numero de versionunique sont indigestesJe veux donner un nom a une version spécifique
  • git tag <nom de la version> git tag 1.0git tag publiee_dans_la_newsletter_octobre_2012
  • Je veux travailler avecplusieurs visions du même document au même temps
  • les branches
  • git branch <branche>fait la creation de la branche, a partir de HEAD Ne va PAS a la branche
  • git checkout <branche> change de branche, va la branche choisie
  • cela prête à confusionOn peut un jur creer une branche et oublier de changer vers elle, faire des bêtises!
  • git checkout -b <branche> fait la creation de la branche et immediatementchange de branche (faites en un alias, utilisez toujours comme ça)
  • Consolider des branches en une seule
  • git merge <branche amerger sur lactuelle>
  • pas envie de garder la branche?
  • git branch -d <branche a effacer>on a pas besoin de griller des neurones a inventer de tres bons nos pour des branches temporaires quon effacera juste après
  • On a toujours une branche celle par defaut sapelle master
  • Utilisez de branches!
  • Utilisez-les souvent!avant de demarrer chaque nouvelle direction dans les fichier du projet; chaque nouvelle idée; chaque nouvelle demande.
  • Pourquoi?
  • Jongle entre une versionconnue et celle en cours très vite
  • idées et experimentations dans un coin prévu.
  • gestion de version sur les idéesque je peux, finalement, abandoner sans rien toucher de mon historique
  • Jévite une infinité de problèmes. 99% des fois que jaide quelquun avec un "problème" sur git: le problème naurait jamais existé si lapersonne au depart de son changement avait crée une branche!
  • Partie III : Git avec des remotes "serveurs distants"
  • prendre une copie dun depot distantelle deviendra locale, une reference au depot distant sera faite sur le nom par defaut origin
  • git clone <url du depot>git clone https://github.com/malk/git-playback.git
  • ajouter un remote pour les même projet on peut avoir beaucoupgenre un du client, un pour chaque collaborateur, etc.
  • git remote add <nom> <url>git remote add mmozuras https://github. com/mmozuras/git-playback.git
  • On a nos remotes
  • prendre les changements distants copies à coté, mes fichiers ne changent pas
  • git fetch <remote> <branche> git fetch mmozuras master
  • Incorporer deschangements distants déjà récupérés par un fetch
  • On sait déjà faire ça! cest une branche comme une autre!
  • On fait un merge!
  • git merge origin/masterje merge la branche master dans origin ( origin/master ) dans ma branche actuelle (je choisit lactuelle avec un checkout)
  • On ne merge que la version déjà "fetché"si on oublie le fetch on merge une version peut etre déjà vieille
  • Confusion possible comment éviter?
  • git pull <remote> <branche> git pull origin masterfait un fetch puis un merge: plus doubli.
  • Incorporer changements locaux dans branche distante Si nous avons les permissions!
  • git push <remote> <branche> git push --tags origin masterloption tags fait un push des tags créees aussi
  • 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● Jincorpore tout, événtuel, changement● resout tout, éventuel, conflit: les commiter.● Cest bon je peux "pusher".Suivez cette checklistça vous évitera des soucis!
  • Partie IV : Gestion de projetOn doit produire de choses ensemble: évitons le chaos
  • Workflow
  • Processus de travailComment jenchaine les diverses étapes de travail pour produire.
  • Plusieurs VCS contrainent ou forcent un workflow
  • Git permet une infinité un aperçu kernel.org/pub/software/scm/git/docs/gitworkflows.html
  • Dont plusieursincompatibles!
  • Si vous ne choisissez pas un workflow pour vous
  • Vous avez un sans se rendre compte, naturellement Ou peut être plusieurs!
  • Si vous ne choisissez pas un pour votre équipe
  • Vous avez surement déjà plusieurs!Jespere quils soient tous compatibles! La chance!
  • Cela peut engendrer dès problèmes
  • Trouvez donc un workflow!Deux bonnes heures bien investies! Je peux vous aider au pire.
  • Definissez les phases devie de votre productionCréation? Consolidation? mise en prod? hotfix? quoi dautre? Tout ça ça deviens de branches.
  • Definissez les intercations entre ces phaseset transformez-les en alias/script git avec des noms quont un sens pour votre équipe.
  • Et vous aurez un workflow mon point de départ favori: http://nvie.com/posts/a-successful-git-branching- model/
  • Quel commit a inséré ce bug?
  • 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 qua inseré le bug
  • Qui a inseré cette ligne dans le fichier?
  • git blameDonne auteur par ligne (--L pour limiter les lignes)
  • Où a-t-on écrit tel truc? Entre mes fichiers au sein dun projet?
  • git grepcomme grep, mais dans larbre de fichiers controlé par git
  • Voire leffet des commitsde quelquun comme unslideshow de son travail
  • git playbackhttps://github.com/mmozuras/git-playbackgénère un fichier html avec un tel slideshow
  • Aprendre git a resoudre un conflit dune manière comme on a déjà fait avantlapprendre a suivre nos habitudes et donc économiser du temps.
  • git ReReRe faut dabord activergit config --global rerere.enabled 1 après ça la commande marche
  • ouvrir un serveur http tournant une page en navigation delarborescence dun depot git
  • git instaweb (javais dit: trop ;)
  • Devenir un pro du git