SlideShare uma empresa Scribd logo
1 de 70
Formation interne par Vlad RIABCHENKO
GIT
19
Dec 2017
1
Logiciels de gestion de versions
2
Un gestionnaire de version est un système qui enregistre l’évolution d’un fichier ou
d’un ensemble de fichiers au cours du temps de manière à ce qu’on puisse rappeler une
version antérieure d’un fichier à tout moment.
Il vous permet de :
ramener un fichier à un état précédent
ramener le projet complet à un état précédent
visualiser les changements au cours du temps
voir qui a modifié quelque chose qui pourrait causer un problème, qui a introduit un
problème et quand, et plus encore
facilement revenir à un état stable si vous vous trompez ou si vous perdez des fichiers
travailler en équipe sur un ou plusieurs fichiers en même temps en gérant les conflits
lorsqu'une même portion de contenu est modifié par plusieurs personnes
3
Technique consistant à recopier les fichiers dans un autre répertoire (par exemple
avec un nom incluant la date dans le meilleur des cas).
4
Serveur central qui
contient tous les
fichiers sous
gestion de version,
et des clients qui
peuvent extraire les
fichiers de ce dépôt
central.
Les systèmes de gestion de version centralisés.
5
Les clients dupliquent
entièrement le dépôt
Les systèmes de gestion de version distribués.
6
Propriétés de git
Des instantanés (snapshots), pas des différences
diffs
snapshots
8
Les trois espaces
Dépôt local – les données sont
stockées en sécurité dans votre
base de données locale
Espace de travail – Les fichiers
dans votre répertoire
Index – un espace spécial pour
préparer l’instantané suivant
(next commit)
9
Les quatre états
10
L’utilisation habituelle de Git se
déroule comme suit :
1. Modification des fichiers dans
votre répertoire de travail ;
2. Indexation (add) des fichiers
modifiés (ajout de leurs instantanés
dans la zone d’index) ;
3. Commit (commit), ce qui a pour
effet de basculer les instantanés des
fichiers de l’index dans la base de
données Git.
4. Versement (push) de votre
travail sur le(s) serveur(s) distant(s)
Les quatre états
11
parcourir l’historique d’un projet
rétablir n’importe quel état de fichier ou de projet en entier
valider (commit) votre travail.
créer une branche, fusionner des branches
Votre dépôt local vous permet de :
Presque toutes les opérations sont locales
12
Git gère l’intégrité
Tout est vérifié par une somme de contrôle :
avant d’être stocké / après avoir été récupéré en local
la somme sert de référence
Git utilise une empreinte SHA-1: une chaîne de caractères composée de 40 caractères
hexadécimaux. SHA-1 calculée en fonction du contenu du fichier ou de la structure du
répertoire considéré.
24b9da6552252987aa493b52f8696cd6d3b00373
13
Git gère l’intégrité
modifier le contenu d’un fichier ou d’un répertoire sans que Git ne s’en aperçoive
perdre des données en cours de transfert
24b9da6552252987aa493b52f8696cd6d3b00373
corrompre un fichier sans que Git ne puisse le détecter
Il est impossible de :
14
Commandes principales
Démarrer un dépôt Git
git init
• initialise le nouveau dépôt dans un répertoire existant
• crée un sous répertoire .git
• crée une nouvelle branche master
git clone [url] ([directory])
• copie un dépôt déjà hébergé sur le serveur
• reçoit une copie de quasiment toutes les données dont le serveur dispose
• installe une branche par défaut dans le répertoire de travail
• ajoute un dépôt distant par défaut sous le nom origin
16
Préparer un commit
git add Met à jour l'index en utilisant le contenu spécifié pour préparer le prochain commit.
Espace de travail Index
add
• pathspec: single_file | *.txt | directory
• -A, --all
17
Supprimer des fichiers
rm --cached
git rm
Espace de travail Index
• pathspec: single_file | *.txt | directory
• --cached
• -r
rm
18
Rétablir une version antérieure de fichiers
checkout [pathspec]
git checkout
Espace de travail Index
• pathspec: single_file | *.txt | directory
19
Commiter
git commit Stocke le contenu actuel de l'index dans un nouveau commit
avec un message de journal de l'utilisateur décrivant les modifications.
Espace de travail Index
add
Local repository
commit
• -a
• --amend
20
Voir l’état de fichers
git status
• -s
• peut se lancer dans un sous-répertoire
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: modified-in-index-and-wd.php
deleted: file-to-remove.txt
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: modified-in-working-directory.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
nf.txt
M A
D second.txt
M test.txt
?? nf.txt
21
Voir l’historique
git log
• -1, -2, … nombre de commits à afficher
• -p diff de chaque commit
• --stat aperçu rapide de commit
• --pretty
• --graph graphique ASCII de l'historique des branches et des fusions
22
Déplacer des fichiers
git mv <source> <destination>
git mv <source> ... <destination directory>
Cette commande permet de conserver l’historique des changements d’un fichier
quand vous le renommez ou déplacez.
23
Ignorer les fichiers
Pour que Git ne suit plus certain fichiers il les lister dans le fichier .gitignore. Chaque
ligne d'un fichier gitignore spécifie un patron:
# commentaire
!<patron> – nier le patron
nom – fichier ou répertoire dans n’importe quel sous répertoire
répertoire/ – répertoire dans n’importe quel sous répertoire
/nom – fichier ou répertoire dans la racine
/répertoire/ – répertoire dans la racine
a/**/b – correspond à « a/b » ou « a/x/b » ou « a/x/y/b »
24
Travaille pratique
1. Démarrer un dépôt local
2. Créer deux fichiers, ajouter le premier dans index
3. Valider
4. Modifiez le premier, abandonnez ces modifications. Modifiez-le encore une fois, ajoutez-le
dans l’index et abandonnez ces modifications
5. Modifier le premier et valider tous les fichiers dans un nouveau commit
6. Rétablir le premier fichier d’un premier commit
7. Changez le nom de deuxième fichier, validez. Assurez-vous que l’historique de
changements est sauvegardé
8. Ajoutez le deuxième fichier dans l’ignore, supprimez-le d’une validation suivante
25
Abandonner le travail
git reset –soft|--hard [<commit>]
git reset [<commit>] -- [<file>]
26
$ git add index.html
$ git reset
$ git reset --hard
$ git reset –hard HEAD^2
$ git commit
$ git reset --soft HEAD^
...
$ git commit
Branches
Branches. En bref
commit Git stocke un objet commit qui contient un pointeur vers l’instantané (snapshot)
du contenu que vous avez indexé
• nom et prénom de l’auteur
• le message
• des pointeurs vers le ou les commits parent
• pointeur vers l’empreinte de l'arborescence de projet (tree snapshot)
28
Branches. En bref
git add README test.rb LICENSE
git commit -m 'initial commit of my project'
29
Branches. En bref
git add
git commit -m ‘Fixed bug #1328 - ...’
git add
git commit -m ‘add feature #32 - ...'
30
Branches. En bref
Une branche dans Git est simplement un pointeur léger et déplaçable vers un de ces commits.
31
Branches. Création
git branch testing
git log --oneline --decorate
f30ab (HEAD, master, testing) commit message
34ac2 commit message
98ca9 commit message
32
Branches. Checkout
git checkout testing
git checkout –b testing
33
Branches. Checkout
<travail>
git commit -a -m 'made a change'
34
Branches. Checkout
git checkout master
35
Branches. Checkout
<travail>
git commit -a -m 'made other changes'
36
Branches. Visualisation
git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) made other changes
| * 87ab2 (test) made a change
|/
* f30ab add feature #32
* 34ac2 fixed bug #1328
* 98ca9 initial commit of my project
37
Branches. Fusions
git checkout master
Switched to branch 'master'
git merge hotfix
Updating f42c576..3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
38
Branches. Fusions
git branch -d hotfix
Deleted branch hotfix (3a0874c)
git checkout master
Switched to branch 'master'
git merge hotfix
Updating f42c576..3a0874c
Fast-forward
index.html | 2 ++
1 file changed, 2 insertions(+)
39
Branches. Fusions
git checkout master
Switched to branch 'master'
git merge iss53
Merge made by the 'recursive' strategy.
README | 1 +
1 file changed, 1 insertion(+)
40
Branches. Fusions
git branch -d iss53
Deleted branch iss53 (3a0874c)
41
Branches. Conflits de fusions
git merge prob53
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
git status
On branch master
You have unmerged paths.
(fix conflicts and run "git commit")
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: index.html
no changes added to commit (use "git add" and/or "git commit -a")
42
Branches. Conflits de fusions
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> prob53:index.html
<div id="footer">
please contact us at email.support@github.com
</div>
$ git add –A
$ git commit
Afin de terminer le merge il faudra créer un commit
43
Travaille pratique
1. Vous devez déjà avoir un dépôt avec deux fichiers dans la branche master
2. Créez et extrayez la branche secondaire (ticket123 par exemple)
3. Changez et ajoutez des fichiers, validez vos modifications
4. Fusionnez vos modifications à la branche master (fast-forward)
5. Supprimez cette branche secondaire
6. Répétez les p. 2 – 3
7. Extrayez la branche master
8. Modifier autrement le même endroit dans un même fichier que vous venez de modifier
dans une branche secondaire pour provoquer un conflit
9. Fusionnez les modifications à la branche master, résolvez le conflit, validez un nouveau
fusion
10. Utilisez souvent les commandes log et status
44
Stash (Remisage)
Stash
$ git stash save “my personal stash comment“
Saved working directory and index state On master: my personal stash comment
$ git stash list
stash@{0}: On master: my personal stash comment
$ git stash
Saved working directory and index state WIP on issue: 410b55d commit message
$ git stash list
stash@{0}: WIP on issue: 410b55d commit message
Il est possible de changer la branche seulement si vous n’avez aucun fichier modifié ou ajouté
et votre zone d’index ne contient aucun modification.
Pour changer un branche et sauvegarder le travail pour y revenir plus tard il est possible
d’utiliser le remisage.
stash [save [<message>]]
46
Stash
Pour vérifier le statut de la zone de remisage et le gérer utilisez ces commandes
stash list
stash show [<stash>]
stash drop [<stash>]
stash clear
47
Stash
Pour réintégrer le travail sauvegardé dans le remisage utilisez l’un de ces commandes :
stash apply [<stash>] – appliquer les modifications à votre espace de travail
stash pop [<stash>] – appliquer les modifications et supprimer le stash
stash branch <branchname> [<stash>] – créer une branche et et supprimer
le stash
48
Travaille pratique
1. Passez votre travaille dans la zone de remisage afin de pouvoir changer la branche
2. Essayez plusieurs commandes pour appliquer le travail de stash (apply, stash, branch)
49
Tags
Tags
git tag -l
v0.1
v1.0
v1.3
tous
git tag –l ‘v1’
V1.0
v1.3
filtrés
git tag 1.4.3 [<commit>]
Légère
git tag -a v1.4 -m ‘mep 1.4’ [<commit>]
Annoté
git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:19:12 2014 -0700
ma version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
git show v1.4.3
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
Lister
Créer
51
Remote
Eléments distants
branches
tags
• Les dépôts locaux sont accessibles par <remote>/<branch>
• Sont modifiables automatiquement lors de communication avec un dépôt distant
dépôts (origin)
53
Eléments distants
branche d'amont
upstream branch
/.git/refs/remotes/origin
branche de suivi
tracking branch
/.git/refs/heads
54
Eléments distants
clone Télécharge le dépôt dans le nouveau répertoire
• crée toutes les branches distantes
• crée les branches locales et en fait des branches de suivi
• --depth <n> limite l’historique téléchargée
master origin/master masterfetch
lot1 origin/lot1 lot1fetch
poste locale gitlab.webnet.fr
merge
merge
55
Eléments distants
56
Eléments distants
fetch Télécharge les objets et les références (branches et tags)
git merge origin/master
57
Eléments distants
pull (git fetch & git merge FETCH_HEAD) tirer des objets distants
X---Y---Z master sur gitlab.webnet.fr
/
A---B---C---D master dans votre espace de travail
^
origin/master dans votre dépôt local
X---Y---Z master sur gitlab.webnet.fr
/
A---B---C---D---E master dans votre espace de travail
 /
