Git, dépôts et commits
Git est un logiciel de gestion de versions : il garde l'historique de tes fichiers. Un dépôt est un dossier suivi par Git (il contient un dossier caché .git). Un commit est une photo de tes fichiers à un instant, avec un message qui dit ce qui a changé. Git s'installe depuis son site officiel (git-scm.com) ; dans Thonny ou VS Code, il s'utilise aussi depuis le terminal.
Le cycle en trois zones. Tu modifies un fichier dans ton dossier de travail ; git add le place dans l'index (ce qui partira dans le prochain commit) ; git commit enregistre la photo dans l'historique.
La démonstration réelle (dossier du TP, identité inventée) :
Dans le terminal
$ git init -b main
Initialized empty Git repository in tp-croissance/.git/
$ git config user.name "Yanis"
$ git config user.email "yanis@example.org"
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.venv/
__pycache__/
croissance.csv
requirements.txt
tp_croissance.py
git init crée le dépôt (-b main nomme la ligne principale de l'historique main, comme sur les services en ligne). git config donne le nom et l'adresse inscrits dans chaque commit : sur un dépôt public, tout le monde les voit ; choisis ce que tu acceptes de montrer. git status dit où en est chaque fichier : ici, tous sont « non suivis » (untracked). Selon la langue de ton système, Git peut afficher ces messages en français.
Ce qu'on ne versionne pas : .gitignore. Un fichier texte .gitignore liste ce que Git doit ignorer :
Contenu de .gitignore
.venv/
__pycache__/
L'environnement virtuel se recrée avec requirements.txt (épisode 14) ; __pycache__ est fabriqué par Python. Jamais de mot de passe, de clé, ni de données personnelles dans un dépôt : même effacés plus tard, ils restent dans l'historique.
Dans le terminal
$ git status --short
?? .gitignore
?? croissance.csv
?? requirements.txt
?? tp_croissance.py
$ git add .gitignore croissance.csv tp_croissance.py requirements.txt
$ git status --short
A .gitignore
A croissance.csv
A requirements.txt
A tp_croissance.py
$ git commit -m "Lit les mesures et écrit le résumé JSON"
[main (root-commit) 8079c3c] Lit les mesures et écrit le résumé JSON
4 files changed, 67 insertions(+)
create mode 100644 .gitignore
create mode 100644 croissance.csv
create mode 100644 requirements.txt
create mode 100644 tp_croissance.py
?? = non suivi ; A = ajouté à l'index ; .venv/ et __pycache__/ ont disparu de la liste. 8079c3c est le début de l'identifiant du commit ; chez toi, il sera différent.
Voir ce qui a changé, puis l'historique. Yanis modifie la dernière ligne de son script :
Dans le terminal
$ git status --short
M tp_croissance.py
$ git diff
diff --git a/tp_croissance.py b/tp_croissance.py
index a5c461b..745d1a2 100644
--- a/tp_croissance.py
+++ b/tp_croissance.py
@@ -43,4 +43,4 @@ with open(FICHIER_RESUME, "w", encoding="utf-8") as fichier:
json.dump(resume, fichier, ensure_ascii=False, indent=2)
for eclairage, valeurs in resume.items():
print(f"{eclairage:<8} n={valeurs['n']} moyenne={valeurs['moyenne']:>6.2f} écart type={valeurs['ecart_type']:>5.2f}")
-print(f"Résumé écrit dans {FICHIER_RESUME.name}")
+print(f"Résumé écrit dans {FICHIER_RESUME.name} ({len(resume)} éclairages)")
$ git add tp_croissance.py
$ git commit -m "Affiche le nombre d'éclairages résumés"
[main 54b0142] Affiche le nombre d'éclairages résumés
1 file changed, 1 insertion(+), 1 deletion(-)
$ git log --oneline
54b0142 Affiche le nombre d'éclairages résumés
8079c3c Lit les mesures et écrit le résumé JSON
M = modifié ; git diff montre les lignes retirées (-) et ajoutées (+) depuis le dernier commit ; git log liste les commits, du plus récent au plus ancien (git log -1 détaille le dernier : auteur, date, message).
Un bon message de commit dit ce que fait le changement, en une phrase courte : « Corrige l'écart type (stdev au lieu de pstdev) » plutôt que « modif » ou « ça marche enfin ». Un commit = un changement qui a un sens, testé.
Le dépôt distant. Un dépôt distant est une copie de ton dépôt sur un service en ligne : GitHub, GitLab ou Codeberg, par exemple. Git n'est pas GitHub : Git est le logiciel, sur ton ordinateur ; ces services hébergent des dépôts. Démonstration réelle, avec un dépôt distant simulé dans un dossier voisin (sur un service, tu remplaces ../distant.git par l'adresse donnée par le service) :
Dans le terminal
$ git remote add origin ../distant.git
$ git remote -v
origin ../distant.git (fetch)
origin ../distant.git (push)
$ git push -u origin main
To ../distant.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
$ git clone distant.git copie-awa
Cloning into 'copie-awa'...
done.
$ ls copie-awa
croissance.csv
requirements.txt
tp_croissance.py
git remote add enregistre l'adresse du dépôt distant sous le nom origin ; git push y envoie tes commits ; git clone crée une copie complète, avec tout l'historique : c'est ce que fera ton enseignante. Ensuite, après chaque commit, un simple git push suffit. La première fois, le service te demande de te connecter : suis sa page d'aide.
Avant de créer un compte. GitHub demande d'avoir au moins 13 ans (et plus si la loi de ton pays l'exige) ; les conditions d'utilisation de Codeberg ne fixent pas d'âge minimum ; lis celles de GitLab avant de t'inscrire. Si tu es mineur, crée ton compte avec un adulte ; ton enseignant ou ton établissement peut aussi te fournir un espace. Choisis un dépôt privé tant que ton TP n'est pas rendu, sauf consigne contraire : un dépôt public est visible de tous, copie comprise.