La différence architecturale
Subversion est centralisé : un serveur tient le dépôt canonique; les clients tiennent des copies de travail. Sans le serveur, vous pouvez éditer des fichiers mais pas commit, log, branch ou merge.
Git est distribué : chaque clone est un dépôt complet.
Ce que "distribué" permet
- Commits offline.
- Expérimentation locale.
- Récupération de désastre.
- Workflows multi-master.
- Découplage du code d'un fournisseur.
Ce que la centralisation permet
- Source unique de vérité.
- Contrôle d'accès par chemin.
- Numéros de révision séquentiels.
- Verrouillage.
Comparaison pratique
# Offline en Git
git commit -m "WIP"
git log
git diff HEAD~5
git checkout -b experiment
# Mêmes opérations en SVN, offline :
svn commit # erreur
svn log # erreur
svn diff -r 100 # erreur
Travail mobile et remote
La décennie entre les apogées de SVN et Git a vu la montée du développement mobile, des trajets en train, des conférences, et plus récemment le travail à distance global.
Récupération de désastre
# Git : récupérer le repo central depuis un clone
git clone --mirror /path/to/laptop/clone backup.git
cd backup.git
git remote add origin git@new-host:repo.git
git push --mirror origin
# SVN : nécessite un dumpfile côté serveur
svnadmin dump /var/svn/repo > repo.dump
Mises en garde avec distribué
- Distribué crée une question de coordination — quel clone est canonique ?
- Les forks peuvent diverger silencieusement.
- L'audit nécessite une infrastructure explicite.
Hybride
Des outils comme git-svn font le pont entre les deux.