X---Y---Z
^
origin/master dans votre dépôt local
git pull
58
Eléments distants
pull (git fetch & git merge FETCH_HEAD)
X---Y---Z master sur gitlab.webnet.fr
/
A---B master dans votre espace de travail
^
origin/master dans votre dépôt local
X---Y---Z master sur gitlab.webnet.fr
/
A---B---X---Y---Z master dans votre espace de travail
^
origin/master dans votre dépôt local
git pull (fast forward)
59
Eléments distants
push [ <repository> [ <branch> ] ]
X---Y---Z master sur gitlab.webnet.fr
/
A---B---C---D---E master dans votre espace de travail
 /
X---Y---Z
^
origin/master dans votre dépôt local
X---Y---Z---E master sur gitlab.webnet.fr
/  /
A---B---C---D---E master dans votre espace de travail
^
origin/master dans votre dépôt local
git push
60
Eléments distants
remote – gérer des dépôts suivis
$ git remote -v
origin git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git (fetch)
origin git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git (push)
remote add <name> <url>
$ git remote add origin git@github.com:vria/git-workshop.git
remote rename <old> <new>
git remote remove <name>
61
Branches distants
$ git remote show origin
* remote origin
Fetch URL: git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git
Push URL: git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git
HEAD branch: master
Remote branches:
lot1 tracked
lot2 tracked
master tracked
refs/remotes/origin/test-jenkins stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
lot1 merges with remote lot1
lot2 merges with remote lot2
master merges with remote master
Local refs configured for 'git push':
lot1 pushes to lot1 (local out of date)
lot2 pushes to lot2 (local out of date)
master pushes to master (local out of date)
git remote show <name>
62
Eléments distants - Exemple
Un nouveau dépôt sur le serveur github.com (avec README.md) avec la branche master
Il existe un dépôt local contenant l’application Symfony avec la branche master
Le but est de relier ces deux projets: pouvoir retirer / pousser, configurer la branche de suivi
$ git remote add origin git@github.com:vria/git-workshop.git
$ git fetch origin
warning: no common commits
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:vria/git-workshop
* [new branch] master -> origin/master
master origin/master masterfetch
Poste local gitlab.webnet.fr
$ git merge master origin/master
fatal: refusing to merge unrelated histories
Eléments distants - Exemple
$ git merge master origin/master --allow-unrelated-histories
Merge made by the 'recursive' strategy.
README.md | 1 +
1 file changed, 1 insertion(+)
create mode 100644 README.md
Puisque votre branche locale master n’a pas d’historique commun avec origin/master il faut
demander explicitement à fusionner deux branches sans aucune relation.
Les nouveaux commits de origin/master peuvent être mergés sans souci à master.
64
Eléments distants - Exemple
master origin/master masterfetch
Poste local gitlab.webnet.fr
$ git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details
git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=origin/<branch> master
$ git push
fatal: La branche courante master n'a pas de branche amont.
Pour pousser la branche courante et définir la distante comme amont, utilisez
git push --set-upstream origin master
65
Gestion de branches
66
Collaboration sur github.com
pull requests
67
Travaille pratique. Dépôt commun
1. Clonez le dépôt
2. Créez et/ou modifiez le fichier, validez
3. Poussez vos modifications sur le serveur (possiblement, après avoir récupérer le travail
d’un autre collaborateur)
4. Créez votre branche (son nom sera votre prénom), modifiez-y les fichiers, poussez-la sur
le serveur
5. Récupérez la branche de votre collègue, fusionnez-la avec master
6. Supprimez la branche de votre collègue et poussez master sur le serveur
68
Travaille pratique. Dépôt tiers
1. Faites un « fork » d’un projet public
2. Clonez votre nouveau dépôt
3. Modifiez et/ou créez des fichiers
4. Validez et poussez
5. Créez un « pull request » (« merge request »)
6. …
7. PROFIT
69
Git GUI: SourceTree
70

