Vous êtes sur la page 1sur 45

LOG1000

Génie logiciel

C01E
LOG1000
Git
Ingénierie logicielle
1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git
Git

Département de génie informatique et de


génie logiciel
1

Avec du matériel produit par Mathieu Lavallée, Bram Adams et Michel Gagnon et 1
Nikolay Radoev
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Git est un exemple de gestionnaire de versions
fonctionnant par fusion de fichiers.

Avec le Git de base, il n'est pas possible de bloquer
1. Comment
fonctionne Git des fichiers.
2. Interactions

Idéalement, un dépôt Git ne devrait pas contenir de
avec le serveur
fichiers binaires (DOC, PPT, PDF, etc.).
3. Commandes
de base Git

Les publications de changements (commit) peuvent
être calibrés comme on le désire.

On recommande de publier fréquemment des
changements de petite taille (atomiques).

Permet de renommer et déplacer des fichiers et des
répertoires sans perdre l'historique des
changements.

Chaque utilisateur a une copie locale du projet et de
son historique. 2
LOG1000
Génie logiciel Pourquoi utiliser Git
C01E
Git ●
Notre système de gestion des versions devrait nous
permettre de résoudre les problèmes suivants :
1. Comment
fonctionne Git

Garder une représentation de l'état de notre projet :
VERSION
2. Interactions
avec le serveur ●
Pouvoir choisir une version spécifique : HISTORIQUE
3. Commandes
de base Git

Savoir quels fichiers ont été modifiés/ajoutés/supprimés :
QUOI

Savoir ce qui a été modifié/ajouté/supprimé dans chaque
fichier : COMMENT

Savoir qui a fait les modifications : QUI

Donner une raison aux changements : POURQUOI

3
LOG1000
Génie logiciel Pourquoi utiliser Git
C01E
Git ●
Solution naïve :


Chaque fois qu'on veut faire un changement, on copie le
1. Comment
fonctionne Git
projet au complet dans un nouveau répertoire
NOMPROJET_vX et on incrémente X. On écrit nos raisons
2. Interactions
avec le serveur
de changement dans un fichier "modifications.txt" mis à jour
dans chaque version.
3. Commandes
de base Git


Résultat: ????

4
LOG1000
Génie logiciel Pourquoi utiliser Git
C01E
Git ●
Solution naïve :


Chaque fois qu'on veut faire un changement, on copie le
1. Comment
fonctionne Git
projet au complet dans un nouveau répertoire
NOMPROJET_vX et on incrémente X. On écrit nos raisons
2. Interactions
avec le serveur
de changement dans un fichier "modifications.txt" mis à jour
dans chaque version.
3. Commandes
de base Git


Résultat:

Cette solution n'est pas idéale et présente clairement des
problèmes de mise en échelle.

Cependant, c'est une piste de solution pour quelque chose
de mieux.
5
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Git fonctionnent par série de snapshots des fichiers
du projet.

Chaque version copie seulement les fichiers modifiés
1. Comment
fonctionne Git et conserve un lien vers le reste.
2. Interactions

Il est donc facile de voir quels fichiers ont été modifiés
avec le serveur
à chaque changement.
3. Commandes
de base Git

Source: Section 1.3 de Pro Git


6
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Git permet de voir la différence entre deux versions
d'un fichier (diff).

La différence est évaluée par ligne de code.
1. Comment
fonctionne Git ●
Git permet de comparer des versions qui ne sont pas
2. Interactions nécessairement séquentielles.
avec le serveur

3. Commandes
de base Git

+ #include “stdio.h”
int main () {
+ int main () { int main () {
- return 0;
+ return 0; + printf(“coucou”);
+ return 5;
+ } return 5;
}
}

#include “stdio.h”
int main () { #include “stdio.h”
etc. + int x=5; int main () {
etc. - printf(“allo”); - printf(“coucou”);
etc. + printf(“%d”, x); + printf(“allo”);
return 5; return 5;
7
} }
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Cela explique pourquoi Git gère mal un fichier
binaire.

Ex.: modification d'une très petite image JPEG
1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git

