• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introduction à git
 

Introduction à git

on

  • 1,657 views

Une introduction à git, présentée par Yann Sionneau aux membres de l'association MiNET et du club INTech. ...

Une introduction à git, présentée par Yann Sionneau aux membres de l'association MiNET et du club INTech.
La qualité du lecteur PDF sur slideshare laissant à désirer, je vous invite à télécharger le PDF plutôt que de le lire sur le site.

Statistics

Views

Total Views
1,657
Views on SlideShare
1,656
Embed Views
1

Actions

Likes
0
Downloads
12
Comments
0

1 Embed 1

http://duckduckgo.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution 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

    Introduction à git Introduction à git Presentation Transcript

    • Introduction à git Yann Sionneau int lab; 16 juin 2011 1/61
    • Commandes basiquesUsages un peu plus avancésUsages experts 2/61
    • PlanCommandes basiques Usages un peu plus avancés git init git clone git add git branch git commit git checkout le retour git add le retour git stash git log git merge git rm git push git checkout git pull En résumé En résumé Usages experts git add la résuréction git rebase git remote git bisect 3/61
    • git init On créé le dépot git 4/61
    • git init yann@obiwan : /git-tuto$ git init Initialized empty Git repository in /home/yann/git-tuto/.git/ 5/61
    • git add On rajoute des chiers dans une zone tampon (ou index) Le contenu de cette zone sera inclu dans le prochain commit Git traquera dorénavent les modications sur ces chiers 6/61
    • git add yann@obiwan : /git-tuto$ echo ceci est le README > README yann@obiwan : /git-tuto$ echo apprendre git > TODO 7/61
    • git add yann@obiwan : /git-tuto$ git status # On branch master # # Initial commit # # Untracked les : # (use git add <le>... to include in what will be committed) # # README # TODO # nothing added to commit but untracked les present (use git add to track) 8/61
    • git add yann@obiwan : /git-tuto$ git add TODO README 9/61
    • git add yann@obiwan : /git-tuto$ git status # On branch master # # Initial commit # # Changes to be committed : # (use git rm --cached <le>... to unstage) # # new le : README # new le : TODO # 10/61
    • git commit Sauvegarde le contenu de la zone tampon (ou index ou stagging area) Elle est insérée dans lhistorique de la branche Chaque commit a un identiant (hash SHA1) 11/61
    • git commit yann@obiwan : /git-tuto$ git commit -m commit initial [master (root-commit) 6d52464] commit initial 2 les changed, 2 insertions(+), 0 deletions(-) create mode 100644 README create mode 100644 TODO 12/61
    • git add le retour git add met les chiers dans le tampon (lindex) On choisi ainsi les chiers à inclure dans le prochain commit 13/61
    • git add le retour yann@obiwan : /git-tuto$ echo modif   TODO yann@obiwan : /git-tuto$ echo modif   README 14/61
    • git add le retour yann@obiwan : /git-tuto$ git status # On branch master # Changes not staged for commit : # (use git add <le>... to update what will be committed) # (use git checkout -- <le>... to discard changes in working directory) # # modied : README # modied : TODO # no changes added to commit (use git add and/or git commit -a) 15/61
    • git add le retour yann@obiwan : /git-tuto$ git add TODO yann@obiwan : /git-tuto$ git status # On branch master # Changes to be committed : # (use git reset HEAD <le>... to unstage) # # modied : TODO # # Changes not staged for commit : # (use git add <le>... to update what will be committed) # (use git checkout -- <le>... to discard changes in working directory) # # modied : README # 16/61
    • git add le retour yann@obiwan : /git-tuto$ git commit -m modication du TODO [master 4345e06] modication du TODO 1 les changed, 1 insertions(+), 0 deletions(-) 17/61
    • git add le retour yann@obiwan : /git-tuto$ git status # On branch master # Changes not staged for commit : # (use git add <le>... to update what will be committed) # (use git checkout -- <le>... to discard changes in working directory) # # modied : README # no changes added to commit (use git add and/or git commit -a) 18/61
    • git log Ache lhistorique des commits de la branche courante Il donne les hash, auteurs, descriptions, dates ... 19/61
    • git log yann@obiwan : /git-tuto$ git log commit 4345e065bac5941f54e521cec9338c136c3583b8 Author : Yann Sionneau <yann@minet.net> Date : Fri Jun 10 13 :58 :19 2011 +0200 modication du TODO commit 6d5246480668c1bb87e9bf764b7605e6e3b33060 Author : Yann Sionneau <yann@minet.net> Date : Fri Jun 10 12 :06 :50 2011 +0200 commit initial 20/61
    • git rm Supprime un chier du dossier courant Le chier nest plus suivi par git Le prochain commit contiendra linstruction de suppression 21/61
    • git checkout Permet de modier létat du répertoire de travail On peut demander quun ou plusieurs chiers reviennent à une version antérieure On peut se placer sur le dernier commit (HEAD) dune branche 22/61
    • git checkout yann@obiwan : /git-tuto$ cat TODO apprendre git modif yann@obiwan : /git-tuto$ git checkout 6d52464806 TODO yann@obiwan : /git-tuto$ cat TODO apprendre git 23/61
    • En résumé git add/commit workow 24/61
    • En résumé git checkout workow 25/61
    • git clone Créé un dépot local Récupère la branche master dun dépot distant Lenregistre en tant que branche master locale Récupère tout lhistorique des commits de cette branche Checkout la tête (HEAD) de la branche master Créé un (dépot) remote nommé origin avec ladresse du clone Congure la branche master locale pour suivre la branche master du remote origin 26/61
    • git branch Créé une branche qui dérive de la tête de la branche courante. Utile pour développer une nouvelle fonctionnalité Utile pour générer des patchs Utile pour récupérer les changements dune personne... avant de les merger (ou pas) dans sa branche personnelle 27/61
    • git branch yann@obiwan : /git-tuto$ git branch testing yann@obiwan : /git-tuto$ git branch * master testing yann@obiwan : /git-tuto$ git branch -D testing Deleted branch testing (was 4345e06). 28/61
    • git branch git branch liste les branches (une * est devant la branche actuelle) git branch -D supprime une branche git branch NOM créé la branche NOM a partir de la tête de la branche courante git checkout NOM permet de se placer sur la branche NOM Ne fonctionne que si le répertoire de travail est propre Il ne doit contenir aucun changement non commité Utiliser git stash si vous voulez mettre de côté temporairement vos modications 29/61
    • git checkout le retour git checkout permet aussi de changer de branche 30/61
    • git checkout le retour yann@obiwan : /git-tuto$ git branch testing yann@obiwan : /git-tuto$ git branch * master testing yann@obiwan : /git-tuto$ git checkout testing Switched to branch testing yann@obiwan : /git-tuto$ git branch master * testing 31/61
    • git stash Cest la solution au problème suivant : yann@obiwan : /git-tuto$ git checkout master error : Your local changes to the following les would be overwritten by checkout : test Please, commit your changes or stash them before you can switch branches. Aborting 32/61
    • git stash Il sauvegarde les changements du répertoire de travail Il sauvegarde aussi les choses qui sont dans lindex Tout ca est sauvegardé dans une pile git stash [save] git stash (apply | drop) git stash list git stash show git stash clear 33/61
    • git stash yann@obiwan : /git-tuto$ git stash Saved working directory and index state WIP on testing : d5e11f6 test HEAD is now at d5e11f6 test yann@obiwan : /git-tuto$ git checkout master Switched to branch master 34/61
    • git stash yann@obiwan : /git-tuto$ git checkout testing Switched to branch testing yann@obiwan : /git-tuto$ git stash apply # On branch testing # Changes not staged for commit : # (usegit add <le>... to update what will be committed) # (use git checkout -- <le>... to discard changes in working directory) # # modied : test # no changes added to commit (use git add and/or git commit -a) 35/61
    • git stash yann@obiwan : /git-tuto$ git stash list stash@{0} : WIP on testing : d5e11f6 test yann@obiwan : /git-tuto$ git stash drop Dropped refs/stash@{0} (3d469d192651230f39f88610838fbf5071a041) 36/61
    • git merge Fusionne une branche avec la branche courante ATTENTION : peut générer des conits 37/61
    • git merge yann@obiwan : /git-tuto$ git branch testing yann@obiwan : /git-tuto$ git checkout testing Switched to branch testing yann@obiwan : /git-tuto$ echo experimentation 1  README yann@obiwan : /git-tuto$ echo experimentation 2  TODO yann@obiwan : /git-tuto$ echo experimentation > nouveau_chier 38/61
    • git merge yann@obiwan : /git-tuto$ git add nouveau_chier yann@obiwan : /git-tuto$ git commit -a -m experimentation dans la branche de test [testing aae119d] experimentation dans la branche de test 3 les changed, 3 insertions(+), 0 deletions(-) create mode 100644 nouveau_chier yann@obiwan : /git-tuto$ git checkout master Switched to branch master yann@obiwan : /git-tuto$ cat nouveau_chier cat : nouveau_chier : No such le or directory 39/61
    • git merge yann@obiwan : /git-tuto$ git merge testing Updating 4345e06..aae119d Fast-forward README | 1 + TODO | 1 + nouveau_chier | 1 + 3 les changed, 3 insertions(+), 0 deletions(-) create mode 100644 nouveau_chier yann@obiwan : /git-tuto$ cat nouveau_chier experimentation 40/61
    • git push git push <dépot_distant> src[ :dst] Envoie des commits dans lhistorique dune branche dun dépot distant En bref : on envoie nos changements à quelquun dautre Le dépot distant doit être bare Dans le monde de kernel.org on pull plutôt que de push 41/61
    • git push yann@obiwan : $ git clone --bare /home/yann/git-tuto/ copie-centrale Cloning into bare repository copie-centrale... done. yann@obiwan : $ git clone copie-centrale/ copie Cloning into copie... done. yann@obiwan : $ cd copie 42/61
    • git push yann@obiwan : /copie$ git branch -a * master remotes/origin/HEAD -> origin/master remotes/origin/master remotes/origin/testing yann@obiwan : /copie$ git remote -v show origin /home/yann/copie-centrale/ (fetch) origin /home/yann/copie-centrale/ (push) 43/61
    • git push yann@obiwan : /copie$ echo lolilol  TODO yann@obiwan : /copie$ git commit -a -m ahah [master 5984a87] ahah 1 les changed, 1 insertions(+), 0 deletions(-) yann@obiwan : /copie$ git push Counting objects : 5, done. Delta compression using up to 16 threads. Compressing objects : 100% (2/2), done. Writing objects : 100% (3/3), 349 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects : 100% (3/3), done. To /home/yann/copie-centrale/ aae119d..5984a87 master -> master 44/61
    • git pull git pull <dépot_distant> <branche_distante> Equivalent á git fetch suivi de git merge Télécharge lhistorique dune branche distante Puis eectue le merge avec la branche courante Peut donc générer des conits 45/61
    • git pull yann@obiwan : /copie$ cd ../git-tuto/ yann@obiwan : /git-tuto$ git remote add origin ../copie-centrale yann@obiwan : /git-tuto$ git pull origin master remote : Counting objects : 5, done. remote : Compressing objects : 100% (2/2), done. remote : Total 3 (delta 0), reused 0 (delta 0) Unpacking objects : 100% (3/3), done. From ../copie-centrale * branch master -> FETCH_HEAD Updating aae119d..5984a87 Fast-forward TODO | 1 + 1 les changed, 1 insertions(+), 0 deletions(-) 46/61
    • En résumé git stash workow 47/61
    • git add la résuréction Git add peut avoir une granularité inférieure au chier On peut choisir de ne rajouter quun bout de modication/patch dans lindex Pour ca : git add -p <chier> ou git add patch <chier> 48/61
    • git add la résuréction yann@obiwan : /git-tuto$ git add -p lol.c di git a/lol.c b/lol.c index 5e5f109..c5d469b 100644 --- a/lol.c +++ b/lol.c @@ -1,3 +1,4 @@ +1 #include <stdio.h> #include <stdlib.h> #include <string.h> Stage this hunk [y,n,q,a,d,/,j,J,g,e, ?] ? y @@ -13,3 +14,4 @@ int main(void) { return 0 ; } +2 Stage this hunk [y,n,q,a,d,/,K,g,e, ?] ? n 49/61
    • git rebase Git rebase est magique Permet de modier lhistorique de la branche Permet de réordonner, découper, fusionner des commits Deux use cases pincipaux : Maintenir nos changement locaux au dessus` de la branche principale Fusionner des commits 50/61
    • git rebase Use case 1 : Maintenir nos changement locaux au dessus de la branche principale > > 51/61
    • git rebase git rebase <upstream> [branch] yann@obiwan : /git-tuto$ git rebase master newfeature First, rewinding head to replay your work on top of it... Applying : nouveaute Applying : encore du nouveau 52/61
    • git rebase Use case 2 : Fusionner des commits > 53/61
    • git rebase yann@obiwan : /git-tuto$ git rebase -i HEAD 2 [detached HEAD 8389617] nouveaute 1 les changed, 2 insertions(+), 0 deletions(-) create mode 100644 newfeature.c Successfully rebased and updated refs/heads/newfeature. 54/61
    • git remote Permet de gérer la liste des dépots distant connus de git Ces dépots distant ont un rapport avec notre dépot Il sagit par exemple du dépot dorigine (origin) dou on a clôné le notre Ou du dépot dun autre contributeur au projet Permet de donner un nom raccourci á lurl dun dépot distant Pour simplier les git pull et git push 55/61
    • git bisect Permet deectuer une recherche dichotomique dans une branche Permet de trouver LE commit qui introduit un bug/une regression Permet daller vite et dautomatiser le processus Explication par lexemple ... 56/61
    • git bisect yann@obiwan :/git-tuto$ git bisect start yann@obiwan :/git-tuto$ cat chier.c | grep LOL LOL yann@obiwan :/git-tuto$ git bisect bad yann@obiwan :/git-tuto$ git bisect good debut Bisecting : 5 revisions left to test after this (roughly 3 steps) [26d702f2f05f3321c9d707bd809ae406b82d0190] commit 7 yann@obiwan :/git-tuto$ cat chier.c | grep LOL LOL yann@obiwan :/git-tuto$ git bisect bad Bisecting : 2 revisions left to test after this (roughly 2 steps) [5338dca0d46062ea01225092210c729d2a7cb202] commit 4 57/61
    • git bisect yann@obiwan :/git-tuto$ cat chier.c | grep LOL yann@obiwan :/git-tuto$ git bisect good Bisecting : 0 revisions left to test after this (roughly 1 step) [8bd8458ac7509a0f424067fc4582fb1ba74d5328] commit 6 yann@obiwan :/git-tuto$ cat chier.c | grep LOL LOL yann@obiwan :/git-tuto$ git bisect bad Bisecting : 0 revisions left to test after this (roughly 0 steps) [1f3133cc11782d3d3546f2c2e16d60da359717] commit 5 yann@obiwan :/git-tuto$ cat chier.c | grep LOL LOL 58/61
    • git bisect yann@obiwan :/git-tuto$ git bisect bad 1f3133cc11782d3d3546f2c2e16d60da359717 is the rst bad commit commit 1f3133cc11782d3d3546f2c2e16d60da359717 Author : Yann Sionneau <yann@minet.net> Date : Mon Jun 13 17 :18 :38 2011 +0200 commit 5 :100644 100644 83fb967dd33eda43d453080986f695f2848f7a99 55dd01cd5cacb1eba809c00974c8fef8adb4c882 M chier.c 59/61
    • git bisect yann@obiwan :/git-tuto$ git show 1f3133 commit 1f3133cc11782d3d3546f2c2e16d60da359717 Author : Yann Sionneau <yann@minet.net> Date : Mon Jun 13 17 :18 :38 2011 +0200 commit 5 di --git a/chier.c b/chier.c index 83fb967..55dd01c 100644 --- a/chier.c +++ b/chier.c @@ -2,3 +2,4 @@ ligne ligne ligne ligne +LOL 60/61
    • git bisect yann@obiwan :/git-tuto$ git bisect reset Previous HEAD position was 1f3133c... commit 5 Switched to branch master 61/61