Mais conteúdo relacionado

Mais procurados

Git Introduction
Git IntroductionGit Introduction
Git Introduction
Gareth Hall
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
Alice Loeser
 

Mais procurados (20)

Formation autour de git et git lab
Formation autour de git et git labFormation autour de git et git lab
Formation autour de git et git lab
 
Présentation Git & GitHub
Présentation Git & GitHubPrésentation Git & GitHub
Présentation Git & GitHub
 
Git & Github for beginners
Git & Github for beginnersGit & Github for beginners
Git & Github for beginners
 
Git and github 101
Git and github 101Git and github 101
Git and github 101
 
git and github
git and githubgit and github
git and github
 
Git Introduction
Git IntroductionGit Introduction
Git Introduction
 
Versioning avec Git
Versioning avec GitVersioning avec Git
Versioning avec Git
 
Learning git
Learning gitLearning git
Learning git
 
Workshop git para iniciantes
Workshop git para iniciantesWorkshop git para iniciantes
Workshop git para iniciantes
 
Git and git flow
Git and git flowGit and git flow
Git and git flow
 
Starting with Git & GitHub
Starting with Git & GitHubStarting with Git & GitHub
Starting with Git & GitHub
 
Version control system
Version control systemVersion control system
Version control system
 
Git
GitGit
Git
 
