Guide détaillé, étape par étape
Le TD organise le projet du TD 2a en branches, comme le décrit la
partie « Lire et tenir un dépôt » : une branche develop qui
réunit le travail, et une branche par tâche. On écrit la description du
projet sur une branche, le programme principal sur une deuxième et les
fonctions de calcul sur une troisième, comme si deux personnes
travaillaient en parallèle, puis on fusionne les trois dans
develop. Le TD correspond aux questions 6 à 17 de la
feuille, et dure une trentaine de minutes.
On travaille dans le dépôt créé au TD 2a,
~/Desktop/info01/cours2/2a_premier_depot/travail/projet_2,
dans Git Bash.
| Étape | Objectif | Questions | Ce qu’on fait |
|---|---|---|---|
| 1 | développer sur une branche, puis fusionner | 6 à 8 | créer develop et documentation, décrire le
projet, fusionner |
| 2 | isoler le programme principal sur sa branche | 9 à 12 | créer main_code, y écrire le programme principal |
| 3 | isoler les fonctions de calcul sur une autre branche | 13 à 16 | créer operations, y écrire les fonctions de calcul |
| 4 | réunir deux branches dans une troisième | 17 | fusionner main_code, puis operations, dans
develop |
Chaque étape commence par un encadré qui la résume. Ce que chaque étape fait constater est expliqué à la fin du guide, dans « Ce que le TD fait constater » : faire l’étape d’abord, et noter ce qu’on observe, avant de lire l’explication.
Chaque étape se termine par git llog. Le graphe qu’il
affiche est la vérification du TD : le comparer à celui du guide.
documentationÀ faire : créer
developdepuismaster, puisdocumentationdepuisdevelop; décrire le projet dansREADME.md; faire un commit ; revenir surdevelopet y fusionnerdocumentation.À obtenir :
developetdocumentationdésignent le même commit,description du projet.
cd ~/Desktop/info01/cours2/2a_premier_depot/travail/projet_2
git status
Vérification : l’invite se termine par
projet_2 (master), et git status affiche
rien à valider, la copie de travail est propre.
git branch develop
git checkout develop
git checkout -b documentation
git branch
git branch develop crée la branche sans s’y placer ;
git checkout develop s’y place.
git checkout -b documentation fait les deux en une
commande, à partir du commit courant, celui de develop.
git branch liste les branches, et marque d’une étoile la
branche courante :
develop
* documentation
master
Ouvrir README.md dans VS Code (File, Open Folder, puis
le dossier projet_2). Sous la première ligne, écrire une
phrase qui décrit le projet : une petite calculatrice en Python, qui
fournit des fonctions mathématiques utiles. À la fin, écrire la ligne
d’image Markdown du logo de l’école. L’archive ne fournit pas l’image :
la ligne montre la syntaxe, et l’image ne s’affiche pas dans
l’aperçu.
# Geo Calculatrice
Une petite calculatrice en Python, qui fournit des fonctions mathématiques utiles.

