Este artículo, escrito por EvilGenius, narra la evolución del control de versiones de software a lo largo de treinta años, desde los rudimentarios métodos manuales hasta la omnipresencia actual de Git. La historia comienza en la década de 1990, cuando los desarrolladores utilizaban archivos ZIP con fechas en los nombres para versionar el código, o compartían carpetas de red con nombres como 'FINAL_REALLY', un testimonio de la falta de sistemas formales. La pérdida de código era común y la resolución de conflictos se hacía con herramientas como Beyond Compare y discusiones acaloradas.
Antes de los sistemas de control de versiones formales, cada desarrollador implementaba sus propios métodos, a menudo ineficaces. El artículo luego explora la era de los sistemas basados en bloqueos como SCCS y RCS, que introdujeron conceptos clave como 'deltas' (diferencias entre versiones) y 'check-in/check-out', pero que eran limitados por su enfoque de un solo archivo y la necesidad de bloquear archivos para edición.
CVS (Concurrent Versions System) marcó un avance significativo al permitir la edición concurrente de archivos y la introducción del concepto de repositorio. Aunque dominó el panorama del desarrollo de código abierto durante una década, CVS sufría de problemas como commits atómicos incompletos, ramas lentas y una gestión de directorios deficiente. Paralelamente, Visual SourceSafe, popular en el mundo Microsoft, ofrecía una solución comercial con un modelo de bloqueo, pero era notoriamente propenso a la corrupción de datos, requiriendo procedimientos de recuperación regulares.
La llegada de Git en 2005, creada en diez días por Linus Torvalds tras la revocación de la licencia de BitKeeper para el kernel de Linux, revolucionó el control de versiones. Su diseño descentralizado y su enfoque en la velocidad y la integridad de los datos lo convirtieron en el estándar de facto, sin que haya surgido un sucesor viable hasta la fecha. La historia del control de versiones es, en esencia, una historia de cómo se superaron las limitaciones de los sistemas anteriores, culminando en la robustez y eficiencia de Git. El artículo enfatiza que la comprensión de estas etapas anteriores ayuda a apreciar las decisiones de diseño que impulsaron la evolución de las herramientas de control de versiones.