The everyday developer's guide to version control with Git
The everyday developer's guide to version control with GitThe everyday developer's guide to version control with Git
The everyday developer's guide to version control with Git
 
Introduction to Git and Github
Introduction to Git and GithubIntroduction to Git and Github
Introduction to Git and Github
 
Git 입문자를 위한 가이드
Git 입문자를 위한 가이드Git 입문자를 위한 가이드
Git 입문자를 위한 가이드
 
Git et les systèmes de gestion de versions
Git et les systèmes de gestion de versionsGit et les systèmes de gestion de versions
Git et les systèmes de gestion de versions
 
Git101
Git101Git101
Git101
 
Git pour les (pas si) nuls
Git pour les (pas si) nulsGit pour les (pas si) nuls
Git pour les (pas si) nuls
 
Git Terminologies
Git TerminologiesGit Terminologies
Git Terminologies
 

Semelhante a Git

les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
SimpleLearn1
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
akramalidrissi1
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
Pape Diop
 

Semelhante a Git (20)

3_SCM_Git.pdf
3_SCM_Git.pdf3_SCM_Git.pdf
3_SCM_Git.pdf
 
Travailler avec git et eclipse
Travailler avec git et eclipseTravailler avec git et eclipse
Travailler avec git et eclipse
 
Initiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdfInitiation à Git, GitHub2.pdf
Initiation à Git, GitHub2.pdf
 
Git and Github.pptx
Git and Github.pptxGit and Github.pptx
Git and Github.pptx
 
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentraliséDécouvrir et utiliser Git : le logiciel de gestion de versions décentralisé
Découvrir et utiliser Git : le logiciel de gestion de versions décentralisé
 
Introduction à git.pdf
Introduction à git.pdfIntroduction à git.pdf
Introduction à git.pdf
 
JCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratiqueJCertif 2012 : Git par la pratique
JCertif 2012 : Git par la pratique
 
