Control de versiones ¿Qué es ?, ¿Para qué? y ¿Por qué?

Para poder darnos cuenta que tan importante es o no el usar una metodología de control de versiones es primordial contar con una clara definición de lo que significa dicho termino, entonces ¿qué es lo que entendemos por control de versiones?.

El control de versiones en ingeniería de software es toda practica que se encarga de realizar un seguimiento y proveer un control sobre los cambios realizados sobre un archivo o un conjunto de archivos a lo largo de un tiempo. De esta manera, de ser necesario se podrán recuperar versiones anteriores especificas en un futuro. El control de versiones regularmente se utiliza sobre el código fuente, sin embargo esto no es una obligación cualquier tipo de archivo que se encuentre dentro del ordenador puede ponerse bajo control de versiones.

El control de versiones se ha utilizado desde hace mucho tiempo. El primer método que se utilizo se basaba en copiar los archivos a otro directorio para tener un respaldo antes de hacer cualquier cambio. Aunque esta practica es muy fácil de implementar es igualmente propenso a errores, ya que es fácil que guardes por error archivos equivocados o sobrescribas alguno que no querías.

Buscando una mejor solución a esta problemática se desarrollaron los sistemas de control de versiones locales. Estos cuentan con una simple base de datos en la que se llevan todos los registros de todos los cambios realizados sobre los archivos. Por algún tiempo se pensó que esta medida era suficiente, sin embargo debido al constante crecimiento y a las grandes demandas de software mas completos surgieron otros inconvenientes. Cada día es mas común encontrarnos grupos de personas que se encuentran colaborando en un mismo proyecto, todos trabajando a la par, para que esto se logre ya no es suficiente tener todos los archivos en un sola computadora. Esto dio origen a dos importantes desarrollos, el control de versiones centralizado y el control de versiones distribuido.

Los sistemas de control de versiones centralizado cuentan con un servidor único en el cual se encuentran todos los archivos con sus respectivas versiones. Así todos los miembros de un mismo proyecto pueden tener acceso a dichos archivos. Una gran ventaja que ofrecen estos sistemas es que todos los colaboradores pueden ver en que esta trabajando cada uno respectivamente, haciendo mucho mas fácil para un líder de proyecto ver el avance y asignar tareas a cada miembro. El único inconveniente con esta forma de trabajo es que al contar con un solo servidor central si dicho servidor falla ninguno de los miembros puede trabajar o guardar sus cambios hasta que el servidor regrese a la normalidad. Si bien este tipo de sistemas son de gran importancia y significaron un gran aporte para el desarrollo de software, mientras sigan siendo centralizados la oportunidad de perderlo todo sigue siendo alta.

Por otro lado, en los sistemas de control de versiones distribuidos, los usuarios no solo bajan la ultima versión de los archivos de un proyecto si no que replican todo un repositorio. De esta manera, si el servidor falla por alguna razón y los usuarios estaban colaborando a través de él, el trabajo no se pierde ya que la informacion puede ser copiada en el servidor para restaurarlo. Con este tipo de sistema se puede colaborar con una gran variedad de grupos simultáneamente dentro de un mismo proyecto.

En conclusión desde mi punto de vista todos los proyectos por mas pequeños o grande que sean, mientras estén en desarrollo siempre se llega a un punto en el que se comete un error y es indispensable regresar a un punto anterior cuando todo estaba bien. Por tal motivo creo, que si bien es cierto que puede ser un poco complicado en un inicio el entender y acostumbrarse a usar una metodología de control de versiones, con el paso del tiempo, entre más grandes se vuelven los equipos o los proyectos de software en los que vas trabajando más indispensable y cómodo se vuelve usar estas metodologías. A titulo personal creo que la mas cómoda y conveniente es la metodología de control de versiones distribuida. aunque tarde un poco en comprenderla y utilizarla de una manera correcta creo que ha hecho que el desarrollo de mis proyectos sea cada vez mas eficiente.

En lo personal lo que más inconveniente me causo, al empezar a trabajar con estas metodologías, fue el darme cuenta o que todo el equipo se diera cuenta que son indispensables para poder tener un proyecto más organizado. Al no contar con un conocimiento pleno sobre el tema prefería realizar mis proyectos sin la ayuda de esta metodología. Creo que en un principio no analizaba el gran beneficio que se obtiene a la larga con el control de versiones. En mis primeros proyectos entendí lo que había desaprovechado cuando ya era muy tarde, cuando el proyecto ya estaba muy avanzado, y aunque al final lo utilizamos no sacamos todo el provecho que pudimos haber obtenido si lo hubiéramos utilizado desde el inicio del proyecto. Por esto creo que es de gran importancia tomarse el tiempo para comprender “el que” y “el como” se utilizan estas metodologías. Para no cometer los mismos errores que yo cometí es indispensable contar con buenas bases de como utilizar el control de versiones antes de comenzar tu próximo proyecto.