Acerca de los sistemas de control de versiones

¡Hola! La semana que viene OTUS iniciará un "Súper taller sobre el uso y la configuración de GIT" . Esto es lo que decidí dedicar a la publicación de hoy.










Introducción



Propongo discutir el propósito y las diversas formas de organizar los sistemas de control de versiones.



Sistemas de control de versiones



Un sistema de control de versiones es principalmente una herramienta, y una herramienta está diseñada para resolver una determinada clase de problemas. Por lo tanto, un sistema de control de versiones es un sistema que registra los cambios

en un archivo o conjunto de archivos a lo largo del tiempo y le permite volver más tarde a una versión específica. Queremos gestionar de forma flexible un determinado conjunto de archivos, volver a determinadas versiones si es necesario. Puede deshacer ciertos cambios en el archivo, revertir su eliminación, ver quién ha cambiado algo. Normalmente, los sistemas de control de versiones se utilizan para almacenar el código fuente, pero esto no es necesario. Se pueden utilizar para almacenar cualquier tipo de archivo.



¿Cómo almaceno diferentes versiones de archivos? La gente no llegó a una herramienta como los sistemas de control de versiones de inmediato, y ellos mismos pueden ser muy diferentes. El problema propuesto se puede resolver utilizando buenos sistemas de control de versiones locales, centralizados o distribuidos de copiar y pegar.



Copiar pegar



Un método bien conocido, cuando se aplica a este problema, puede verse así: nombraremos los archivos por el patrón filename_ {versión}, posiblemente con la adición de la hora de creación o modificación.



Este método es muy simple, pero es propenso a varios errores: puede cambiar accidentalmente el archivo incorrecto, puede copiar desde el directorio incorrecto (después de todo, así es como se transfieren los archivos en este modelo).



Sistema de control de versiones local



El siguiente paso en el desarrollo de sistemas de control de versiones fue la creación de sistemas de control de versiones locales. Eran una base de datos simple que mantiene registros de todos los cambios en los archivos.



Un ejemplo de tales sistemas es el sistema de control de versiones RCS, que se desarrolló en 1985 (el último parche se escribió en 2015) y almacena cambios en archivos (parches) mientras se mantiene el control de versiones. Un conjunto de estos cambios le permite restaurar cualquier estado del archivo. RCS se envía con Linux.



El sistema de control de versiones local hace un buen trabajo resolviendo el problema, pero su problema es la propiedad principal: la localidad. No está destinado en absoluto para uso colectivo.



Sistema de control de versiones centralizado



El sistema de control de versiones centralizado está diseñado para resolver el problema básico del sistema de control de versiones local.



Para organizar dicho sistema de control de versiones, se utiliza un único servidor que contiene todas las versiones de los archivos. Los clientes que acceden a este servidor obtienen de este repositorio centralizado. El uso de sistemas de control de versiones centralizados ha sido el estándar durante muchos años. Estos incluyen CVS, Subversion, Perforce.



Estos sistemas son fáciles de administrar gracias a un solo servidor. Pero al mismo tiempo, la presencia de un servidor centralizado conduce a la aparición de un único punto de falla en la forma de este servidor. Si este servidor está deshabilitado, los desarrolladores no podrán descargar archivos. El peor escenario es la destrucción física del servidor (o la caída del disco duro), lo que conduce a la pérdida del código base.



A pesar de que la moda SVN ha pasado, a veces hay un movimiento inverso: una transición de Git a SVN. El punto es que SVN permite el pago selectivo, lo que implica descargar solo algunos archivos del servidor. Este enfoque está ganando popularidad cuando se utilizan monorrepositorios, que se puede analizar más adelante.



Sistema de control de versiones distribuido



Los sistemas de control de versiones distribuidos se utilizan para eliminar un solo punto de falla. Implican que el cliente descargará todo el repositorio para sí mismo en lugar de descargar archivos específicos de interés para el cliente. Si alguna copia del repositorio muere, entonces esto no conducirá a la pérdida del código base, ya que se puede restaurar desde la computadora de cualquier desarrollador. Cada copia es una copia de seguridad completa de los datos.



Todas las copias son iguales y se pueden sincronizar entre sí. Este enfoque es muy similar (y de hecho lo es) a la replicación maestro-maestro.



Este tipo de sistema de control de versiones incluye Mercurial, Bazaar, Darcs y Git. El sistema de control de la última versión se discutirá con más detalle a continuación.



Historia de Git



En 2005, la empresa de control de versiones BitKeeper rompió los lazos con la comunidad del kernel de Linux. La comunidad decidió entonces desarrollar su propio sistema de control de versiones. Los principales valores del nuevo sistema son: descentralización completa, velocidad, arquitectura simple, buen soporte para el desarrollo no lineal.



Conclusión



Examinamos las formas de organizar los sistemas de control de versiones, discutimos las opciones para resolver las tareas asignadas a estos sistemas, hablamos sobre las ventajas y desventajas de cada uno de ellos, nos familiarizamos con la historia del sistema de control de versiones Git.






All Articles