Deux philosophies
Subversion (SVN), sorti en 2000, est un système de contrôle de version centralisé. Le dépôt vit sur un serveur; les clients font checkout, commit au serveur, et update depuis lui. Git, sorti en 2005, est distribué.
Modèles mentaux
Le modèle mental de SVN est l'armoire à dossiers : un endroit partagé. Le modèle de Git est plus comme l'email : chaque participant a l'historique complet.
Ce que SVN a réussi
- Simple à expliquer.
- Contrôle d'accès granulaire au niveau répertoire.
- Verrouillage de fichiers pour les binaires non mergeables.
- Numéros de révision linéaires et monotones.
- Stable pour de très grands dépôts à contenu mixte.
Ce que Git a réussi
- Branches et merges bon marché et rapides.
- Historique local complet.
- Modèle distribué résiste aux pannes serveur.
- Adressage par contenu SHA détecte la corruption.
- L'écosystème est vaste.
Commandes quotidiennes comparées
# SVN
svn checkout https://svn.example.com/repo
svn update
svn add file.txt
svn commit -m "Add file"
svn log
# Git
git clone https://git.example.com/repo.git
git pull
git add file.txt
git commit -m "Add file"
git push
git log
Là où les philosophies mordent
Dans SVN, "commit" signifie publier à tous immédiatement. Dans Git, "commit" est local; "push" publie.
Branching
# Branche SVN
svn copy https://svn.example.com/repo/trunk \
https://svn.example.com/repo/branches/feature -m "Branch"
# Branche Git
git checkout -b feature
Pourquoi Git a gagné des parts de marché
Trois facteurs : effets de réseau de GitHub depuis 2008; la dominance de Linux; et la montée du cloud et du développement à distance.
Quand SVN reste un choix sensé
- Grands dépôts binaires où merger est impossible.
- Environnements contrôlés avec accès strict par répertoire.
- Pipelines de tooling établis.
- Équipes mono-site qui ne travaillent jamais offline.