Git : gérer les versions et travailler en équipe
Quitter

Leçon 1 sur 9 · Fondamentaux

Pourquoi un gestionnaire de versions ? Installer et configurer Git

35 min Node.js 22 (Debian, git, npm, python3)

Objectif

Comprendre le problème que règle un gestionnaire de versions, installer Git sur votre poste et le configurer correctement (identité, branche par défaut, éditeur) pour que vos premiers commits soient propres dès le départ.

L'essentiel

  • Un gestionnaire de versions garde l'historique de chaque modification d'un projet : qui, quoi, quand, pourquoi. On peut revenir en arrière, comparer et travailler à plusieurs sans s'écraser.
  • Git est distribué : chaque développeur possède une copie complète de l'historique, et peut travailler sans connexion.
  • Avant le premier commit, réglez au minimum user.name et user.email : ils sont gravés dans chaque commit.
  • git config lit et écrit la configuration à trois niveaux : --system (toute la machine), --global (votre compte), --local (un seul dépôt). Le plus proche gagne.
  • git init transforme un dossier en dépôt : il crée un sous-dossier caché .git qui contient tout l'historique.

1. Le problème : « index-final-v3-OK-vraiment.html »

Imaginez l'agence Atlas Web, à Casablanca (quartier Maârif) : quatre développeurs construisent le site d'une chaîne de pâtisseries. Sans outil, voici ce qui arrive :

  • Youssef envoie index.html par WhatsApp à Salma, qui le modifie pendant que lui continue de travailler sur sa copie. Le soir, il faut fusionner à la main.
  • Le client demande « remettez le bandeau d'avant-hier ». Personne ne sait plus quelle version c'était.
  • Un bug apparaît en production. Qui a changé quoi, et quand ? Mystère.
  • Le dossier partagé contient site-final.zip, site-final-v2.zip, site-final-corrige-ilyas.zip…

Un gestionnaire de versions répond à toutes ces questions :

Besoin Ce que fait Git
Revenir en arrière chaque état enregistré (un commit) peut être restauré
Savoir qui a changé quoi chaque commit porte un auteur, une date et un message
Travailler à plusieurs chacun travaille sur sa branche, puis on fusionne
Essayer sans risque une branche d'essai se jette si l'idée ne marche pas
Sauvegarder chaque copie du dépôt (poste, serveur GitHub ou GitLab) contient tout l'historique

Centralisé ou distribué

Les anciens outils (CVS, Subversion) étaient centralisés : l'historique vivait sur un seul serveur, et sans réseau on ne pouvait rien enregistrer. Git, créé en 2005 par Linus Torvalds pour développer le noyau Linux, est distribué : votre ordinateur contient le dépôt complet. Vous faites des commits dans le train Casa-Rabat sans connexion, et vous les partagez plus tard.

Git n'est pas GitHub. Git est le logiciel, libre, installé sur votre poste. GitHub, GitLab ou Bitbucket sont des services qui hébergent des dépôts Git et ajoutent des outils autour (revue de code, tickets, CI/CD). Vous les verrez au niveau 2.

2. Installer Git

Git est très souvent déjà présent. Vérifiez d'abord :

git --version
# git version 2.47.2

Si la commande est introuvable, installez-le avec le gestionnaire de paquets de votre système :

# Debian, Ubuntu
sudo apt update && sudo apt install git

# Rocky Linux, AlmaLinux, RHEL, Fedora
sudo dnf install git

# macOS (outils de ligne de commande d'Apple, ou Homebrew)
xcode-select --install
brew install git

Sous Windows, installez « Git for Windows » depuis le site officiel de Git : il fournit git, un terminal Git Bash et un gestionnaire d'identifiants. Vous pouvez aussi travailler sous WSL (un Ubuntu dans Windows) et installer Git avec apt, comme sur un serveur.

Se documenter

git help                 # les commandes les plus utilisées
git help config          # le manuel complet d'une commande (équivaut à man git-config)
git config -h            # le résumé court des options

La documentation officielle est aussi en ligne, commande par commande, sur le site de Git.

3. Configurer son identité

Chaque commit enregistre un nom et une adresse e-mail. Sans eux, Git refuse de committer ou invente une identité à partir du nom de la machine, ce qui donne des historiques illisibles (« root@pc-salle3 »).

git config --global user.name "Salma Bennani"
git config --global user.email "salma@agence-atlas.ma"

Utilisez l'adresse de votre compte GitHub ou GitLab : c'est grâce à elle que le site relie vos commits à votre profil.

