Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Génie logiciel
C01E
LOG1000
Git
Ingénierie logicielle
1. Comment
fonctionne Git
2. Interactions
avec le serveur
3. Commandes
de base Git
Git
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
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
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.
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
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
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
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
Nouvelle branche
2. Interactions
avec le serveur
3. Commandes
de base Git Commit #1 Commit #2 Commit #3
Nouvelle branche
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
eda193b bb245ae
fctx fctx fcty
master master
HEAD
git fetch origin
LOCAL REPO
REMOTE REPO
0fb45c1 ne change pas
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
bb245ae eda193b
fctx origin/fcty
orgin/master master
HEAD
git merge origin/master
LOCAL REPO
0fb45c1
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
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
●
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
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.
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
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
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