La diferencia arquitectónica
Subversion es centralizado: un servidor sostiene el repositorio canónico; los clientes mantienen copias de trabajo. Sin el servidor, puedes editar archivos pero no commitear, hacer log, branch o merge.
Git es distribuido: cada clone es un repositorio completo.
Lo que habilita "distribuido"
- Commits offline.
- Experimentación local.
- Recuperación ante desastres.
- Workflows multi-master.
- Desacoplar código de un proveedor.
Lo que habilita la centralización
- Una sola fuente de verdad.
- Control de acceso por ruta.
- Números de revisión secuenciales.
- Locking.
Comparación práctica
# Offline en Git
git commit -m "WIP"
git log
git diff HEAD~5
git checkout -b experiment
# Mismas operaciones en SVN, offline:
svn commit # error
svn log # error
svn diff -r 100 # error
Trabajo móvil y remoto
La década entre los apogeos de SVN y Git vio el surgimiento del desarrollo móvil, el commute en tren, las conferencias y el trabajo remoto global.
Recuperación ante desastres
# Git: recuperar repo central desde 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: requiere dumpfile del lado servidor
svnadmin dump /var/svn/repo > repo.dump
Advertencias con distribuido
- Distribuido crea una pregunta de coordinación — ¿qué clone es canónico?
- Los forks pueden divergir silenciosamente.
- La auditoría requiere infraestructura explícita.
Híbrido
Herramientas como git-svn puentean los dos.