clement13.net
Photo d’origine : Vue plongeante sur un grand faisceau de voies et un atelier ferroviaire sous un ciel nuageux.
Description
Vue plongeante sur un grand faisceau de voies et un atelier ferroviaire sous un ciel nuageux.
Source
Telecineguy · page d’origine
Licence
CC0 Domaine public
Photo d’origine, non retouchée. L’arrière-plan en est une version stylisée par le site.

Panorama des systèmes de gestion de source

Comprendre ce qu'est une gestion de source (GDS) et pourquoi elle est la colonne vertébrale de tout projet, y compris data/BI.

Guide≈ 10 min de lectureVérifiéContrôle effectuéLes faits, chiffres et références ont été contrôlés au regard des sources citées dans la fiche.Rédaction assistée par IA ; sources citées en bas de page. Une erreur ? Signalez-la via le site clement13.net.Lecture
En bref
  • Comprendre ce qu'est une gestion de source (GDS) et pourquoi elle est la colonne vertébrale de tout projet, y compris data/BI.
  • Distinguer centralisé et distribué, verrouillage pessimiste et fusion optimiste, snapshots et deltas.
  • Situer CVS, SVN, Perforce, Mercurial, Plastic SCM, Fossil, TFVC et Git dans l'histoire et dans leurs usages actuels.
  • Savoir ce qu'est un objet versionné, un hachage, un commit, une branche.
  • Disposer d'une grille de choix notée /5 pour décider de l'outil selon le contexte.
Sur cette page

Niveau : 🟢→🟡

Pourquoi une GDS#

🟢 Niveau novice

Sans GDS, on versionne par copie de dossiers (rapport_v2_final_VRAI.pbix). Cela échoue de quatre façons : on ne sait pas qui a changé quoi, on ne peut pas comparer deux états, on s'écrase à plusieurs, on ne peut pas reconstituer ce qui a été livré à un client il y a deux ans. Une GDS apporte :

  1. Historique : chaque modification est enregistrée avec auteur, date, message.
  2. Retour arrière : revenir à n'importe quel état passé.
  3. Travail parallèle : branches, fusions.
  4. Traçabilité : relier une modification à un ticket, un build, une livraison (voir CI/CD).
  5. Audit : prouver ce qui a été modifié, par qui, avant telle mise en production.
🧪 Exemple

Un client signale qu'un indicateur de couverture de visites est faux depuis la version livrée en mars. Avec une GDS et des tags de release, on retrouve en minutes la version exacte du script SQL livré, on la compare à l'actuelle (diff), et on identifie la modification fautive. Sans GDS, on interroge la mémoire de l'équipe.

Vocabulaire minimal#

Terme Sens Équivalent TFVC
Dépôt (repository) Base contenant tout l'historique Collection / team project (serveur)
Copie de travail Les fichiers sur votre disque Workspace
Commit Enregistrement d'un ensemble cohérent de modifications Changeset (check-in)
Branche Ligne de développement parallèle Branche (dossier versionné)
Fusion (merge) Réunir deux lignes Merge
Tag Nom fixe sur un état Label
Mise de côté Sauvegarde non validée Shelveset (Git : stash)
Conflit Deux modifications incompatibles du même endroit Conflit

Les termes sont repris dans le glossaire.

Centralisé contre distribué#

🟢 Niveau novice

Centralisé : un serveur unique détient l'historique. Le poste client n'a que la version demandée plus des métadonnées. On a besoin du serveur pour la plupart des opérations (historique, commit, branche). Exemples : CVS, SVN, Perforce, TFVC.

Distribué : chaque poste détient le dépôt complet, historique compris. Le commit est local ; on synchronise ensuite avec un ou plusieurs dépôts distants (push, pull). Exemples : Git, Mercurial, Fossil, Plastic SCM (mode distribué).

Centralisé                         Distribué
   [Serveur]                        [Dépôt A] <--> [Dépôt de référence] <--> [Dépôt B]
   /   |   \                          (historique complet partout)
 Poste Poste Poste                 
 (copie)(copie)(copie)
