Inquadrare la decisione
"Quale VCS dovremmo usare?" raramente ha una risposta giusta.
Vincoli di workload
- Principalmente codice testuale, branching frequente → Git.
- Principalmente contenuto binario, lock esclusivi essenziali → Perforce.
- Misto, con codice e asset separabili pulitamente → eseguire entrambi.
- Controllo centralizzato con branching semplice → SVN rimane accettabile.
Vincoli di team
- Distribuito, spesso offline → VCS distribuito (Git, Mercurial).
- Single-site, sempre online → entrambi i modelli funzionano.
- Misto ingegneri e non ingegneri → UX piu amichevole conta.
- Contributori open-source → Git, senza domande.
Vincoli di ecosistema
- Modernita CI/CD → Git schiacciantemente.
- Tooling motore di gioco / DCC → spesso Perforce, con Git per il codice.
- Infrastruttura esistente → la continuita ha valore reale.
Vincoli di compliance
- Access control per percorso → Perforce o SVN.
- Audit lato server delle operazioni di lettura → sistemi centralizzati.
- Commit firmati e attestazione supply chain → Git con tooling sigstore-class.
Vincoli di costo
- Bootstrap senza budget → Git su GitHub free tier, GitLab CE, o Gitea.
- Enterprise finanziato con esigenze binarie → Perforce si giustifica.
- Team SaaS medio → tier paid GitHub o GitLab.
Albero decisionale
1. Is most of your content unmergeable binary?
Yes → Perforce. Stop.
No → continue.
2. Do you need per-path access control?
Yes → SVN, Perforce, or Git with significant tooling investment.
No → continue.
3. Do contributors work offline or distributed?
Yes → Git (or Mercurial). Continue.
No → either model is fine.
4. Do you need GitHub-style ecosystem?
Yes → Git. Stop.
No → consider Mercurial for UX, SVN for centralisation.
5. Default → Git.
Scenari di esempio
- Startup web SaaS, 5 ingegneri → Git su GitHub o GitLab.
- Studio giochi, 200 persone → Perforce per asset, Git per codice.
- Agenzia governativa → GitLab self-hosted o Perforce.
- Libreria open-source → Git su GitHub.
- Tooling aziendale interno → Git e ancora la risposta.
- Azienda di design hardware → Perforce; possibilmente Git per firmware embedded.
Percorsi di migrazione
# SVN to Git
git svn clone --stdlayout --authors-file=authors.txt <url>
# Mercurial to Git
~/fast-export/hg-fast-export.sh -r <hg-repo>
# Perforce to Git
git p4 clone //depot/main@all my-git-repo
Evitare la paralisi da analisi
Se non riesci a decidere, la risposta e Git.
Rivedere la scelta
Rivalutare ogni due anni.