Dos filosofías
Subversion (SVN), lanzado en 2000, es un sistema centralizado de control de versiones. El repositorio vive en un servidor; los clientes hacen checkout, commit al servidor, y update desde él. Git, lanzado en 2005, es distribuido.
Modelos mentales
El modelo mental de SVN es el archivero: un lugar compartido. El modelo de Git es más como email: cada participante tiene la historia completa.
Lo que SVN hizo bien
- Simple de explicar.
- Control de acceso granular a nivel de directorio.
- Bloqueo de archivos para binarios que no se pueden mergear.
- Números de revisión lineales y monotónicos.
- Estable para repositorios muy grandes con contenido mixto.
Lo que Git hizo bien
- Branches y merges baratos y rápidos.
- Historia local completa.
- Modelo distribuido sobrevive a caídas del servidor.
- Direccionamiento por contenido SHA detecta corrupción.
- El ecosistema es vasto.
Comandos del día a día comparados
# 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
Dónde muerden las filosofías
En SVN, "commit" significa publicar a todos inmediatamente. En Git, "commit" es local; "push" publica.
Branching
# Branch SVN
svn copy https://svn.example.com/repo/trunk \
https://svn.example.com/repo/branches/feature -m "Branch"
# Branch Git
git checkout -b feature
Por qué Git ganó cuota de mercado
Tres factores: efectos de red de GitHub desde 2008; el dominio de Linux y la elección del kernel de Git; y el surgimiento de cloud y desarrollo remoto.
Cuándo SVN sigue siendo una elección sensata
- Repositorios binarios grandes donde mergear es imposible.
- Entornos controlados con control de acceso estricto por directorio.
- Pipelines de tooling establecidos.
- Equipos en una sola sede que nunca trabajan offline.