Différence dans le fichier binaire :
Version rouge :

Version verte :


Souvent, on change un détail dans un fichier binaire et
l'ensemble du fichier change.

Git permet le suivi de fichiers binaires, mais on perd
l'avantage de la gestion des changements. 8
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Git gère 3 états possibles pour les fichiers.

Validé (commited) : le fichier est sauvegardé dans le dépôt
(repository) local.
1. Comment
fonctionne Git

Modifié (modified) : le fichier a été modifié dans l'espace de
travail (working directory), mais pas encore validé.
2. Interactions
avec le serveur ●
Indexé (staged): le fichier a été marqué pour faire partie du
3. Commandes prochain commit vers le dépôt .
de base Git

9
Source: Section 1.3 de Pro Git
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Git ne suit pas chaque changement que l'on fait dans nos
fichiers.

Il faut lui indiquer comment regrouper les changements.
1. Comment
fonctionne Git

Un groupe de changements est un ensemble de fichiers modifiés.

2. Interactions

Un groupe de changements est appelé un « commit ».
avec le serveur ●
Un commit doit être accompagné d'un message pertinent.
3. Commandes main.c
de base Git
+ #include “newton.h”
int main () {
return 0;
}
git commit -m “nouvelle valeur de retour de newton()”
newton.h
- int calcule(); git add newton.h
+ int newton(); On ajoute à notre
On choisit les
historique des
changements faits à
newton.c changements les
newton.h et newton.c,
int newton() { changements faits à
mais pas main.c
- return 25; newton.h et newton.c
+ return 42; git add newton.c
} 10

WORKING DIRECTORY STAGING LOCAL REPOSITORY


LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Chaque commit est identifié par un numéro (quasi)
unique.
1. Comment
fonctionne Git
ID complet : e8311a2ea35b75b01f3ab809e23759a7d098261f
ID (version courte) : e8311a2
2. Interactions Message : “changements faits à newton”
avec le serveur

3. Commandes
de base Git

Cet ID est obtenu avec une fonction de hachage SHA1 (hash)
qui prend en entrée l'ensemble du contenu du Git, la date, le
message du commit, l'ID du commit précédent, etc.

L'ID est utilisé pour identifier uniquement un commit.

Git va souvent utiliser la version courte, formée des sept
premiers caractères, afin de faciliter la lecture.

ID : e8311a2 ID : ff429b0 ID : 125e9bc ID : 12da067


“changements “changements “correction d’un “ajout de la
faits à newton” faits au main” bogue” récursion”

11
LOG1000
Génie logiciel Git : premières commandes
C01E
Git ●
Pour initialiser un répertoire comme dépôt local (local
repo) :
1. Comment

git init
fonctionne Git

2. Interactions

Cette commande va créer un répertoire .git dans
avec le serveur votre répertoire courant. Il ne faut pas l'effacer →
3. Commandes c'est l'historique des changements de votre local
de base Git
repo.

Pour obtenir le code et l'historique des changements
d'un dépôt en ligne (remote repo) :

git clone https://userx@gitlab.com/userx/test.git
Cet exemple est pour un espace Git appelé “test” hébergé par Gitlab par
l’utilisateur “userx”. Pour utiliser Git à l’école, il faut qu’un technicien vous
crée un espace et vous envoie l’adresse de celui-ci.

Il suffit d'entrer votre mot de passe et d'attendre.
12

Avec git clone, pas besoin de git init
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git add nomfichier.cpp
Remote Repo

Ajoute le fichier "nomfichier.cpp" au
1. Comment "staging area". Les changements
fonctionne Git
faits à ce fichier seront ajoutés au
2. Interactions
avec le serveur
prochain git commit.
3. Commandes

git add . point Local Repo
de base Git

Ajoute tous les fichiers modifiés
dans le répertoire courant et ses
sous-répertoires au "staging area". Staging Area

git status

Décrit l'état du "working directory"
et du "staging area" : les fichiers
Working
modifiés, les fichiers en "staging", Directory
les nouveaux fichiers, les fichiers à
13
effacer ...
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git commit -m 'message'
Remote Repo