Vérifiez :

git config --global user.name
# Salma Bennani

git config --list --show-origin
# file:/root/.gitconfig   user.name=Salma Bennani
# file:/root/.gitconfig   user.email=salma@agence-atlas.ma

Les trois niveaux de configuration

Option Fichier Portée
--system /etc/gitconfig tous les utilisateurs de la machine
--global ~/.gitconfig (ou ~/.config/git/config) votre compte, tous vos dépôts
--local (par défaut dans un dépôt) .git/config du dépôt ce dépôt seulement

Le niveau le plus précis l'emporte. Cas typique : un freelance qui travaille pour Atlas Web et pour ses propres clients garde son adresse personnelle en global, et met l'adresse de l'agence uniquement dans les dépôts de l'agence :

cd ~/projets/patisserie-atlas
git config user.email "karim@agence-atlas.ma"       # --local : ce dépôt uniquement
git config --show-origin user.email
# file:.git/config   karim@agence-atlas.ma

Le fichier ~/.gitconfig est un simple fichier texte, lisible et modifiable :

[user]
	name = Salma Bennani
	email = salma@agence-atlas.ma
[init]
	defaultBranch = main

4. Les autres réglages utiles

# Nom de la branche créée par git init (sinon « master » sur beaucoup de versions)
git config --global init.defaultBranch main

# Éditeur utilisé pour écrire les messages de commit longs
git config --global core.editor "nano"          # ou "vim", ou "code --wait" pour VS Code

# Couleurs dans le terminal (activées par défaut sur les versions récentes)
git config --global color.ui auto

# Fins de ligne : sous Windows, convertir CRLF/LF automatiquement
git config --global core.autocrlf true          # Windows
git config --global core.autocrlf input         # Linux et macOS

# Des raccourcis personnels (alias)
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

Pour lire ou supprimer un réglage :

git config --global --get core.editor
git config --global --unset alias.st

Fins de ligne. Dans une équipe mixte Windows/Linux, un fichier peut sembler « entièrement modifié » simplement parce que les fins de ligne ont changé. Réglez core.autocrlf dès le départ ; vous verrez au niveau 3 qu'un fichier .gitattributes permet d'imposer la règle à toute l'équipe.

5. Créer son premier dépôt

mkdir -p ~/projets/vitrine
cd ~/projets/vitrine
git init
# Initialized empty Git repository in /root/projets/vitrine/.git/

ls -a
# .  ..  .git

Le dossier .git est le dépôt : historique, branches, configuration locale. Le reste du dossier est votre copie de travail. Ne modifiez jamais .git à la main, et ne le supprimez pas : vous perdriez tout l'historique.

git init accepte aussi un chemin : git init /srv/projets/vitrine crée le dossier si besoin.

Créons un premier fichier et enregistrons-le :

echo '<h1>Pâtisserie Atlas</h1>' > index.html
git status
# On branch main
# No commits yet
# Untracked files:
#   index.html

git add index.html                       # « je veux enregistrer ce fichier »
git commit -m "Premier commit : page d'accueil"
# [main (root-commit) 3f2a9c1] Premier commit : page d'accueil
#  1 file changed, 1 insertion(+)

git log --oneline
# 3f2a9c1 (HEAD -> main) Premier commit : page d'accueil

Vous venez de faire votre premier commit. La leçon suivante explique en détail les trois zones de Git (copie de travail, index, dépôt) et les commandes add, commit, status, log et diff.

6. Le vocabulaire de base

Terme Signification
dépôt (repository) le projet suivi par Git, avec tout son historique (le dossier .git)
commit un instantané enregistré du projet, avec auteur, date et message
hash (ou SHA) l'identifiant unique d'un commit, par exemple 3f2a9c1… (40 caractères, souvent abrégés à 7)
branche une ligne de développement ; main est la branche principale
HEAD « là où vous êtes » : le commit (et en général la branche) actuellement extrait
distant (remote) une autre copie du dépôt, souvent sur GitHub ou GitLab

Pièges fréquents

  • Committer avec une mauvaise identité : vérifiez git config user.email dans chaque nouveau dépôt si vous avez plusieurs comptes. Une adresse qui ne correspond à aucun compte GitHub donne des commits « orphelins ».
  • git init dans le mauvais dossier (votre dossier personnel entier, par exemple) : git status affiche alors des milliers de fichiers. Supprimez simplement le .git créé par erreur avec rm -rf ~/.git, après avoir vérifié le chemin.
  • Confondre Git et GitHub : on peut utiliser Git toute sa vie sans compte GitHub ; un dépôt local est un dépôt complet.
  • Oublier -m : sans message, git commit ouvre l'éditeur configuré. Si c'est vim et que vous êtes perdu, tapez Échap, puis :q! et Entrée pour annuler.