Enregistrer le fichier (Ctrl + S), puis,
dans le terminal :
git status
git diff
git add README.md
git commit -m "description du projet"
À noter : ce que git diff affiche avant
le git add, et le signe qui commence les lignes
ajoutées.
developgit checkout develop
git merge documentation
git llog
À noter : le mot que git merge affiche
à sa deuxième ligne.
Vérification :
* d3c6642 (HEAD -> develop, documentation) description du projet
* 1bab660 (master) ajout du README
main_codeÀ faire : depuis
develop, créermain_code; y créersrc/main.pyavec le contenu demain_base.py; faire un commit ; revenir surdevelop.À obtenir : le commit
affichage du titresurmain_code, et le dossiersrcabsent quand on est revenu surdevelop.
git checkout -b main_code
mkdir src
cp ../../../2b_branches/depart/main_base.py src/main.py
python src/main.py
Le chemin ../../../2b_branches/depart/main_base.py
remonte de projet_2 à travail, puis à
2a_premier_depot, puis à cours2, et redescend
dans le dossier du TD 2b. La commande cp fait ce que
demande la question 11 : copier le contenu de main_base.py
dans src/main.py. Le fichier peut aussi être créé dans VS
Code et le texte copié à la main.
Vérification : python src/main.py
affiche le titre :
Geo Calculatrice
**********
git add src
git commit -m "affichage du titre"
git checkout develop
ls
À noter : ce que ls affiche sur
develop, et si le dossier src en fait
partie.
operationsÀ faire : depuis
develop, créeroperations; y créersrc/operations.pyavec les quatre fonctions ; faire un commit ; revenir surdevelop.À obtenir : le commit
ajout des quatre opérationssuroperations.
git checkout -b operations
mkdir src
La branche operations part de develop, qui
ne contient pas encore src/main.py : le dossier
src n’existe pas sur cette branche, et
mkdir src le crée. Créer ensuite
src/operations.py dans VS Code, avec les quatre fonctions
de la question 15 :
def add(a, b):
return a + b
def mult(a, b):
return a * b
def neg(a):
return -a
def inv(a):
return 1 / a| Fonction | Ce qu’elle renvoie |
|---|---|
add(a, b) |
la somme de a et b |
mult(a, b) |
le produit de a et b |
neg(a) |
l’opposé de a |
inv(a) |
l’inverse de a |
Enregistrer, puis :
git add src
git commit -m "ajout des quatre opérations"
git checkout develop
developÀ faire : sur
develop, fusionnermain_code, afficher le graphe, puis fusionneroperations, et afficher le graphe.À obtenir : un commit de fusion
Merge branch 'operations' into develop, qui a deux parents.
git merge main_code
git llog
Mise à jour d3c6642..a655591
Fast-forward
src/main.py | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 src/main.py
git merge operations
Git ouvre un éditeur dans le terminal, avec un message déjà écrit :
Merge branch 'operations' into develop. Sous Windows, c’est
vim. Pour accepter le message et quitter : taper Échap,
puis :wq, puis Entrée. Ne pas fermer la fenêtre du
terminal, ce qui laisserait la fusion inachevée.
Merge made by the 'ort' strategy.
src/operations.py | 14 ++++++++++++++
1 file changed, 14 insertions(+)
create mode 100644 src/operations.py
Vérification : git llog affiche le
graphe suivant ; les identifiants diffèrent d’un poste à l’autre.
* 482fb9c (HEAD -> develop) Merge branch 'operations' into develop
|\
| * 4a4a187 (operations) ajout des quatre opérations
* | a655591 (main_code) affichage du titre
|/
* d3c6642 (documentation) description du projet
* 1bab660 (master) ajout du README
ls src affiche maintenant main.py et
operations.py.
Cette section se lit après avoir fait les étapes.
git diff afficheAvant le git add, git diff compare le
fichier modifié au dernier commit. Les lignes ajoutées commencent par
+, et la première ligne du fichier, inchangée, est reprise
sans signe pour situer la modification. Après le git add,
git diff n’affiche plus rien : la modification est dans la
zone de préparation, et git diff --staged
l’afficherait.
Revenu sur develop à l’étape 2, ls
n’affiche plus que README.md : le dossier src
a disparu. Il n’est pas perdu : il est enregistré dans le commit de
main_code, et git checkout main_code le fait
réapparaître. Changer de branche remplace les fichiers du dossier de
travail par ceux du dernier commit de la branche. C’est aussi pourquoi
src doit être recréé à l’étape 3 : la branche
operations part d’un commit qui ne le contient pas.
Le premier merge affiche Fast-forward, une
avance rapide : develop n’avait reçu aucun
commit depuis la création de main_code. Il n’y avait rien à
réunir, et git a déplacé le nom develop sur le dernier
commit de main_code, sans créer de commit. Le merge de
l’étape 1 était de la même sorte.
Le second merge crée un commit de fusion.
Entre-temps, develop avait avancé avec le premier merge, et
operations avait reçu son propre commit : les deux branches
avaient chacune un commit que l’autre n’avait pas. Le commit de fusion a
deux parents, a655591 et 4a4a187, ce que le
graphe dessine par |\ au-dessus et |/ en
dessous. Il contient les fichiers des deux branches :
main.py et operations.py.
Le projet suit l’organisation décrite dans « Lire et tenir un dépôt »
: master n’a pas bougé depuis le TD 2a,
develop réunit le travail, et chaque tâche a eu sa branche.
master recevra la version terminée au TD 2e.