Soumet l'ensemble des
1. Comment changements dans le "staging
fonctionne Git
area" au "local repo".
2. Interactions
avec le serveur ●
Un commit devrait inclure des
3. Commandes changements liés à un objectif Local Repo
de base Git
particulier : résoudre un bogue,
ajouter une fonctionnalité, etc.
– Il est recommandé de faire des
Staging Area
commits plus petits et plus
fréquents.

Le 'message' du commit doit inclure
une description claire permettant à Working
vos collègues de comprendre les Directory
changements qui ont été effectués. 14
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
Vous avez oublié de mettre un message à votre
commit et vous vous retrouvez dans une fenêtre
bizarre? C'est normal. Remote Repo

1. Comment ●
Git a lancé pour vous un éditeur de texte en ligne de
fonctionne Git
commande, généralement Vi ou Emacs.
2. Interactions
avec le serveur

Vi : Appuyez sur 'i' (pour insertion) pour entrer un
message. Une fois votre message fait, tapez sur 'Esc'
Local Repo
3. Commandes et entrez ':wq' (pour write et quit) et tapez sur 'Enter'.
de base Git

Emacs : Entrez votre message. Control+C pour
sauvegarder et quitter.

Staging Area

Working
Directory

15
LOG1000
Génie logiciel Git et les branches
C01E
Git ●
Qu'est-ce qu'une branche ?

Les branches représentent les différentes version
1. Comment du code.
fonctionne Git main.cpp 1.0

2. Interactions main.cpp 1.1


avec le serveur

3. Commandes
de base Git

main.cpp DEV


Git possède des branches par défaut :

HEAD pointe vers la branche où vous vous trouvez en ce
moment.

La branche par défaut de Git s'appelle 'master'.

La commande git status permet de savoir sur quelle 16

branche HEAD pointe en ce moment.


LOG1000
Génie logiciel Git et les branches
C01E
Git

Avec Git, les branches sont marquées par des pointeurs.

Le pointeur pointe vers le dernier « commit » de sa branche.

Le pointeur « HEAD » indique quelle version de code est présentement
dans l'espace de travail.
1. Comment
fonctionne Git ●
Dans le cas ci-dessous, cela indique que notre espace de travail
2. Interactions contient la version de code qui suit les groupes de changements de :
avec le serveur ●
Création du projet initial (commit 2ab6700)
3. Commandes ●
Ajout de l'approche de Newton (commit 33aa9d6),
de base Git ●
Correction d'un bogue (commit 125e9bc).

Mais qu'il y a aussi une branche appelée « branche_x » sur laquelle
on pourrait travailler si on le voulait.
ID : 0deba53 ID : ba10450
“utilisation de “ajout de
branche_x
l’approche de l’affichage du
Sharaf al-Tusi” résultat”

ID : 33aa9d6 master
ID : 2ab6700 ID : 125e9bc
“ajout de
“création du “correction d’un HEAD
l’approche de 17
projet initial” bogue”
Newton”
LOG1000
Génie logiciel Git : naviguer dans les branches
C01E
Git ●
git branch testing

Crée une nouvelle branche appelée "testing" pointant
1. Comment
sur le dernier commit effectué.
fonctionne Git ●
Cette commande ne change pas la position de HEAD.
2. Interactions Si HEAD pointait sur "master" avant la commande, ce
avec le serveur
sera toujours le cas.
3. Commandes
Code dans l’espace de travail
de base Git

Branche par défaut

Commit #1 Commit #2 Commit #3

Nouvelle branche

18
LOG1000
Génie logiciel Git : naviguer dans les branches
C01E
Git ●
git checkout testing

