La differenza architetturale
Subversion e centralizzato; Git e distribuito.
Cosa abilita "distribuito"
- Commit offline.
- Sperimentazione locale.
- Disaster recovery.
- Workflow multi-master.
- Disaccoppiamento del codice da un vendor.
Cosa abilita la centralizzazione
- Singola fonte di verita.
- Access control per percorso.
- Numeri di revisione sequenziali.
- Locking.
Confronto pratico
# Offline in Git
git commit -m "WIP"
git log
git diff HEAD~5
git checkout -b experiment
# Same operations in SVN, offline:
svn commit # error: cannot connect to server
svn log # error: cannot connect to server
svn diff -r 100 # error: cannot connect to server (for arbitrary revs)
Lavoro mobile e remoto
La decade tra il primato di SVN e Git ha visto l'ascesa dello sviluppo mobile, dei pendolarismi in treno, conferenze e (piu recentemente) lavoro remoto globale.
Disaster recovery
# Git: recover central repo from a 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: requires server-side dumpfile
svnadmin dump /var/svn/repo > repo.dump
Avvertenze con distribuito
- Il distribuito crea una domanda di coordinamento.
- I fork possono divergere silenziosamente.
- Auditing e access control richiedono infrastruttura esplicita.
Ibrido
Strumenti come git-svn fanno da bridge tra i due.