SCM av ec Git
S alah G on tar a
20 22- 20 23
Sour ce Code M an agem en t
◇ La gestion du code source (SCM)
est utilisée pour suivre les
modifications apportées à un
référentiel de code source.
◇ SCM suit un historique des
modifications apportées à une base
de code et aide à résoudre les
conflits lors de la fusion des mises
à jour de plusieurs contributeurs.
◇ SCM est également synonyme de
contrôle de version.
Codon s à plusieur s !
Versionner son projet avec Git
Pour quoi ut iliser git ?
Objectifs :
◇ travailler à plusieurs sans se marcher dessus :
indispensa ble pour les projets en équipe
◇ garder un historique propre de toutes les
modifications : on orga nise son tra va il sous forme de
“commits” documentés
La t héor ie de git
3 zones, 3 ambiances
Les modifications sont sauvegardés 3 fois
W orking directory Index Local repository
C’est la zone de travail : Zone qui permet de Code commité, prêt à être
les fichiers tout juste stocker les modifications envoyé sur un serveur
modifiés sont ici séléctionées en vue d’être distant
commitées
Les com m it s
Commit : ensemble de modifica tions cohérentes du
code
Un bon commit est un commit : C’est quoi concrètement un commit ?
◇ qui ne concerne qu’une s eule ◇ une différence (ajout / suppression de
fonctionna lité du progra mme lignes)
◇ le plus petit pos s ible tout en res ta nt ◇ des méta-données (titre, hash,
cohérent auteur)
◇ Idéa lement qu’il compile s eul
Les com m it s
Arbre de commits dans le git repository
4a7f5a6c478.. 7a4d5f97d8bb.. 0a4d9f8d4dda..
Ajout
Affichage des
Formulaire ajout commentaire
commentaires
commentaire dans base de
des publications
données
Aller jusqu’au com m it
3 zones, 3 ambiances
Les modifications sont sauvegardés 3 fois
W orking directory Index Local repository
C’est la zone de travail : Zone qui permet de Code commité, prêt à être
les fichiers tout juste stocker les modifications envoyé sur un serveur
modifiés sont ici séléctionées en vue d’être distant
commitées
git add git commit
Aller jusqu’au com m it
Où j’en suis dans mes 3 zones ?
git status
On branch master
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: views/add_commentaire.php
no changes added to commit (use "git add" and/or "git commit -a")
Aller jusqu’au com m it
Visualiser les différences entre le w orking directory et l’index
git diff
diff --git a/views/add_commentaire.php b/views/add_commentaire.php
index e69de29..8cff573 100644
--- a/views/add_commentaire.php
+++ b/views/add_commentaire.php
@@ -0,0 +1,6 @@
<?php include('header.php'); ?>
+<form action="/commentaire/ajouter" method="post">
+ <p>Pseudo : <input type="text" name="pseudo"/></p>
+ <p>Commentaire : <textarea name="commentaire"></textarea></p>
+</form>
Aller jusqu’au com m it
Ajouter mes modifications à la zone de staging (index)
git add views/add_commentaire.php
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: views/add_commentaire.php
Aller jusqu’au com m it
Récupitulatif des commandes
a fficha ge
git diff git diff --staged
différences
w orking directory index git repository
git add mon_fichier
a jouter des
git add -p (interactif) git commit -m “message”
modifica tions
git add -A (tout ajouter)
Rev en ir au der n ier com m it
git status
On branch master
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: model/commentaires_model.php
no changes added to commit (use "git add" and/or "git commit -a")
Rev en ir au der n ier com m it
Enlever des modifications dans le w orking directory
git checkout -- monfichier
git status
On branch master
nothing to commit, working directory clean
Désin dexer des f ichier s
git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: model/commentaires_model.php
Désin dexer des f ichier s
git reset HEAD monfichier
git status
On branch master
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: model/commentaires_model.php
no changes added to commit (use "git add" and/or "git commit -a")
Aller jusqu’au com m it
Récupitulatif des commandes
w orking directory index git repository
git diff git diff --staged
git add monfichier git commit -m “titre”
git commit -am “titre” (si le fichier a déjà été indexé)
git checkout -- monfichier git reset HEAD monfichier
git reset --hard
Les br an ches
◇ branche : pointeur vers un commit
◇ une bra nche principa le : master
◇ B ra nche coura nte : HEAD
◇ en généra l, une bra nche pa r fonctionna lité en cours de
développement
Les br an ches
master*
C1 C2 C3
fonctionnalité
C4 C5
Les br an ches et com m it s
Arbre de commits dans le git repository
HEAD
master
4a7f5a6c478.. 7a4d5f97d8bb.. 0a4d9f8d4dda..
ajout
affichage des
formulaire ajout commentaire
commentaires
commentaire dans base de
des publications
données
Gest ion des br an ches
Création et modification de branches
git branch : affichage des branches
git branch ma_branche : créer la branche ma_branche
git checkout ma_branche : déplace HEAD vers ma_branche
ou pour simplifier...
git checkout -b ma_branche : créer la branche
ma_branche et déplace HEAD dessus
Gest ion des br an ches
Merge : intégration des modifications d’une branche dans la branche
courante
git merge ma_branche: merge ma branche dans la branche
courante
ma ster*
C1 C2 C3
bugFix
C4 C5
Gest ion des br an ches
Merge : intégration des modifications d’une branche dans la branche
courante
git merge ma_branche: merge ma branche dans la branche
courante
ma ster*
C1 C2 C3 C6
bugFix
C4 C5
Les dépot s dist an t s
Centraliser les données sur un dépot git !
Les dépôt s dist an t s
◇ git directory sur un serveur distant pour le travail collaboratif
◇ Dépots dis ta nts :
■ github (pa ck étudia nt)
■ Gitlab (en cours)
P ourquoi gitla b ?
◇ code review , merge reques t, interfa ce w eb, ...
Voir et ajout er des
dépots dis tan ts
Cloner un dépot distant : crée un dossier et récupère les fichiers
git clone <url>
En v oy er sur le dépot
dis tan t
git push
Envoie notre local repository sur le dépot distant
On ne touche plus aux commits pushés !
Recev oir depuis le dépot
dis tan t
git pull
Récupère les commits sur le dépot distant et met à jour le w orking directory
Le schém a de base de git
Récupitulatif des commandes
remote git
w orking directory index git repository
repository
git diff git diff --staged
git add git commit
git checkout -- git reset
git reset --hard
git push
git pull
git fetch
In st allat ion de git
Sous w indow s :
◇ https ://git- for- w indow s .github.io/
◇ http://ba bun.github.io/ (Emulateur de s hell)
S ous OS X :
◇ http://s ourceforge.net/projects /git- os x- ins ta ller
S ous Linux :
◇ <votre pa cka ge ma na ger> ins ta ll git
( a pt- get, rpm, …)
Aut hen t if icat ion par clé
Pour accéder aux dépots sur gitlab, il faut y ajouter sa clé
On génère une pa ire de clés :
ssh-keygen -t rsa -C "
[email protected]"
On a ffiche le contenu de la clé publique :
cat ~/.ssh/id_rsa.pub
On copie tout le contenu de la clé publique sur https://gitla b.com/eps_devops
> mon profil > clés S S H
Con f igur at ion m in im ale
git config --global user.name "Prénom Nom"
git config --global user.email “
[email protected]”
En option mais c’est mieux :
git config --global color.ui true
git config --global color.diff.meta yellow
La zon e de bor del : S tas h
Le stash ça sert à :
◇ S a uvega rder les modifica tions du w orking directory da ns une
zone ta mpon pour rendre le w orking directory propre.
◇ P os s ibilité de rejouer les modifica tions s ta s hées n’importe où
◇ P eut être vu comme une zone de brouillons
St ash : les
c om m an des
On stash un ensemble de modifications
git stash
On récupères les modifica tions sta shées
git stash apply
P our plus ieurs sta shs :
git stash list
git stash apply stash@{id}
Effa cer le contenu du sta sh
git stash clear
Pour aller plus loin av ec
git...
◇ git rebase ou git merge ?
◇ balader ses commits avec git cherry-pick
◇ afficher un commit : git show <commit>
◇ Engueulez vos a mis : git blame <fichier>
◇ vis ua lis er l’his torique des commits : git log
◇ J’a i tout ca s s é ! git reflog