Lab

Dans ce lab (un conteneur Debian avec Git), vous partez d'une machine où Git n'a jamais été configuré :

  1. vous enregistrez votre identité globale ;
  2. vous réglez la branche par défaut sur main ;
  3. vous créez le dépôt /root/vitrine avec git init ;
  4. vous y faites votre premier commit avec un fichier index.html.

Vérifiez votre travail avec git config --list, git status et git log --oneline.

Quiz

  1. Citez deux problèmes concrets qu'un gestionnaire de versions résout dans une équipe.
  2. Que signifie « Git est distribué » ?
  3. Quelle différence entre git config --global et git config --local ? Lequel l'emporte ?
  4. Que contient le dossier .git créé par git init ?
  5. Pourquoi faut-il régler user.email avant le premier commit ?
Réponses
  1. Par exemple : retrouver une ancienne version d'un fichier, savoir qui a modifié quoi et quand, permettre à plusieurs personnes de travailler en même temps sans écraser le travail des autres.
  2. Chaque copie du dépôt contient tout l'historique : on peut committer, consulter le journal ou créer des branches sans serveur ni réseau.
  3. --global s'applique à tous vos dépôts (fichier ~/.gitconfig) ; --local à un seul dépôt (.git/config). Le réglage local l'emporte, car il est plus précis.
  4. Tout le dépôt : l'historique des commits, les branches, les étiquettes et la configuration locale. Le supprimer revient à perdre l'historique.
  5. Parce que l'identité est gravée dans chaque commit et sert à relier les commits à votre compte GitHub ou GitLab ; la corriger après coup oblige à réécrire l'historique.

Sources de référence : documentation officielle de Git (git-scm.com). Texte original MasterLinux.

Exercices pratiques

À réaliser sur Node.js 22 (Debian, git, npm, python3)

Le terminal en ligne ouvre bientôt. En attendant, réalisez ces tâches sur votre machine Linux, une machine virtuelle ou WSL.

  1. Enregistrez votre identité Git pour tout le compte root : un nom (user.name) et une adresse e-mail (user.email) contenant un @. Exemple : Salma Bennani, salma@agence-atlas.ma.
    Afficher un indicegit config --global user.name "Votre Nom" puis git config --global user.email vous@exemple.ma
    Voir la solution
    git config --global user.name "Salma Bennani" && git config --global user.email salma@agence-atlas.ma

    Vérification : test -n "$(git config --global user.name)" && git config --global user.email | grep -q @

  2. Réglez Git pour que tout nouveau dépôt commence sur une branche nommée main (option init.defaultBranch).
    Afficher un indicegit config --global init.defaultBranch main
    Voir la solution
    git config --global init.defaultBranch main

    Vérification : test "$(git config --global init.defaultBranch)" = main

  3. Créez le dossier /root/vitrine et transformez-le en dépôt Git.
    Afficher un indicemkdir -p /root/vitrine puis git init /root/vitrine (ou cd /root/vitrine && git init)
    Voir la solution
    mkdir -p /root/vitrine && git init -q /root/vitrine

    Vérification : test -d /root/vitrine/.git && git -C /root/vitrine rev-parse --is-inside-work-tree >/dev/null 2>&1

  4. Dans /root/vitrine, créez un fichier index.html (une ligne suffit) et enregistrez-le dans un premier commit. Le commit doit être sur la branche main.
    Afficher un indicecd /root/vitrine ; echo '<h1>Atlas Web</h1>' > index.html ; git add index.html ; git commit -m "Premier commit"
    Voir la solution
    cd /root/vitrine && echo "<h1>Atlas Web</h1>" > index.html && git add index.html && git commit -qm "Premier commit : page d accueil"

    Vérification : git -C /root/vitrine log --oneline 2>/dev/null | grep -q . && git -C /root/vitrine ls-files | grep -qx index.html && test "$(git -C /root/vitrine branch --show-current)" = main

Références officielles consultées : Git — git (page principale du manuel) — https://git-scm.com/docs/git ; Git — git-config — https://git-scm.com/docs/git-config ; Git — git-init — https://git-scm.com/docs/git-init ; Git — gittutorial — https://git-scm.com/docs/gittutorial. Texte original MasterLinux.