ATTENTION ! Vous perdrez tous les changements non-
1. Comment
soumis (qui n'ont pas eu de « commit »).
fonctionne Git ●
Change le pointeur HEAD vers la branche "testing".
2. Interactions Dans ce cas-ci, le code de "master" est le même que le
avec le serveur
code de "testing" parce que nous sommes au même
3. Commandes commit.
de base Git

Branche par défaut

Commit #1 Commit #2 Commit #3

Nouvelle branche

Code dans l’espace de travail 19


HEAD
LOG1000
Génie logiciel Git et les branches
C01E
Git ●
À mesure que l'on fait des commits sur une branche,
le pointeur de la branche est mis à jour pour pointer
vers le dernier commit effectué.
1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git Commit #1 Commit #2 Commit #3

→ Il est donc possible de faire pointer HEAD vers d’autres


commits afin de voir le code de versions précédentes.
20
Source pour plus d’infos : Git Pro, chapitre 3.
LOG1000
Génie logiciel Git : naviguer dans les branches
C01E
Git ●
nano main.c On modifie le fichier « main.c »

git commit -a -m 'petite modification'

On fait un nouveau commit sur la branche courante. Comme nous
1. Comment
fonctionne Git avons fait un checkout de "testing", c'est cette branche qui est
affectée au lieu de "master".
2. Interactions
avec le serveur ●
Un checkout de "master" permettrait de revenir au code précédent.
3. Commandes

Un merge de "testing" alors qu'on pointe sur "master" permettrait
de base Git de fusionner le branche avec le code principal de "master".

Branche par défaut

Commit #1 Commit #2 Commit #3 Commit #4

Nouvelle branche

Code dans l’espace de travail


21
LOG1000
Génie logiciel Fusion (merge) avec Git
C01E
Git ●
Si les changements touchent des lignes de code
différentes, Git n'indique pas de conflits.

Ceci dit, la fusion ne fait pas toujours du sens :
1. Comment
fonctionne Git Commit bb245ae testing Commit eda193b master, HEAD
2. Interactions #include “newton.h” #include “newton.h”
avec le serveur
int main () { int main () {
3. Commandes - int x = 0; int x = 0;
de base Git
+ int x = 5; + x = newton();
return x; return x;
} }

git merge testing


Commit 453ab2e master, HEAD
#include “newton.h”

int main () {
- int x = 0;
+ int x = 5;
+ x = newton();
return x; 22
}
LOG1000
Génie logiciel

Si les changements touchent des mêmes lignes de code,
C01E
Git indique un conflit et demande de le résoudre :
Git
Commit bb245ae testing Commit eda193b master, HEAD
#include “newton.h” #include “newton.h”
1. Comment
fonctionne Git
int main () { int main () {
- int x = 0; - int x = 0;
2. Interactions + int x = 5; + int x = 6;
avec le serveur return x; return x;
} }
3. Commandes
de base Git
git merge testing
Fichier modifié dans le WORKING SPACE

#include “newton.h”

int main () {
Il faut résoudre le conflit, en <<<<<<< HEAD
choisissant la version qu’on int x = 6;
veut garder, et faire le =======
« commit » nous-mêmes. int x = 5;
>>>>>>> bb245ae
return x;
} 23
LOG1000
Génie logiciel Git : résolution de conflit
C01E
Git ●
Dans le cas où les deux branches fusionnées touchent
le même fragment de code, Git ne sait pas quoi faire.

1. Comment

Pour lister les conflits : git diff
fonctionne Git

Le ou les fichiers affectées vont être marqués. Il revient
2. Interactions
avec le serveur
à vous de choisir quelle version conserver.
int main(int argc, char **argv) {
3. Commandes
de base Git
int x = mesure(); Marque de conflit.
std::cout << x; Début du code de
return 0; votre version (HEAD)
}

<<<<<<< HEAD
int calcul() { Séparateur des deux
======= versions de code
int mesure() {
>>>>>>> 77976da35 Fin de l’autre version
return 5; (commit 77976da35)
}


Par la suite, vous pouvez faire un commit comme 24
d'habitude.
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Mais ce n'est pas uniquement de garder trace de
notre travail localement.

La force de Git est de :
1. Comment
fonctionne Git ●
Pouvoir partager notre travail avec d'autres,
2. Interactions
avec le serveur

Pouvoir obtenir le travail des autres.
3. Commandes
de base Git

On a donc la situation suivante :
WORKING LOCAL REMOTE
DIRECTORY REPO REPO

newton.h
int newton();
int recursif();

newton.c
int newton() {
return recursif();
}

branche_x

branche_y
branche_x
HEAD

int recursif() {

master
master

return 0; 25
}
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git ●
Notez les différences entre votre historique de
changements locaux (LOCAL REPO) et l'historique
des changements sur le serveur (REMOTE REPO).
1. Comment
fonctionne Git

Pour pouvoir partager nos changements, il faut
2. Interactions d'abord se synchroniser avec le serveur.
avec le serveur ●
Tous les conflits sont donc réglés localement.
3. Commandes
de base Git
LOCAL REMOTE
REPO REPO

branche_x

branche_y
branche_x
HEAD

master
master

26

Que se passe-t-il quand on obtient le code du serveur ? Ex. :
LOCAL REPO REMOTE REPO appelé « origin »
0fb45c1 0fb45c1

182a34b 8610912 182a34b 8610912 ab45ec1



d11b994 6a2b67a d11b994 6a2b67a 2a2e01b

eda193b bb245ae
fctx fctx fcty
master master
HEAD
git fetch origin
LOCAL REPO
REMOTE REPO
0fb45c1 ne change pas

182a34b 8610912 ab45ec1



d11b994 6a2b67a 2a2e01b

bb245ae eda193b
fctx origin/fcty

orgin/master master 27
HEAD

On peut ensuite fusionner ce qui vient du remote « origin » avec notre
code.
LOCAL REPO
0fb45c1

182a34b 8610912 ab45ec1



d11b994 6a2b67a 2a2e01b

bb245ae eda193b
fctx origin/fcty

orgin/master master
HEAD
git merge origin/master
LOCAL REPO
0fb45c1

182a34b 8610912 ab45ec1



d11b994 6a2b67a 2a2e01b

bb245ae eda193b
fctx origin/fcty
master
453ab2e Git fait une fusion automatique des 28
HEAD
changements ... mais ce n’est pas toujours idéal.
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git

1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git

git fetch

29
LOG1000
Génie logiciel Principe de fonctionnement de Git
C01E
Git Serveur de
Votre machine
l’école

1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git

git fetch

Ensemble de Code prêt à


Code que Code partagé
modifications être partagé ou 30
vous venez avec tout le
que vous à être fusionné
d’écrire monde
voulez ajouter avec le vôtre.
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
Une fois notre code fonctionnel
localement, il faut le partager aux Remote Repo
autres !
1. Comment
fonctionne Git ●
git remote -v
2. Interactions
avec le serveur ●
Détaille (-v → verbose) les remote repo
3. Commandes
auxquels il est possible d'obtenir ou de Local Repo
de base Git soumettre du code.

Par défaut, il n'y a rien, il faut donc ajouter
un remote repo (pas nécessaire si on a
fait un git clone).
Staging Area

git remote add nomremote
https://userx@gitlab.com/userx/test.git

Par défaut, la majorité des gens remplace
'nomremote' par 'origin'.

L'addresse internet devra être fournie par Working
l'école dans votre cas. Directory

31
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git fetch nomremote
Remote Repo

Prend les changements publiés sur
1. Comment le remote repo et les mets dans le
fonctionne Git
local repo. Ex.: Code que nous venons d’écrire
2. Interactions
avec le serveur
Commit Commit Commit Commit
HEAD (master)
3. Commandes A B C D Local Repo
de base Git
Code que nous avions Commit Commit
déjà soumis au remote E F

Code obtenu par le fetch (nomremote/master)


Staging Area

On a donc des versions différentes
du code ... il faut fusionner (merge).

git pull origin
Working

Effectue un git fetch nomremote suivi d'un Directory
git merge → peut être source d'erreurs.
32
Voir : https://stackoverflow.com/questions/44473483/what-does-git-fetch-exactly-do
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git merge nomremote/master (ou git pull)

Crée un nouveau commit avec la fusion de la branche
spécifiée avec la branche pointée par HEAD (dans notre
1. Comment
fonctionne Git cas, master).
2. Interactions Code que nous
avec le serveur venons d’écrire
HEAD (master)
3. Commandes Commit Commit Commit Commit
de base Git
Commit
A B C D G

Code que nous avions Commit Commit


déjà soumis au remote E F (nomremote/master)

Code obtenu par le fetch


Dans la mesure où les modifications ne touchent pas le même
fragment de code, la fusion se fait sans conflits.
– Mais ça peut introduire des problèmes quand même ! →
Ex.: fonction renommée.

git reflog permet de voir quels commits se trouvent dans quelles
33
branches et de comprendre où on en est !
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git push nomremote nombranche
Remote Repo

La branche 'nombranche' est
1. Comment généralement 'master'.
fonctionne Git

2. Interactions

Cette commande publie tous les
avec le serveur commits fait dans la branche
3. Commandes spécifiée du local repo vers le Local Repo
de base Git
remote repo.

Si d'autres personnes ont fait des
push avant vous sur le remote repo
Staging Area
→ votre local repo n'est pas à jour
avec le remote repo → votre push
sera refusé.
– Vous devez d'abord faire un git Working
fetch/merge et résoudre les Directory
conflits si nécessaire. 34
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
git checkout nomcommit

DANGER ! Cette commande va effacer Remote Repo

1. Comment
tout le code qui n'a pas été soumis
fonctionne Git (« commit ») au staging area.
2. Interactions ●
Cette commande permet de voir (to
avec le serveur
check out) le code d'une autre branche.
3. Commandes Local Repo
de base Git

Le 'nomcommit' est le code de hachage
SHA-1 du commit (ex.: a1e8fb5). Les
sept premiers caractères sont suffisants.
Pour les obtenir :
Staging Area
– git reflog
– git log --oneline

git checkout master
Working

Pour revenir à l'espace de travail Directory
original.
35
LOG1000
Génie logiciel Git : fichier .gitignore
C01E
Git ●
Il est possible de dire à Git d'ignorer certains fichiers.

Utile afin d'éviter d'ajouter par accident des
1. Comment fichiers binaires (PDF, DOCX ...).
fonctionne Git

2. Interactions

Il faut mettre dans le répertoire de Git un fichier
avec le serveur s'appelant .gitignore (notez bien le "." au début)
3. Commandes
de base Git

Dans ce fichier, vous pouvez définir des types de
fichiers que Git doit ignorer, séparer par des
retours à la ligne. Ex.:
– *.pdf
– guide.docx
– carnet-*.docx

Pour plus d'infos sur la syntaxe des
fichiers .gitignore, voir
https://www.atlassian.com/git/tutorials/gitignore 36
LOG1000
Génie logiciel Git : cycle de travail normal
C01E
Git ●
Normalement, dans une séance de travail, vous
devriez utilisez les commandes suivantes :
1. Comment

git fetch + git merge : Avant de commencer afin
fonctionne Git
d'obtenir la dernière version du code.
2. Interactions
avec le serveur ●
git status : Pour voir les changements que vous
3. Commandes avez effectués.
de base Git

git add : Pour ajouter les changements au
prochain commit.

git commit : Régulièrement, avec des messages
clairs des modifications faites.

git fetch + git merge : Juste avant de faire un
push afin de vous assurer que vous avez la
dernière version de code.

git push : Pour publier vos commits à vos 37
collègues.
LOG1000
Génie logiciel Git : commandes principales
C01E
Git ●
Ce guide n'est qu'une vision très rapide des possibilités de Git.

Il y a beaucoup d'autres commandes (certaines plus dangereuses)
qui ne sont pas abordées ici.
1. Comment
fonctionne Git ●
Ex.: Hook → lancement de scripts après un commit/push.
2. Interactions ●
Pour plus d'informations, ou si vous êtes coincés :
avec le serveur

Stackoverflow présente d'excellentes réponses pour les
3. Commandes
de base Git
questions les plus fréquentes avec Git.
– https://stackoverflow.com/questions/tagged/git?sort=frequent

Atlassian présente des bons tutoriels sur l'utilisation des
principales commandes de Git.
– https://www.atlassian.com/git/tutorials/setting-up-a-repository

Git est stable, mais


pas invulnérable ... il
est recommandé de
faire des backups
réguliers de votre
code. 38
LOG1000
Génie logiciel Question
C01E
Git ●
Votre espace de travail contient les fichiers main.cpp,
Employee.h et Employee.cpp.
1. Comment
fonctionne Git Ces fichiers se trouvent sur le serveur Git.
2. Interactions
avec le serveur Vous modifiez main.cpp et vous faites les
3. Commandes commandes suivantes pour envoyer vos
de base Git
changements sur le serveur :

git commit -m "Mes changements"


git push

Malheureusement, les changements ne sont pas


envoyé au serveur.
Pourquoi ?

39
LOG1000
Génie logiciel Question
C01E
Git ●
Vous vous trouvez actuellement dans la branche X
dans votre espace de travail
1. Comment
fonctionne Git Votre coéquipier a créer une nouvelle branche Y
2. Interactions
avec la nouvelle fonctionnalité et il a envoyé ces
avec le serveur changements au serveur.
3. Commandes
de base Git
Il vous demande de tester le code sur la branche
avant de la fusionner avec la branche master.

Vous faites git checkout Y, mais ça ne marche pas.

Pourquoi ?

40
LOG1000
Génie logiciel Question
C01E
Git ●
Vous revenez sur la branche X et vous commencez à
coder une fonctionnalité.
1. Comment
fonctionne Git Vous coéquippier vous demande de vérifier à
2. Interactions
nouveau la branche Y.
avec le serveur

3. Commandes Vous faites quoi ?


de base Git

41
LOG1000
Génie logiciel Forces de Git
C01E
Git ●
Il est facile de s'assurer que nos push vers le remote
(code partagé par tout le monde) contient une
version de code qui marche !
1. Comment
fonctionne Git

Il suffit de tester le code du local repo avant de faire le
2. Interactions
push.
avec le serveur

On peut définir explicitement quels fichiers font partie
3. Commandes
de base Git d'un commit.

Ex.: Regroupe ensemble les modifications de code liés
à un correctif de bogue.

Ex.: Permet de limiter le commit au code qu'on a
terminé d'écrire.

Gestion des branches facile.

On restera cependant aux notions de base cette
session.
42
LOG1000
Génie logiciel Git cheatsheet
C01E
Git

questions d’examen incluant


Très probable qu’il y ait des
des commandes Git !
1. Comment
fonctionne Git

2. Interactions
avec le serveur

3. Commandes
de base Git

Source :
https://www.git-
tower.com/blog/gi
t-cheat-sheet/
43
LOG1000
Génie logiciel Git : pour aller plus loin
C01E
Git ●
Le livre Git Pro est une excellente resource pour
apprendre plus sur Git, son utilisation et même les
détails techniques en arrière
1. Comment
fonctionne Git

2. Interactions

Pour le cours de LOG1000, on vous fournit un
avec le serveur
entrepôt Git sur les serveurs à l'école, mais vous
3. Commandes
de base Git
pouvez créer vos propres entrepôts à distance sur
des plateformes en ligne pour explorer Git :

GitHub (très populiare pour des projets Open Source)

GitLab (similaire à GitHub, mais cible des processus de
développement complets)
– Vous allez explorer GitLab plus en détails dans votre
travail pratique 4.

44
LOG1000
Génie logiciel Git : pour aller plus loin – commandes
C01E
Git ●
git blame nomFichier

Permet de voir qui a modifié chaque ligne du fichier (montre
le dernier commit)
1. Comment
fonctionne Git

L'option -L x,y permet de cibler la plage de lignes [x,y]
2. Interactions
avec le serveur

git log
3. Commandes
de base Git ●
Permet de voir l'historique des commits.

Offre beaucoup d'options. Voir la documentation
– git log -n (montre les n derniers commits)
– git log --graph --all --oneline (montre le graph des
branches de manière simplifiée)

git clean

Permet de supprimer les fichiers non-suivis
(untracked) de l'espace de travail
45

Vous aimerez peut-être aussi