Todos los sistemas sin importar si son de código abierto o software privativo tienen que pasar por un largo proceso de diseño y desarrollo, toda idea inicial sirve de base para generar los primeros prototipos de un sistema. Estos prototipos son sometidos a pruebas y cambios, la corrección de errores y adición de funciones son comunes en todo desarrollo. Aun después de terminado y lanzado un proyecto las modificaciones pueden seguir sucediendo, corrección de errores y nuevas funciones que se siguen desarrollando.
Originalmente el desarrollo de código era realizado por grupos de programadores que realizaban cambios y realizaban copias de las carpetas originales y luego llevaban nuevas carpetas de proyecto con los cambios. En grupos de desarrollador grandes donde cada persona trabajaba en diferentes partes esto podría causar inconvenientes al momento de unir los proyectos y saber cual es la versión definitiva. De esta problemática surgen métodos para llevar el control de las versiones y sobre estos métodos se comienzan a desarrollar sistemas que ayuden a grupos de programadores para el control de dichas versiones.
Los sistemas de control de versiones se presentan en varios escenarios, que van amarrados a los escenarios de desarrollo.
Sistemas para control de sistemas locales
Básicamente son los métodos originales donde se guardan en carpetas los archivos modificados de forma que se pueda recuperar la versión deseada en el momento que se desee. Para llevar el control de los archivos se llevan los cambios en una base de datos local. De forma de poder restaurar los archivos de dicha versión cuando se requiera.
Una de sus mayores limitaciones es que solo permite llevar a cabo la versión de un equipo, sin permitir el trabajo colaborativo.
Imagen realizada por @ubaldonet en Inkscape
Control de Versiones centralizados
La existencia de muchos desarrolladores en un proyecto trajo consigo la necesidad de la colaboración entre varios programadores con muchas partes sobre un mismo código común y módulos que podían solaparse entre sí, el sistema centralizado es cuando varios trabajan y comparten una base de datos de cambios conjuntos, donde pueden bajar las versiones modificadas por otros programadores.
En este sistema es más fácil de administrar lo que cada persona hace y limitar sobre que parte del código puede trabajar, es más fácil unir un proyecto pues no debes consolidar las bases de datos de ca equipo por separado.
Entre sus inconvenientes existe el problema de la dependencia de una base de datos centralizada, causando que el control no funcione al momento de su falla y causando retraso en la producción.
Imagen realizada por @ubaldonet en Inkscape
Control de Versiones Distribuido
Pensando en el inconvenientes de una base de datos únicos surge una variante al sistema descentralizado donde se mantiene un servidor de bases de datos, en cambio se mantiene una copia de la base de datos en cada equipo, de esta forma cada programador replica su trabajo a todos los equipos al momento de realizar una actualización en la base de datos, conservando así una imagen de todos en todos los equipos y el servidor, de esta forma se puede recuperar la base de datos de cualquier equipo en caso de una falla en el servidor.
SI bien se pueden seguir manteniendo roles de trabajo e incluso jerarquías la continuidad del trabajo se mantiene en caso de una falla. Los programadores pueden seguir trabajando de forma individual mientras el servidor se repone en caso de una falla y el trabajo se replicara una vez esté en línea.
Imagen realizada por @ubaldonet en Inkscape
Sistemas de control de versiones
Subversion “SVN” es otro sistema de control de versiones de código abierto, perteneciente al proyecto Apache, trabaja bajo la licencia Apache/BSD. Se puede trabajar desde equipos remotos en la red y permitiendo crear, borrar y administrar las carpetas como si estuvieran en el equipo.
Git
Finalmente con la llegada de Git se dio un punto de referencia en los sistemas de este tipo, el Kernel de Linux es sin duda un proyecto de gran complejidad, sus diferentes versiones en desarrollo en paralelo, es así como Linus Torvalds, el creador del Kernel crea Git buscando un sistema eficiente para el mantenimiento del Kernel y desarrollos en general.
Git nació con la finalidad de tener un sistema de versiones que cumpla con las siguientes características:
El manejo de múltiples ramas es una de los punto a tratar en Git de mayor importancia, poder manejar simultáneamente el desarrollo de múltiples versiones de un mismo sistema, cuando se tienen previstos diferentes cambios en el tiempo, donde se agregan diferentes funcionalidades puede ser el manejo de ramas una herramienta importante.
Basándose en esta tecnología surge un proyecto que logra convertirse en una de las tendencias en programación más exitosas, GitHub.
GitHub es un sistema donde basado en Git han creado un repositorio de código compartido, según muchos el más grande del mundo donde miles de programadores suben sus proyectos y llevan el control de sus versiones, estos pueden mantenerse de forma pública o privada, dependiendo diferentes posibilidades del sistema a diversos costos de inscripción.
Se puede considerar que GitHub se volvió la red social de los programadores, el sistema de control de sistemas se volvió un servicio, siendo también una plataforma que creó una afinidad muy grande con los productores de software libre.
Con el crecimiento de GtiHub surge también una duda razonable dentro de ciertos desarrolladores, donde muchos se preguntaron cómo es posible que el repositorio de software libre más grande del mundo este en un sistema propietario y nace GitLab.
GitLab es un sistema de versiones que toma los conceptos de GitHub y lo lleva a su propia plataforma, también presta su plataforma como un servicio pero a diferencia su código en open source por lo cual cualquiera puede instalar su propio servidor de GitLab y utilizarlo como un servicio propio bien sea dentro de una empresa o de forma personal.
Curiosamente GitLab es muy utilizado por empresas de desarrollo de código privativo, que no desean que su código esté expuesto en servidores externos y prefieren tener el control de dicho servicio dentro de sus servidores
GitLab aumentó su presencia tras la compra de GitHub por Microsoft que llevó a muchos desarrolladores y empresas a plantearse .la problemática de tener su código bajo el control de una de las empresas de software más grandes del mundo, sin embargo GitHub sigue su funcionamiento de forma natural y sin mayores cambios.
Consideraciones
El desarrollo de sistemas es una actividad que ha ido madurando a medida que crece, la magnitud de los proyectos han ido creciendo a medida que la complejidad de los sistemas modernos aumentan, sistemas que realizan un sin fin de procesos y que son desarrollados por un gran número de de desarrolladores. Para llevar a cabo desarrollos de este tamaño es necesario que los sistemas de control donde todo el caos generado por todo el trabajo generado en paralelo pueda ser organizado de forma de minimizar errores y perdida de información y horas de trabajo.
Referencia
Pagina Proyecto Git Aquí
Wikipedia Articulo
Wikipedia Articulo
Wikipedia Articulo
Wikipedia Articulo