Get startedwithgit2
Get startedwithgit2Get startedwithgit2
Get startedwithgit2
 
GIT Fundamentals
GIT FundamentalsGIT Fundamentals
GIT Fundamentals
 
Débuter avec Git & github
Débuter avec Git & githubDébuter avec Git & github
Débuter avec Git & github
 
Le système de versioning git
Le système de versioning gitLe système de versioning git
Le système de versioning git
 
les commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdfles commandes Git que vous devez absolument connaitre!.pdf
les commandes Git que vous devez absolument connaitre!.pdf
 
git.pdf
git.pdfgit.pdf
git.pdf
 
Outils de gestion de projets
Outils de gestion de projetsOutils de gestion de projets
Outils de gestion de projets
 
Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...Développement informatique : Gestion de projet, versioning, debugging, testin...
Développement informatique : Gestion de projet, versioning, debugging, testin...
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
Git pratique
Git pratiqueGit pratique
Git pratique
 
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
GIT & Future Branching-0d86ea39-71ad-4a19-940c-c10be7c33b08-9feea918-d69a-47e...
 
Cours sur github part3 git
Cours sur github part3 gitCours sur github part3 git
Cours sur github part3 git
 
git-cmds-base.pdf
git-cmds-base.pdfgit-cmds-base.pdf
git-cmds-base.pdf
 

Mais de Vladyslav Riabchenko

Mais de Vladyslav Riabchenko (8)

Modèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueModèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratique
 
SOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applicationsSOLID : les principes à l’origine du succès de Symfony et de vos applications
SOLID : les principes à l’origine du succès de Symfony et de vos applications
 
SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...SOLID: the core principles of success of the Symfony web framework and of you...
SOLID: the core principles of success of the Symfony web framework and of you...
 
Sécurisation de vos applications web à l’aide du composant Security de Symfony
Sécurisation de vos applications web  à l’aide du composant Security de SymfonySécurisation de vos applications web  à l’aide du composant Security de Symfony
Sécurisation de vos applications web à l’aide du composant Security de Symfony
 
Sécurisation de vos applications web à l’aide du composant Security de Symfony
Sécurisation de vos applications web à l’aide du composant Security de SymfonySécurisation de vos applications web à l’aide du composant Security de Symfony
Sécurisation de vos applications web à l’aide du composant Security de Symfony
 
Versionning sémantique et Composer
Versionning sémantique et ComposerVersionning sémantique et Composer
Versionning sémantique et Composer
 
Injection de dépendances dans Symfony >= 3.3
Injection de dépendances dans Symfony >= 3.3Injection de dépendances dans Symfony >= 3.3
Injection de dépendances dans Symfony >= 3.3
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant Form
 

