Sistemas de Control de Versiones

Desde hace ya varias décadas el desarrollo de software de cierto tamaño se realiza por un grupo de personas, los cuales editan diferentes ficheros de un proyecto, también suele suceder que un mismo software posee personalizaciones en el código dependiendo del cliente, que se tenga parte del código en desarrollo introduciendo cambios, otro código en fase de pruebas y otro en producción. Las acciones anteriores sin un control férreo de los cambios que se van produciendo a medida que se desarrolla y mantiene el software puede convertir la tarea del programador o programadora en un infierno, acarreando problemas de calidad de software, fallos de ejecución y seguridad, y por supuesto una gran pérdida de tiempo.

Para solucionar el problema del trabajo en equipo, gestionar las diferentes versiones de un mismo software y diferenciar las fases en que se encuentra cada parte del código se desarrollaron los sistemas de control de versiones, por supuesto con un sistema de autenticación y autorización de usuarios al código.

A lo largo de los años han existido diferentes sistemas de control de versiones, la mayor parte de ellos con una arquitectura cliente servidor, siendo los más conocidos:

  • CVS: Limitaciones en la gestión de los ficheros y soporte limitados para codificación UTF, desde el 2008 no ha aparecido ninguna nueva versión. Guarda todas las versiones de los ficheros.
  • Apache Subversión: Cambia la filosofía, en este caso para cada cambio en un fichero del proyecto se almacenan los cambios producidos, con lo que se reduce considerablemente el espacio de almacenamiento y el tipo de carga y descarga, aunque su uso ha sido desplazado por Git.

Es una aplicación informática que implementa un sistema de control de versiones: mantiene el registro de todo el trabajo y los cambios en los ficheros (código fuente principalmente, en un único archivo para cada fichero correspondiente ,1 que forman un proyecto (de programa) y permite que distintos desarrollad res (potencialmente situados a gran distancia) colaboren.

Aplicación de software libre para el control de versiones, basada en un repositorio cuyo funcionamiento es muy similar al de un sistema de ficheros.

Git

Git es el protocolo estándar de facto en la actualidad para el control de versiones, siendo su uso hegemónico en la industria informática, incluso ha traspasado estas utilizando para otros usos corno la creación de documentos (la mayor parte de las aplicaciones de procesador de texto utilizan sistemas similares para la gestión de las diferentes versiones de los documentos).

Fue creado por Linus Torvalds con la idea de ser un motor de bajo nivel sobre el cual se utilizará una interfaz de usuario, aunque su uso actual prescinde de dicho interfaz de usuario (muchos IDE proveen de herramientas gráficas, aunque a bajo nivel ejecutan comandos).

  • Repositorio: No existe una arquitectura cliente/servidor centralizada al que subir el código, pueden existir diferentes repositorios que pueden hacer tanto de cliente como de servidor, es decir un sistema distribuido, por ejemplo, tener un repositorio en cada equipo de los desarrolladores, el servidor o servidores de pruebas, uno o varios repositorios para las prueba, otras tanto para la producción o cualquier otro que se considere, pudiendo sincronizarse entre estos.
  • Ramas: Se puede definir una rama como una bifurcación en el código a partir de un punto concreto, de forma que a partir de dicha bifurcación el código puede y normalmente es diferente, un ejemplo clásico de uso de ramas se da en el caso de una aplicación que se personaliza para cada empresa a la que se vende, cada empresa tiene sus peculiaridades pero existe un punto en común, cada una de estas ramas incluye la parte del código de personalización. Las diferentes ramas pueden volver a unirse en caso de ser necesario.

Estados
Los archivos en Git se pueden encontrar en 3 estados:
  • Confirmado: Indica que los cambios están almacenados de forma segura en git.
  • Modificado: Se ha modificado el fichero pero los cambios no se han hecho permanentes y no se han marcado para la próxima actualización.
  • Preparado: Se ha marcado para que los cambios se añadan al repositorio pero aún no se ha realizado.
Estos estados definen tres secciones en los que se encuentra un proyecto en Git:
  • Directorio de trabajo: Para ficheros en el caso de modificado.
  • Directorio de Git: Para ficheros confirmados.
  • Área de preparación: Caso de ficheros preparados.
Servicios externos
Existen ciertos servicios externos que utilizan el protocolo Git, además amplían la funcionalidad con entornos web, gestión de usuarios y permisos, destacando:
  • GitHub: Forja de proyectos a nivel mundial en que se puede alojar de forma remota proyectos, encontrándose en la actualidad desde proyectos de un simple fichero de una página web hasta los mayores y más grandes del software libre. Permite crear proyectos públicos y privados así como gestión de usuarios, perfiles y permisos.
  • Bitbucket: Servicio de control de versiones basado en Git, con planes comerciales y gratuitos (en el caso de gratuitos limitado a un número máximo de repositorios privados). Permite la gestión de usuarios, perfiles y permisos.
  • GitLab: Otro de los grandes servicios web de control de versiones, ofrece servicios casi idénticos a los anteriores, pero en esta ocasión es posible instalar un servidor GitLab en la empresa, sin necesidad de poseer cuentas en GitHub o Bitbucket.