Introduction au

versionnement

avec GIT

Creative Commons “Attribution-Share Alike” license icon

Partie 1

Benoît Seignovert
2024-11-12

Les objectifs de cette session

(1) Comprendre comment marche GIT

(2) Versionner son premier projet

(3) Travailler sur plusieurs versions en parallèle

(4) Résoudre des conflits

Paradigme du versionnement

  • Historique des modifications
  • Travail sur plusieurs versions en parallèles (potentiellement à plusieurs)
  • Résolution des conflits

Gestion de versions

expliqué simplement

Sans gestion de versions :

Avec gestion de versions :

Thèse-v1.txt

V2-Thèse.txt

V2-Thèse2.0.txt

V3-Thèse-final.txt

Thèse.txt

… mais avec un historique de versions

Outils de gestion de versions

Bazaar

Outils de gestion de versions

Bazaar

Historique de GIT

Créateur : Linus Torvalds

Première publication : 2005

Licence : GPLv2

75 000 contributions

1 700 contributeurs

1 000 versions publiées

Écrit en : C, C++, Perl, Tcl et Python

What are the primary version control systems you use?

Git

SVN

I don't use one

Mercurial

97 %

6 %

1 %

1 %

53 374 réponses

de développeurs professionels

Généralités

  • Indépendant du système d'exploitation :
  • Language agnostique : texte, Python, R, C, …
  • Versionnement de fichiers de type textuel :
a.txt
aaaaa
a.txt
a.txt
a.txt
aaaaa
ccccc
aaaaa
bbbb
ccccc
aaaaa
bbbb
ccc
cc
+aaaaa
+ccccc
+bbbb
-cc

Initialisation

Ajout c x5

Ajout b x4

Suppression c x2

(natif)

(natif)

(à installer)

log
.git
.txt, .csv, .svg, .py, .R, …

Éviter au maximum de versionner des binaires

ou des fichiers encapsulés !

⚠️

.docx, .xlsx, .pptx, …
.jpg, .png, .mp3, .avi, …
img.jpg
010011001000011
img.jpg
img.jpg
img.jpg
+01001…

Initialisation

Resize

Crop

log
.git
101011110101010
+10101…
111011010001110
+11101…
011101110110100

💥

La réalité… 🤢

…c'est possible mais avec d'autres outils 🫣

(non abordé ici)

Comment ça marche concrètement ?

main
new_branch

commit

a9bcb5ff
af3ad665
1dd6bccd
6d3e2ad4
ffe399e5
e52c486b
80a77b42
903d401c
146d4ee5
050b86b4

tag

v1
v2

merge

init

checkout

(hash)

Let's get started !

(principalement pour Windows)

git --version
> git version 2.47.0

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

Configuration minimale ⚙️

à la première utilisation uniquement

git init

git add a.txt
git commit -m "Initialisation du project"

git add b.txt
git commit -m "Ajout du fichier B"

git add a.txt c.txt
git commit -m "Ajout du fichier C et modification de A"

Gestion de version en ligne de commande 🤓

🚀 Live demo ✨

avec ungit

Projet initialement vide

/chemin/vers/mon/projet/git-demo

Initialisation du projet

git init

Création d'un premier fichier

git add 01-intro.txt

Premier message  de commit 🥳

git commit -m "Premier commit"

Ajout et modification

git add 01-intro.txt 02-examples.txt

Second commit

git commit -m "Ajout d'un example"

Ajout d'une image

éviter de versionner les binaires!

Création d'un gitignore

git add .gitignore

Commit du gitignore

git commit -m "Ajout gitgnore"

Tag version 1

git tag v1

Ajout d'un fichier de démo

git add 01-intro.txt 03-demo.txt

Commit du fichier démo

git commit -m "Ajout fichier demo"

Ajout contenu démo

git add 03-demo.txt

Commit contenu démo

git commit -m "Ajout contenu demo"

Retour à la version 1

git checkout v1

Nouvelle branche de corrections

git checkout -b correction-v1

Implementation des corrections

git add 01-intro.txt

Commit des corrections

git commit -m "Correction typos"

Fusion de la branche corrections (sans conflits)

git checkout main

Fusion de la branche corrections (sans conflits)

git merge corrections-v1

Fusion de la branche examples (avec conflits)

TBD

Conclusions

Partie 1

  • Suivi des modifications par le gestionnaire de version et pas dans les noms de fichiers
  • En 2024, GIT est l'outil dominant pour le versionnement
  • Le versionnement fonctionne très bien pour les fichiers de type textuel
  • Le versionnement fonctionne mal pour les fichiers binaires et encapsulés

Conclusions

main
new_branch

commit

a9bcb5ff
af3ad665
1dd6bccd
6d3e2ad4
ffe399e5
e52c486b
80a77b42
903d401c
146d4ee5
050b86b4

tag

v1
v2

merge

init

checkout

(hash)

Schéma résumé

Prochaines sessions

Mercredi 13

Jeudi 14

Vendredi 15

Héberger ses codes sources sur une forge logicielle (Gitlab/Github)

Collaborer sur un projet open-source

Déployer des applications et des logiciels grâce à l'intégration continue

(13-14h)