Git

  • 1. Formation interne par Vlad RIABCHENKO GIT 19 Dec 2017 1
  • 2. Logiciels de gestion de versions 2
  • 3. Un gestionnaire de version est un système qui enregistre l’évolution d’un fichier ou d’un ensemble de fichiers au cours du temps de manière à ce qu’on puisse rappeler une version antérieure d’un fichier à tout moment. Il vous permet de : ramener un fichier à un état précédent ramener le projet complet à un état précédent visualiser les changements au cours du temps voir qui a modifié quelque chose qui pourrait causer un problème, qui a introduit un problème et quand, et plus encore facilement revenir à un état stable si vous vous trompez ou si vous perdez des fichiers travailler en équipe sur un ou plusieurs fichiers en même temps en gérant les conflits lorsqu'une même portion de contenu est modifié par plusieurs personnes 3
  • 4. Technique consistant à recopier les fichiers dans un autre répertoire (par exemple avec un nom incluant la date dans le meilleur des cas). 4
  • 5. Serveur central qui contient tous les fichiers sous gestion de version, et des clients qui peuvent extraire les fichiers de ce dépôt central. Les systèmes de gestion de version centralisés. 5
  • 6. Les clients dupliquent entièrement le dépôt Les systèmes de gestion de version distribués. 6
  • 8. Des instantanés (snapshots), pas des différences diffs snapshots 8
  • 9. Les trois espaces Dépôt local – les données sont stockées en sécurité dans votre base de données locale Espace de travail – Les fichiers dans votre répertoire Index – un espace spécial pour préparer l’instantané suivant (next commit) 9
  • 11. L’utilisation habituelle de Git se déroule comme suit : 1. Modification des fichiers dans votre répertoire de travail ; 2. Indexation (add) des fichiers modifiés (ajout de leurs instantanés dans la zone d’index) ; 3. Commit (commit), ce qui a pour effet de basculer les instantanés des fichiers de l’index dans la base de données Git. 4. Versement (push) de votre travail sur le(s) serveur(s) distant(s) Les quatre états 11
  • 12. parcourir l’historique d’un projet rétablir n’importe quel état de fichier ou de projet en entier valider (commit) votre travail. créer une branche, fusionner des branches Votre dépôt local vous permet de : Presque toutes les opérations sont locales 12
  • 13. Git gère l’intégrité Tout est vérifié par une somme de contrôle : avant d’être stocké / après avoir été récupéré en local la somme sert de référence Git utilise une empreinte SHA-1: une chaîne de caractères composée de 40 caractères hexadécimaux. SHA-1 calculée en fonction du contenu du fichier ou de la structure du répertoire considéré. 24b9da6552252987aa493b52f8696cd6d3b00373 13
  • 14. Git gère l’intégrité modifier le contenu d’un fichier ou d’un répertoire sans que Git ne s’en aperçoive perdre des données en cours de transfert 24b9da6552252987aa493b52f8696cd6d3b00373 corrompre un fichier sans que Git ne puisse le détecter Il est impossible de : 14
  • 16. Démarrer un dépôt Git git init • initialise le nouveau dépôt dans un répertoire existant • crée un sous répertoire .git • crée une nouvelle branche master git clone [url] ([directory]) • copie un dépôt déjà hébergé sur le serveur • reçoit une copie de quasiment toutes les données dont le serveur dispose • installe une branche par défaut dans le répertoire de travail • ajoute un dépôt distant par défaut sous le nom origin 16
  • 17. Préparer un commit git add Met à jour l'index en utilisant le contenu spécifié pour préparer le prochain commit. Espace de travail Index add • pathspec: single_file | *.txt | directory • -A, --all 17
  • 18. Supprimer des fichiers rm --cached git rm Espace de travail Index • pathspec: single_file | *.txt | directory • --cached • -r rm 18
  • 19. Rétablir une version antérieure de fichiers checkout [pathspec] git checkout Espace de travail Index • pathspec: single_file | *.txt | directory 19
  • 20. Commiter git commit Stocke le contenu actuel de l'index dans un nouveau commit avec un message de journal de l'utilisateur décrivant les modifications. Espace de travail Index add Local repository commit • -a • --amend 20
  • 21. Voir l’état de fichers git status • -s • peut se lancer dans un sous-répertoire On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: modified-in-index-and-wd.php deleted: file-to-remove.txt Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: modified-in-working-directory.txt Untracked files: (use "git add <file>..." to include in what will be committed) nf.txt M A D second.txt M test.txt ?? nf.txt 21
  • 22. Voir l’historique git log • -1, -2, … nombre de commits à afficher • -p diff de chaque commit • --stat aperçu rapide de commit • --pretty • --graph graphique ASCII de l'historique des branches et des fusions 22
  • 23. Déplacer des fichiers git mv <source> <destination> git mv <source> ... <destination directory> Cette commande permet de conserver l’historique des changements d’un fichier quand vous le renommez ou déplacez. 23
  • 24. Ignorer les fichiers Pour que Git ne suit plus certain fichiers il les lister dans le fichier .gitignore. Chaque ligne d'un fichier gitignore spécifie un patron: # commentaire !<patron> – nier le patron nom – fichier ou répertoire dans n’importe quel sous répertoire répertoire/ – répertoire dans n’importe quel sous répertoire /nom – fichier ou répertoire dans la racine /répertoire/ – répertoire dans la racine a/**/b – correspond à « a/b » ou « a/x/b » ou « a/x/y/b » 24
  • 25. Travaille pratique 1. Démarrer un dépôt local 2. Créer deux fichiers, ajouter le premier dans index 3. Valider 4. Modifiez le premier, abandonnez ces modifications. Modifiez-le encore une fois, ajoutez-le dans l’index et abandonnez ces modifications 5. Modifier le premier et valider tous les fichiers dans un nouveau commit 6. Rétablir le premier fichier d’un premier commit 7. Changez le nom de deuxième fichier, validez. Assurez-vous que l’historique de changements est sauvegardé 8. Ajoutez le deuxième fichier dans l’ignore, supprimez-le d’une validation suivante 25
  • 26. Abandonner le travail git reset –soft|--hard [<commit>] git reset [<commit>] -- [<file>] 26 $ git add index.html $ git reset $ git reset --hard $ git reset –hard HEAD^2 $ git commit $ git reset --soft HEAD^ ... $ git commit
  • 28. Branches. En bref commit Git stocke un objet commit qui contient un pointeur vers l’instantané (snapshot) du contenu que vous avez indexé • nom et prénom de l’auteur • le message • des pointeurs vers le ou les commits parent • pointeur vers l’empreinte de l'arborescence de projet (tree snapshot) 28
  • 29. Branches. En bref git add README test.rb LICENSE git commit -m 'initial commit of my project' 29
  • 30. Branches. En bref git add git commit -m ‘Fixed bug #1328 - ...’ git add git commit -m ‘add feature #32 - ...' 30
  • 31. Branches. En bref Une branche dans Git est simplement un pointeur léger et déplaçable vers un de ces commits. 31
  • 32. Branches. Création git branch testing git log --oneline --decorate f30ab (HEAD, master, testing) commit message 34ac2 commit message 98ca9 commit message 32
  • 33. Branches. Checkout git checkout testing git checkout –b testing 33
  • 34. Branches. Checkout <travail> git commit -a -m 'made a change' 34
  • 36. Branches. Checkout <travail> git commit -a -m 'made other changes' 36
  • 37. Branches. Visualisation git log --oneline --decorate --graph --all * c2b9e (HEAD, master) made other changes | * 87ab2 (test) made a change |/ * f30ab add feature #32 * 34ac2 fixed bug #1328 * 98ca9 initial commit of my project 37
  • 38. Branches. Fusions git checkout master Switched to branch 'master' git merge hotfix Updating f42c576..3a0874c Fast-forward index.html | 2 ++ 1 file changed, 2 insertions(+) 38
  • 39. Branches. Fusions git branch -d hotfix Deleted branch hotfix (3a0874c) git checkout master Switched to branch 'master' git merge hotfix Updating f42c576..3a0874c Fast-forward index.html | 2 ++ 1 file changed, 2 insertions(+) 39
  • 40. Branches. Fusions git checkout master Switched to branch 'master' git merge iss53 Merge made by the 'recursive' strategy. README | 1 + 1 file changed, 1 insertion(+) 40
  • 41. Branches. Fusions git branch -d iss53 Deleted branch iss53 (3a0874c) 41
  • 42. Branches. Conflits de fusions git merge prob53 Auto-merging index.html CONFLICT (content): Merge conflict in index.html Automatic merge failed; fix conflicts and then commit the result. git status On branch master You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: index.html no changes added to commit (use "git add" and/or "git commit -a") 42
  • 43. Branches. Conflits de fusions <<<<<<< HEAD:index.html <div id="footer">contact : email.support@github.com</div> ======= <div id="footer"> please contact us at support@github.com </div> >>>>>>> prob53:index.html <div id="footer"> please contact us at email.support@github.com </div> $ git add –A $ git commit Afin de terminer le merge il faudra créer un commit 43
  • 44. Travaille pratique 1. Vous devez déjà avoir un dépôt avec deux fichiers dans la branche master 2. Créez et extrayez la branche secondaire (ticket123 par exemple) 3. Changez et ajoutez des fichiers, validez vos modifications 4. Fusionnez vos modifications à la branche master (fast-forward) 5. Supprimez cette branche secondaire 6. Répétez les p. 2 – 3 7. Extrayez la branche master 8. Modifier autrement le même endroit dans un même fichier que vous venez de modifier dans une branche secondaire pour provoquer un conflit 9. Fusionnez les modifications à la branche master, résolvez le conflit, validez un nouveau fusion 10. Utilisez souvent les commandes log et status 44
  • 46. Stash $ git stash save “my personal stash comment“ Saved working directory and index state On master: my personal stash comment $ git stash list stash@{0}: On master: my personal stash comment $ git stash Saved working directory and index state WIP on issue: 410b55d commit message $ git stash list stash@{0}: WIP on issue: 410b55d commit message Il est possible de changer la branche seulement si vous n’avez aucun fichier modifié ou ajouté et votre zone d’index ne contient aucun modification. Pour changer un branche et sauvegarder le travail pour y revenir plus tard il est possible d’utiliser le remisage. stash [save [<message>]] 46
  • 47. Stash Pour vérifier le statut de la zone de remisage et le gérer utilisez ces commandes stash list stash show [<stash>] stash drop [<stash>] stash clear 47
  • 48. Stash Pour réintégrer le travail sauvegardé dans le remisage utilisez l’un de ces commandes : stash apply [<stash>] – appliquer les modifications à votre espace de travail stash pop [<stash>] – appliquer les modifications et supprimer le stash stash branch <branchname> [<stash>] – créer une branche et et supprimer le stash 48
  • 49. Travaille pratique 1. Passez votre travaille dans la zone de remisage afin de pouvoir changer la branche 2. Essayez plusieurs commandes pour appliquer le travail de stash (apply, stash, branch) 49
  • 50. Tags
  • 51. Tags git tag -l v0.1 v1.0 v1.3 tous git tag –l ‘v1’ V1.0 v1.3 filtrés git tag 1.4.3 [<commit>] Légère git tag -a v1.4 -m ‘mep 1.4’ [<commit>] Annoté git show v1.4 tag v1.4 Tagger: Ben Straub <ben@straub.cc> Date: Sat May 3 20:19:12 2014 -0700 ma version 1.4 commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number git show v1.4.3 commit ca82a6dff817ec66f44342007202690a93763949 Author: Scott Chacon <schacon@gee-mail.com> Date: Mon Mar 17 21:52:11 2008 -0700 changed the version number Lister Créer 51
  • 53. Eléments distants branches tags • Les dépôts locaux sont accessibles par <remote>/<branch> • Sont modifiables automatiquement lors de communication avec un dépôt distant dépôts (origin) 53
  • 54. Eléments distants branche d'amont upstream branch /.git/refs/remotes/origin branche de suivi tracking branch /.git/refs/heads 54
  • 55. Eléments distants clone Télécharge le dépôt dans le nouveau répertoire • crée toutes les branches distantes • crée les branches locales et en fait des branches de suivi • --depth <n> limite l’historique téléchargée master origin/master masterfetch lot1 origin/lot1 lot1fetch poste locale gitlab.webnet.fr merge merge 55
  • 57. Eléments distants fetch Télécharge les objets et les références (branches et tags) git merge origin/master 57
  • 58. Eléments distants pull (git fetch & git merge FETCH_HEAD) tirer des objets distants X---Y---Z master sur gitlab.webnet.fr / A---B---C---D master dans votre espace de travail ^ origin/master dans votre dépôt local X---Y---Z master sur gitlab.webnet.fr / A---B---C---D---E master dans votre espace de travail / X---Y---Z ^ origin/master dans votre dépôt local git pull 58
  • 59. Eléments distants pull (git fetch & git merge FETCH_HEAD) X---Y---Z master sur gitlab.webnet.fr / A---B master dans votre espace de travail ^ origin/master dans votre dépôt local X---Y---Z master sur gitlab.webnet.fr / A---B---X---Y---Z master dans votre espace de travail ^ origin/master dans votre dépôt local git pull (fast forward) 59
  • 60. Eléments distants push [ <repository> [ <branch> ] ] X---Y---Z master sur gitlab.webnet.fr / A---B---C---D---E master dans votre espace de travail / X---Y---Z ^ origin/master dans votre dépôt local X---Y---Z---E master sur gitlab.webnet.fr / / A---B---C---D---E master dans votre espace de travail ^ origin/master dans votre dépôt local git push 60
  • 61. Eléments distants remote – gérer des dépôts suivis $ git remote -v origin git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git (fetch) origin git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git (push) remote add <name> <url> $ git remote add origin git@github.com:vria/git-workshop.git remote rename <old> <new> git remote remove <name> 61
  • 62. Branches distants $ git remote show origin * remote origin Fetch URL: git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git Push URL: git@gitlab.webnet.fr:webnet/verifimmo-backimmo2.git HEAD branch: master Remote branches: lot1 tracked lot2 tracked master tracked refs/remotes/origin/test-jenkins stale (use 'git remote prune' to remove) Local branches configured for 'git pull': lot1 merges with remote lot1 lot2 merges with remote lot2 master merges with remote master Local refs configured for 'git push': lot1 pushes to lot1 (local out of date) lot2 pushes to lot2 (local out of date) master pushes to master (local out of date) git remote show <name> 62
  • 63. Eléments distants - Exemple Un nouveau dépôt sur le serveur github.com (avec README.md) avec la branche master Il existe un dépôt local contenant l’application Symfony avec la branche master Le but est de relier ces deux projets: pouvoir retirer / pousser, configurer la branche de suivi $ git remote add origin git@github.com:vria/git-workshop.git $ git fetch origin warning: no common commits remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From github.com:vria/git-workshop * [new branch] master -> origin/master master origin/master masterfetch Poste local gitlab.webnet.fr
  • 64. $ git merge master origin/master fatal: refusing to merge unrelated histories Eléments distants - Exemple $ git merge master origin/master --allow-unrelated-histories Merge made by the 'recursive' strategy. README.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 README.md Puisque votre branche locale master n’a pas d’historique commun avec origin/master il faut demander explicitement à fusionner deux branches sans aucune relation. Les nouveaux commits de origin/master peuvent être mergés sans souci à master. 64
  • 65. Eléments distants - Exemple master origin/master masterfetch Poste local gitlab.webnet.fr $ git pull There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> master $ git push fatal: La branche courante master n'a pas de branche amont. Pour pousser la branche courante et définir la distante comme amont, utilisez git push --set-upstream origin master 65
  • 68. Travaille pratique. Dépôt commun 1. Clonez le dépôt 2. Créez et/ou modifiez le fichier, validez 3. Poussez vos modifications sur le serveur (possiblement, après avoir récupérer le travail d’un autre collaborateur) 4. Créez votre branche (son nom sera votre prénom), modifiez-y les fichiers, poussez-la sur le serveur 5. Récupérez la branche de votre collègue, fusionnez-la avec master 6. Supprimez la branche de votre collègue et poussez master sur le serveur 68
  • 69. Travaille pratique. Dépôt tiers 1. Faites un « fork » d’un projet public 2. Clonez votre nouveau dépôt 3. Modifiez et/ou créez des fichiers 4. Validez et poussez 5. Créez un « pull request » (« merge request ») 6. … 7. PROFIT 69