Critère Centralisé Distribué
Travail hors ligne Limité (workspaces locaux TFVC : partiel) Complet
Commits atomiques et fréquents Chaque commit est publié Local d'abord, publié ensuite
Contrôle d'accès fin par chemin Natif (Perforce, TFVC) Au niveau du dépôt, moyennes ruses sinon
Gros dépôts / gros binaires Souvent meilleur (on ne clone pas tout) Coûteux sans partial clone/LFS
Sauvegarde Un point à protéger Naturellement répliqué
Branches Parfois lourdes (copie d'arborescence) Triviales (un pointeur)
⚠️ Piège

« Distribué » ne veut pas dire « sans serveur de référence ». Dans une entreprise, un dépôt distant fait autorité (GitHub, Azure Repos, GitLab). Symptôme : une équipe qui croit que git commit = « c'est sauvé pour tout le monde ». Cause : le commit est local. Remède : push + protection de branche + sauvegarde du serveur.

Verrouillage contre fusion#

🟢 Niveau novice

Deux personnes modifient le même fichier. Deux philosophies :

  • Verrouillage pessimiste (lock-modify-unlock) : on « réserve » le fichier ; personne d'autre ne peut l'éditer. Avantage : pas de conflit. Inconvénient : blocage, oublis de déverrouillage, travail impossible en parallèle. Adapté aux fichiers binaires non fusionnables (.pbix, .docx, images).
  • Fusion optimiste (copy-modify-merge) : chacun édite sa copie ; à l'enregistrement, l'outil fusionne et signale les conflits. Adapté aux fichiers texte.

TFVC propose les deux : checkout verrouillant (/lock:checkout) ou non (/lock:none), selon la configuration du workspace et du projet. Git ne connaît que la fusion ; pour les binaires, Git LFS apporte un verrouillage (git lfs lock) par convention de dépôt. Perforce et SVN gèrent les deux.

🧪 Exemple BI

Un rapport Power BI enregistré en .pbix est un zip binaire : deux personnes ne peuvent le fusionner. Le format projet PBIP (dossiers de TMDL et JSON texte) rend la fusion possible : voir 06.

Snapshots contre deltas#

🟡 Niveau pratique

Deux manières de stocker l'historique :

  • Deltas (CVS, SVN, TFVC, Perforce, beaucoup de systèmes historiques) : pour chaque fichier, on stocke la version de base puis les différences successives. Compact pour de petites modifications, mais reconstituer une ancienne version impose de rejouer les deltas ; la notion de « version du dépôt » est un numéro global (révision, changeset).
  • Snapshots (Git) : chaque commit désigne un instantané complet de l'arborescence. Les fichiers inchangés sont simplement réutilisés par référence (même objet). Git compresse ensuite en packfiles, en calculant des deltas a posteriori entre objets proches : le modèle logique est snapshot, le stockage physique est mixte.

La différence logique compte : en modèle snapshot, comparer deux versions quelconques est direct ; le renommage n'est pas enregistré, il est déduit par similarité de contenu (Git) alors que TFVC enregistre explicitement l'opération « rename » (d'où sa capacité à suivre l'historique d'un fichier déplacé, au prix de rigidité).

Objets et hachage#

🟡 Niveau pratique

Un système moderne manipule peu de concepts : un objet contenu (le fichier), une arborescence (la liste des noms et objets), un commit (l'arborescence + parents + auteur + message). Dans Git, chaque objet est identifié par un hachage de son contenu (SHA-1 historiquement, SHA-256 en option). Conséquences :

  • Intégrité : modifier un objet change son identifiant ; toute corruption est détectable.
  • Déduplication : deux fichiers identiques n'occupent qu'un objet.
  • Historique infalsifiable en pratique : l'identifiant d'un commit dépend de ses parents ; réécrire le passé change tous les identifiants suivants.
  • Identifiants non séquentiels : pas de « révision 4217 », mais b9a971b. Les numéros séquentiels de TFVC (changeset 45815) sont plus lisibles pour les humains et les rapports.
⚠️ Piège

SHA-1 a des collisions démontrées de façon académique ; Git utilise une variante durcie qui les détecte. L'option SHA-256 existe mais l'interopérabilité reste limitée (état 2026-10 : à vérifier selon l'hébergeur). Ne basez pas une exigence de sécurité sur le seul hachage : utilisez la signature des commits/tags (voir 02).

Historique des outils#

🟡 Niveau pratique

Période (ordre de grandeur) Génération Outils Idée dominante
Années 1970-80 Locale, fichier par fichier SCCS, RCS Historique d'un fichier
Années 1990 Client-serveur, projet CVS, PVCS, Visual SourceSafe Dépôt partagé, fusion optimiste (CVS) ou verrouillage (VSS)
Années 2000 Centralisé « atomique » Subversion (SVN), Perforce, TFS/TFVC (2005), ClearCase Commits atomiques, révisions globales, branches par copie
Milieu 2000 Distribué BitKeeper, Git, Mercurial, Bazaar, Darcs Dépôt complet local, branches légères
2010-2020 Domination de Git, plateformes GitHub, GitLab, Bitbucket, Azure Repos Git Pull requests, CI intégrée
2020+ Échelle et mono-dépôts Git avec partial clone, VFS/Scalar ; Perforce chez les studios de jeu Gros dépôts, gros binaires

Repère solide : Git est créé en 2005 par Linus Torvalds pour le noyau Linux ; TFVC naît avec Team Foundation Server 2005 et Visual SourceSafe en est le prédécesseur de fait chez Microsoft. Microsoft a ensuite ajouté Git à TFS (2013) et fait de Git le choix par défaut.

Les systèmes un par un#

🟡 Niveau pratique

CVS — Ancêtre. Pas de commits atomiques, pas de renommage, branches coûteuses. À migrer si rencontré.

Subversion (SVN) — Centralisé, commits atomiques, révisions globales, branches et tags par copie bon marché (/trunk, /branches, /tags par convention). Droits par chemin. Encore répandu en héritage. Bon sur les gros binaires, verrous disponibles.

Perforce Helix Core (rebaptisé Perforce P4 en 2025) — Centralisé, très performant sur dépôts énormes et binaires (jeu vidéo, matériel). Workspaces, changelists, shelving, verrouillage de fichiers, droits fins par chemin. Existe un mode Git (Helix4Git) pour coexistence. Licence commerciale.

Mercurial — Distribué, interface plus cohérente que Git, mais écosystème largement réduit (Bitbucket a retiré Mercurial en 2020). Reste utilisé dans certaines grandes organisations. Maintenance existante, adoption en baisse.

Plastic SCM (Unity Version Control) — Distribué/centralisé hybride, bon sur binaires et art de jeu, interface graphique soignée, branches par tâche. Racheté par Unity, rebaptisé Unity Version Control. Écosystème de niche.

Fossil — Distribué, un seul exécutable, inclut ticketing, wiki et forum dans le dépôt (SQLite). Idéal pour petits projets autonomes ; peu adopté en entreprise.

TFVC (Team Foundation Version Control) — Centralisé, intégré à Azure DevOps Server / Services et Visual Studio. Changesets numérotés, branches, shelvesets, check-in policies, liaison native aux work items, droits fins par chemin. Voir 03.

Git — Distribué, modèle objet par snapshots, branches triviales, écosystème inégalé. Voir 02.

Grille de notation#

🟡 Niveau pratique

Notes /5 d'expert, contexte : équipe de 5 à 30 développeurs, projet mêlant code, SQL et BI, gros dépôt de quelques Go, dépôt hébergé en entreprise. Ce sont des appréciations, pas des mesures (voir NOTATION).

Critère Git TFVC SVN Perforce Mercurial Plastic/Unity VC
Courbe d'apprentissage 2/5 4/5 4/5 3/5 3/5 3/5
Performance sur gros dépôts 3/5 4/5 3/5 5/5 3/5 4/5
Branches / fusions 5/5 3/5 2/5 3/5 4/5 4/5
Traçabilité / audit 4/5 4/5 3/5 4/5 4/5 3/5
Granularité des droits 2/5 5/5 4/5 5/5 2/5 3/5
Fichiers binaires / volumineux 2/5 (LFS : 3/5) 4/5 4/5 5/5 2/5 5/5
Intégration CI/CD 5/5 3/5 3/5 3/5 2/5 2/5
Adéquation SQL/BI 4/5 3/5 3/5 3/5 3/5 2/5
Pérennité de l'écosystème 5/5 2/5 2/5 4/5 1/5 2/5

Justifications clés : Git perd en apprentissage (index, rebase, HEAD détaché) mais gagne tout le reste de l'écosystème ; TFVC est simple et fin sur les droits, mais son avenir est contraint (voir 03) ; Perforce domine les dépôts massifs ; Mercurial a un bon modèle mais peu de plateformes.

Choisir#

🔴 Niveau expert

Arbre de décision simplifié :

Nouveau projet ?Git sur plateforme d'entrepriseSystème actuel ?Contraintes fortesdroits par chemin / énormes binaires ?Rester TFVC ou Perforceplanifier la sortieMigrer vers Git par étapesMigrer vers Gitouinon, existantTFVCouinonSVN / CVS
Survolez ou touchez un élément pour en lire le détail.

Critères de décision à poser avant le choix de l'outil :

  1. Taille et nature des fichiers : majoritairement texte (SQL, TMDL, JSON) → Git excellent. Majoritairement binaires de centaines de Mo → Perforce/Plastic, ou Git + LFS avec discipline.
  2. Modèle de droits : séparer l'accès par dossier pour des sous-traitants ? Git exige des dépôts séparés ; TFVC le fait nativement.
  3. Compétences : qui forme les juniors ? Le marché de l'emploi et la documentation penchent massivement pour Git.
  4. Chaîne de livraison : pipelines, revues de code par pull request, politiques de branche : Git est le chemin le moins coûteux.
  5. Horizon de support : une GDS en fin d'investissement fait porter un risque de dette.
  6. Coût de migration : historique à conserver ? liens work items ? labels ? droits ?
✅ Bonne pratique

Pour un nouveau projet data/BI en 2026, Git par défaut, avec une plateforme qui impose pull requests et builds. Pour un projet TFVC en production, ne migrez pas « parce que c'est la mode » : migrez quand un bénéfice précis est identifié (revues de code, CI, recrutement, pérennité) et planifié (04).

🤖 IA

Les assistants de code (Copilot et équivalents) sont entraînés d'abord sur Git et ses commandes ; leur aide sur TFVC (tf.exe) est moins fiable. C'est un critère de choix indirect, mais réel. Détail dans 02.

Pièges transverses#

🔴 Niveau expert

  • ⚠️ Piège — Confondre sauvegarde et versionnement : une GDS n'est pas une sauvegarde sans réplication ; sauvegardez le serveur (base de collection TFVC, dépôts distants).
  • ⚠️ Piège — Commits fourre-tout : un commit mélangeant correctif, reformatage et nouvelle fonctionnalité rend l'audit et le revert inutilisables. Un commit = un sujet.
  • ⚠️ Piège — Données dans le dépôt : tables de référence volumineuses, exports, sauvegardes .bak, secrets. Voir 06.
  • ⚠️ Piège — Branches longues : plus une branche vit, plus la fusion coûte (le coût croît plus vite que le temps). Voir 05.
  • ⚠️ Piège — Encodage et fins de ligne non normalisés : des diffs « de tout le fichier » et des accents corrompus. Voir 06.

Voir aussi#

✻ Rédigé par Claude Sonnet 5.5