El control de versiones (también conocido como control de revisiones , control de código fuente y gestión de código fuente ) es la práctica de ingeniería de software que consiste en controlar, organizar y realizar un seguimiento de las diferentes versiones en el historial de archivos informáticos , principalmente archivos de texto de código fuente , pero en general cualquier tipo de archivo.
El control de versiones es un componente de la gestión de configuración de software . [ 1 ]
Un sistema de control de versiones es una herramienta de software que automatiza el control de versiones. Alternativamente, el control de versiones está integrado como una característica de algunos sistemas como procesadores de texto , hojas de cálculo , documentos web colaborativos , [ 2 ] y sistemas de gestión de contenido , como el historial de páginas de Wikipedia .
El control de versiones incluye opciones para ver versiones antiguas y para restaurar un archivo a una versión anterior.
Descripción general
A medida que los equipos desarrollan software, es común implementar varias versiones del mismo y que diferentes desarrolladores trabajen simultáneamente en una o más versiones distintas. Los errores o las funcionalidades del software suelen estar presentes solo en ciertas versiones (debido a la corrección de algunos problemas y la introducción de otros durante el desarrollo del programa). Por lo tanto, para localizar y corregir errores, es fundamental poder recuperar y ejecutar diferentes versiones del software para determinar en cuál o cuáles se produce el problema. También puede ser necesario desarrollar dos versiones del software simultáneamente: por ejemplo, una versión con los errores corregidos, pero sin nuevas funcionalidades ( rama ), mientras que en la otra se trabajan las nuevas funcionalidades ( tronco ).
En su forma más simple, los desarrolladores podrían conservar varias copias de las diferentes versiones del programa y etiquetarlas adecuadamente. Este enfoque sencillo se ha utilizado en muchos proyectos de software de gran envergadura. Si bien este método puede funcionar, resulta ineficiente, ya que se deben mantener muchas copias casi idénticas del programa. Esto exige mucha autodisciplina por parte de los desarrolladores y suele dar lugar a errores. Dado que el código base es el mismo, también requiere otorgar permisos de lectura, escritura y ejecución a un grupo de desarrolladores, lo que añade la presión de que alguien gestione los permisos para que el código base no se vea comprometido, lo que incrementa aún más la complejidad. Por consiguiente, se han desarrollado sistemas para automatizar parte o la totalidad del proceso de control de versiones. Esto abstrae la mayoría de los pasos operativos (los oculta a los usuarios comunes).
Además, en el desarrollo de software, la práctica legal y empresarial, y otros entornos, es cada vez más común que un único documento o fragmento de código sea editado por un equipo cuyos miembros pueden estar geográficamente dispersos y tener intereses diferentes, incluso contrapuestos. Un sistema de control de versiones sofisticado que registre y contabilice la autoría de los cambios en documentos y código puede resultar extremadamente útil, e incluso indispensable, en tales situaciones.
El control de versiones también permite realizar un seguimiento de los cambios en los archivos de configuración , como los que suelen almacenarse en /etcsistemas Unix/usr/local/etc . Esto ofrece a los administradores de sistemas otra forma sencilla de controlar los cambios realizados y de revertir a versiones anteriores si fuera necesario.
Muchos sistemas de control de versiones identifican la versión de un archivo mediante un número o una letra, denominado número de versión , versión , número de revisión , revisión o nivel de revisión . Por ejemplo, la primera versión de un archivo podría ser la versión 1. Cuando se modifica el archivo, la siguiente versión es la 2. Cada versión está asociada a una marca de tiempo y a la persona que realizó el cambio. Las revisiones se pueden comparar, restaurar y, en algunos tipos de archivos, fusionar. [ 3 ]
Historia
La herramienta de actualización de software IEBUPDTE de IBM para OS/360 data de 1962, y podría considerarse un precursor de las herramientas de control de versiones. Dos paquetes de gestión de código fuente y control de versiones muy utilizados por las instalaciones de IBM 360/370 fueron The Librarian y Panvalet . [ 4 ] [ 5 ]
En 1972 se inició un sistema completo diseñado para el control de código fuente: el Sistema de Control de Código Fuente (SCCS), también para OS/360. El manual de usuario de SCCS, especialmente la introducción, publicada el 4 de diciembre de 1975, sugería que se trataba del primer sistema de control de revisiones deliberado. [ 6 ] El Sistema de Control de Revisiones (RCS) le siguió en 1982 [ 7 ] y, posteriormente, el Sistema de Versiones Concurrentes (CVS) añadió a RCS funciones de red y desarrollo concurrente. Tras CVS, un sucesor dominante fue Subversion , [ 8 ] seguido por el auge de herramientas de control de versiones distribuidas como Git . [ 9 ]
Estructura
El control de versiones gestiona los cambios que se producen en un conjunto de datos a lo largo del tiempo. Estos cambios pueden estructurarse de diversas maneras.
A menudo, los datos se conciben como una colección de muchos elementos individuales, como archivos o documentos, y se realiza un seguimiento de los cambios en cada archivo. Esto concuerda con la idea de mantener los archivos separados, pero genera problemas cuando cambia su identidad, lo cual ocurre al renombrar, dividir o fusionar archivos. Por consiguiente, algunos sistemas, como Git , consideran los cambios en los datos en su conjunto, lo cual resulta menos intuitivo para cambios sencillos, pero simplifica los cambios más complejos.
Cuando se modifican datos que están bajo control de revisiones, después de ser recuperados mediante la extracción, esto generalmente no se refleja inmediatamente en el sistema de control de revisiones (en el repositorio ), sino que debe ser registrado o confirmado. Una copia fuera del control de revisiones se conoce como "copia de trabajo". Como ejemplo sencillo, al editar un archivo de computadora, los datos almacenados en la memoria por el programa de edición son la copia de trabajo, que se confirma al guardar el archivo. Concretamente, se puede imprimir un documento, editarlo a mano y solo después introducir manualmente los cambios en una computadora y guardarlo. Para el control de código fuente, la copia de trabajo es, en cambio, una copia de todos los archivos en una revisión particular, generalmente almacenada localmente en la computadora del desarrollador; [ nota 1 ] en este caso, guardar el archivo solo modifica la copia de trabajo, y el registro en el repositorio es un paso separado.
Si varias personas trabajan en un mismo conjunto de datos o documento, implícitamente crean ramificaciones de los datos (en sus copias de trabajo), lo que genera problemas de fusión, como se explica más adelante. Para la edición colaborativa sencilla de documentos, esto se puede evitar bloqueando los archivos o, simplemente, evitando trabajar en el mismo documento que otra persona.
Los sistemas de control de versiones suelen ser centralizados, con un único repositorio centralizado donde se almacenan y extraen los datos, y las operaciones de entrada y salida se realizan con referencia a este repositorio central. En cambio, en el control de versiones distribuido , ningún repositorio es el único responsable, y los datos pueden extraerse y registrarse en cualquier repositorio. Al registrar los cambios en un repositorio diferente, esto se interpreta como una fusión o un parche.
Estructura del grafo

En términos de teoría de grafos , las revisiones se suelen concebir como una línea de desarrollo (el tronco ) con ramificaciones que se desprenden de ella, formando un árbol dirigido, visualizado como una o más líneas de desarrollo paralelas (las ramas principales) que se ramifican desde un tronco. En realidad, la estructura es más compleja, formando un grafo dirigido acíclico , pero para muchos propósitos, "árbol con fusiones" es una aproximación adecuada.
Las revisiones ocurren en secuencia a lo largo del tiempo y, por lo tanto, pueden ordenarse, ya sea por número de revisión o marca de tiempo. [ nota 2 ] Las revisiones se basan en revisiones anteriores, aunque es posible reemplazar en gran medida o por completo una revisión anterior, como "eliminar todo el texto existente, insertar texto nuevo". En el caso más simple, sin ramificaciones ni deshacer, cada revisión se basa únicamente en su predecesor inmediato y forman una línea simple, con una única versión más reciente, la revisión "HEAD" o punta . En términos de teoría de grafos , al dibujar cada revisión como un punto y cada relación de "revisión derivada" como una flecha (que convencionalmente apunta de la más antigua a la más reciente, en la misma dirección que el tiempo), se trata de un grafo lineal . Si hay ramificaciones, de modo que múltiples revisiones futuras se basan en una revisión anterior, o deshacer, de modo que una revisión puede depender de una revisión anterior a su predecesor inmediato, entonces el grafo resultante es un árbol dirigido (cada nodo puede tener más de un hijo) y tiene múltiples puntas, que corresponden a las revisiones sin hijos ("última revisión en cada rama"). [ nota 3 ] En principio, el árbol resultante no necesita tener una punta preferida ("principal" última revisión), sino varias revisiones diferentes; pero en la práctica, una punta generalmente se identifica como HEAD. Cuando una nueva revisión se basa en HEAD, se identifica como el nuevo HEAD o se considera una nueva rama. [ nota 4 ] La lista de revisiones desde el inicio hasta HEAD (en términos de teoría de grafos, la ruta única en el árbol, que forma un grafo lineal como antes) es el tronco o línea principal. [ nota 5 ] Por el contrario, cuando una revisión puede basarse en más de una revisión anterior (cuando un nodo puede tener más de un padre ), el proceso resultante se llama fusión y es uno de los aspectos más complejos del control de revisiones. Esto ocurre con mayor frecuencia cuando se producen cambios en múltiples ramas (generalmente dos, pero es posible que haya más), que luego se fusionan en una sola rama que incorpora ambos cambios. Si estos cambios se superponen, puede ser difícil o imposible fusionarlos y requerir intervención manual o reescritura.
En presencia de fusiones, el grafo resultante ya no es un árbol, puesto que los nodos pueden tener múltiples padres, sino un grafo acíclico dirigido (DAG) con raíz. El grafo es acíclico porque los padres siempre están en orden cronológico inverso, y tiene raíz porque existe una versión más antigua. Suponiendo que existe un tronco, las fusiones de las ramas pueden considerarse "externas" al árbol: los cambios en la rama se empaquetan como un parche, que se aplica a HEAD (del tronco), creando una nueva revisión sin ninguna referencia explícita a la rama y preservando la estructura del árbol. Por lo tanto, aunque las relaciones reales entre versiones forman un DAG, esto puede considerarse un árbol más fusiones, y el tronco en sí es una línea.
En el control de versiones distribuido, cuando existen varios repositorios, estos pueden basarse en una única versión original (la raíz del árbol), pero no es necesario que exista una raíz original; en su lugar, puede haber una raíz independiente (la revisión más antigua) para cada repositorio. Esto puede ocurrir, por ejemplo, si dos personas comienzan a trabajar en un proyecto por separado. Del mismo modo, cuando existen varios conjuntos de datos (varios proyectos) que intercambian datos o se fusionan, no hay una única raíz, aunque, para simplificar, se puede considerar un proyecto como principal y el otro como secundario, fusionado con el primero con o sin su propio historial de revisiones.
Estrategias especializadas
El control de revisiones de ingeniería se desarrolló a partir de procesos formalizados basados en el seguimiento de las revisiones de los planos iniciales o líneas de diseño "MIL-STD-100G: Práctica estándar del Departamento de Defensa para dibujos de ingeniería" (PDF) . Departamento de Defensa de los Estados Unidos. 9 de junio de 1997. Consultado el 16 de mayo de 2026 .Este sistema de control permitía, implícitamente, volver a un estado anterior del diseño en los casos en que se alcanzaba un punto muerto en el desarrollo del mismo. Se utilizaba una tabla de revisiones para registrar los cambios realizados. Además, las áreas modificadas del dibujo se resaltaban mediante nubes de revisión.
En el ámbito empresarial y jurídico
El control de versiones está muy extendido en el ámbito empresarial y jurídico. De hecho, las "revisiones de contratos" y las "revisiones legales" son algunas de las primeras formas de control de revisiones [ 10 ] y todavía se emplean en ambos ámbitos con distintos grados de sofisticación. Las técnicas más sofisticadas están empezando a utilizarse para el seguimiento electrónico de los cambios en los archivos CAD (véase la gestión de datos de producto ), sustituyendo la implementación electrónica "manual" del control de revisiones tradicional [ 11 ] .
En el desarrollo de juegos
El desarrollo de videojuegos suele implicar archivos binarios de gran tamaño y equipos que trabajan juntos en diferentes disciplinas. Por ello, los estudios de videojuegos utilizan sistemas de control de versiones con buen soporte para archivos binarios grandes, bloqueo de archivos y sincronización rápida. Entre las herramientas más comunes se encuentran Perforce y varios sistemas más recientes basados en la nube. [ 12 ] [ 13 ]
Modelos de gestión de fuentes
Los sistemas de control de versiones tradicionales utilizan un modelo centralizado donde todas las funciones de control de versiones se ejecutan en un servidor compartido . Si dos desarrolladores intentan modificar el mismo archivo simultáneamente, sin algún método para gestionar el acceso, podrían sobrescribir el trabajo del otro. Los sistemas de control de versiones centralizados resuelven este problema mediante dos modelos diferentes de gestión de código fuente: el bloqueo de archivos y la fusión de versiones.
Operaciones atómicas
Una operación es atómica si el sistema permanece en un estado consistente incluso si la operación se interrumpe. La operación de confirmación suele ser la más crítica en este sentido. Las confirmaciones le indican al sistema de control de versiones que haga que un grupo de cambios sea definitivo y esté disponible para todos los usuarios. No todos los sistemas de control de versiones tienen confirmaciones atómicas; el Sistema de Versiones Concurrentes carece de esta característica. [ 14 ]
Bloqueo de archivos
El método más sencillo para prevenir problemas de acceso concurrente consiste en bloquear los archivos de forma que solo un desarrollador a la vez tenga acceso de escritura a las copias centrales del repositorio . Una vez que un desarrollador extrae un archivo, los demás pueden leerlo, pero nadie más puede modificarlo hasta que ese desarrollador registre la versión actualizada (o cancele la extracción).
El bloqueo de archivos tiene ventajas y desventajas. Puede ofrecer cierta protección contra conflictos de fusión complejos cuando un usuario realiza cambios radicales en varias secciones de un archivo grande (o grupo de archivos). Si los archivos permanecen bloqueados exclusivamente durante demasiado tiempo, otros desarrolladores podrían verse tentados a eludir el software de control de versiones y modificarlos localmente, lo que obligaría a una fusión manual complicada cuando finalmente se confirmen los demás cambios. En una organización grande, los archivos pueden quedar bloqueados y olvidados mientras los desarrolladores cambian de proyecto; estas herramientas pueden o no facilitar la identificación de quién tiene un archivo bloqueado.
Fusión de versiones
La mayoría de los sistemas de control de versiones permiten que varios desarrolladores editen el mismo archivo simultáneamente. El primer desarrollador que confirme los cambios en el repositorio central siempre tendrá éxito. El sistema puede ofrecer funciones para integrar los cambios posteriores en el repositorio central y conservar los cambios del primer desarrollador cuando otros desarrolladores confirmen los suyos.
Combinar dos archivos puede ser una operación muy delicada, y generalmente solo es posible si la estructura de datos es simple, como en los archivos de texto . El resultado de combinar dos archivos de imagen podría no ser un archivo de imagen. El segundo desarrollador que revise los archivos deberá tener cuidado con la combinación para asegurarse de que los cambios sean compatibles y que la operación de combinación no introduzca errores lógicos en los archivos. Estos problemas limitan la disponibilidad de operaciones de combinación automáticas o semiautomáticas principalmente a documentos de texto simples, a menos que exista un complemento de combinación específico para los tipos de archivo.
El concepto de edición reservada puede proporcionar un medio opcional para bloquear explícitamente un archivo para un acceso de escritura exclusivo, incluso cuando existe la capacidad de fusión.
Líneas de base, etiquetas y etiquetas
La mayoría de las herramientas de control de versiones utilizan solo uno de estos términos similares (línea base, etiqueta, rótulo) para referirse a la acción de identificar una instantánea ("etiquetar el proyecto") o al registro de la instantánea ("inténtalo con la línea base X "). Normalmente, solo se utiliza uno de los términos línea base , etiqueta o rótulo en la documentación o en las discusiones [ 15 ] ; pueden considerarse sinónimos.
En la mayoría de los proyectos, algunas instantáneas son más importantes que otras, como por ejemplo las que se utilizan para indicar versiones publicadas, ramas o hitos.
Cuando se utilizan juntos los términos " línea base" y " etiqueta " o "rótulo" en el mismo contexto, "etiqueta" y "rótulo" suelen referirse al mecanismo dentro de la herramienta para identificar o registrar la instantánea, y " línea base" indica la mayor importancia de cualquier etiqueta o rótulo determinado.
La mayoría de las discusiones formales sobre la gestión de la configuración utilizan el término línea base .
Control de revisiones distribuido
Los sistemas de control de versiones distribuidos (DRCS) adoptan un enfoque de igual a igual, a diferencia del enfoque cliente-servidor de los sistemas centralizados. En lugar de un único repositorio central en el que los clientes se sincronizan, la copia de trabajo del código fuente de cada nodo constituye un repositorio legítimo . [ 16 ] El control de versiones distribuido lleva a cabo la sincronización mediante el intercambio de parches (conjuntos de cambios) entre nodos. Esto da lugar a algunas diferencias importantes con respecto a un sistema centralizado:
- Por defecto, no existe una copia canónica de referencia del código fuente; solo copias de trabajo.
- Las operaciones comunes (como confirmar cambios, ver el historial y revertir cambios) son rápidas, porque no es necesario comunicarse con un servidor central. [ 1 ] : 7
Más bien, la comunicación solo es necesaria al impulsar o solicitar cambios a otros compañeros o al recibirlos de ellos.
- Cada copia de trabajo funciona eficazmente como una copia de seguridad remota del código fuente y de su historial de cambios, lo que proporciona una protección inherente contra la pérdida de datos. [ 1 ] : 4
Mejores prácticas
Seguir las mejores prácticas es necesario para obtener todos los beneficios del control de versiones. Las mejores prácticas pueden variar según la herramienta de control de versiones y el campo al que se aplique. Las mejores prácticas generalmente aceptadas en el desarrollo de software incluyen: hacer cambios pequeños/incrementales; hacer confirmaciones que involucren solo una tarea o corrección (un corolario de esto es confirmar solo código que funcione y no rompa intencionadamente la funcionalidad existente); usar ramificaciones para completar la funcionalidad antes del lanzamiento; escribir mensajes de confirmación claros y descriptivos, dejando claro qué, por qué y cómo ya sea en la descripción de la confirmación o en el código; y usar una estrategia de ramificación consistente. [ 17 ] Otras mejores prácticas de desarrollo de software, como la revisión de código y las pruebas de regresión automatizadas , pueden ayudar a seguir las mejores prácticas de control de versiones.
Costos y beneficios
Los costos y beneficios variarán según la herramienta de control de versiones elegida y el ámbito de aplicación. Esta sección se centra en el desarrollo de software, donde el control de versiones se utiliza ampliamente.
Costos
Además del coste de la licencia del software de control de versiones, su uso requiere tiempo y esfuerzo. Es necesario comprender los conceptos subyacentes y aprender los detalles técnicos necesarios para operar el software elegido. Asimismo, se deben aprender las mejores prácticas de control de versiones e integrarlas en las prácticas de desarrollo de software existentes en la organización. Puede ser necesario un esfuerzo por parte de la dirección para mantener la disciplina necesaria para seguir las mejores prácticas y obtener así un beneficio real.
Beneficios
Permite revertir los cambios.
Una ventaja fundamental es la capacidad de conservar el historial y revertir los cambios, lo que permite al desarrollador deshacerlos fácilmente. Esto le brinda al desarrollador más oportunidades para experimentar, eliminando el temor a dañar el código existente. [ 18 ]
La ramificación simplifica la implementación, el mantenimiento y el desarrollo.
La ramificación facilita la gestión de la implementación y las versiones . La ramificación y la fusión, la producción, el empaquetado y el etiquetado de parches de código fuente , así como la fácil aplicación de parches a las bases de código, simplifican el mantenimiento y el desarrollo concurrente de las múltiples bases de código asociadas a las distintas etapas del proceso de implementación: desarrollo, pruebas, puesta en escena, producción, etc. [ 19 ]
Mitigación de daños, rendición de cuentas y mejora de procesos y diseño.
Puede haber mitigación de daños, rendición de cuentas, mejora de procesos y diseño, y otros beneficios asociados con el registro proporcionado por el control de versiones, el seguimiento de quién hizo qué, cuándo, por qué y cómo. [ 20 ]
Cuando surgen errores, saber qué se hizo y cuándo ayuda a mitigar los daños y a recuperarse, ya que facilita la identificación de los problemas existentes, su duración y la determinación de su alcance y soluciones. [ 21 ] Se pueden instalar y probar versiones anteriores para verificar las conclusiones alcanzadas mediante el análisis del código y los mensajes de confirmación. [ 22 ]
Simplifica la depuración
El control de versiones puede simplificar enormemente la depuración. La aplicación de un caso de prueba a varias versiones permite identificar rápidamente el cambio que introdujo un error. [ 23 ] El desarrollador no necesita conocer todo el código fuente y puede centrarse en el código que originó el problema.
Mejora la colaboración y la comunicación.
El control de versiones mejora la colaboración de múltiples maneras. Dado que el control de versiones puede identificar cambios conflictivos, es decir, cambios incompatibles realizados en las mismas líneas de código, hay menos necesidad de coordinación entre los desarrolladores. [ 24 ]
El empaquetado de confirmaciones, ramas y todos los mensajes de confirmación y etiquetas de versión asociados mejora la comunicación entre desarrolladores, tanto en el momento como a lo largo del tiempo. [ 25 ] Una mejor comunicación, ya sea instantánea o diferida, puede mejorar el proceso de revisión de código, el proceso de pruebas y otros aspectos críticos del proceso de desarrollo de software.
Integración
Algunas de las herramientas de control de versiones más avanzadas ofrecen muchas otras funcionalidades, lo que permite una mayor integración con otras herramientas y procesos de ingeniería de software.
entorno de desarrollo integrado
A menudo hay plugins disponibles para IDE como Oracle JDeveloper , IntelliJ IDEA , Eclipse , Visual Studio , Delphi , NetBeans IDE , Xcode y GNU Emacs (a través de vc.el). Los prototipos de investigación avanzada generan mensajes de confirmación apropiados. [ 26 ]
Terminología común
La terminología puede variar de un sistema a otro, pero algunos términos de uso común incluyen: [ 27 ]
Base
Una revisión aprobada de un documento o archivo fuente a la que se pueden realizar cambios posteriores. Véase líneas base, etiquetas y rótulos .
Culpa
Una búsqueda del autor y la revisión que modificó por última vez una línea en particular.
Rama
Un conjunto de archivos bajo control de versiones puede ramificarse o bifurcarse en un momento dado, de modo que, a partir de ese momento, dos copias de esos archivos puedan desarrollarse a velocidades diferentes o de maneras diferentes, independientemente una de la otra.
Cambiar
Un cambio (o diff , o delta ) representa una modificación específica de un documento bajo control de versiones. El grado de detalle de la modificación considerada como un cambio varía entre los sistemas de control de versiones.
Lista de cambios
En muchos sistemas de control de versiones con confirmaciones atómicas de múltiples cambios, una lista de cambios (o CL ), un conjunto de cambios , una actualización o un parche identifica el conjunto de cambios realizados en una sola confirmación. Esto también puede representar una vista secuencial del código fuente, lo que permite examinar el código fuente a partir de cualquier ID de lista de cambios específico.
Verificar
Extraer un archivo (o copiarlo ) significa crear una copia de trabajo local desde el repositorio. Un usuario puede especificar una revisión concreta u obtener la más reciente. El término «extraer» también se usa como sustantivo para describir la copia de trabajo. Cuando un archivo se ha extraído de un servidor de archivos compartido, otros usuarios no pueden editarlo. Es como en un hotel: al salir, ya no se tiene acceso a sus servicios.
Clon
Clonar significa crear un repositorio que contenga las revisiones de otro repositorio. Esto equivale a enviar o recibir cambios a un repositorio vacío (recién inicializado). Dos repositorios se consideran clones si se mantienen sincronizados y contienen las mismas revisiones.
Comprometerse (sustantivo)
En el software de control de versiones, un conjunto de cambios (también conocido como commit [ 28 ] y revisión [ 29 ] [ 30 ] ) es un conjunto de modificaciones empaquetadas juntas, junto con metainformación sobre dichas modificaciones. Un conjunto de cambios describe las diferencias exactas entre dos versiones sucesivas en el repositorio de cambios del sistema de control de versiones. Los sistemas de control de versiones suelen tratar los conjuntos de cambios como una unidad atómica , un conjunto indivisible. Este es un modelo de sincronización . [ 31 ] [ 32 ]
Cometer (verbo)
Confirmar ( o , más raramente, instalar , enviar o registrar ) significa escribir o fusionar los cambios realizados en la copia de trabajo en el repositorio. Una confirmación contiene metadatos, normalmente la información del autor y un mensaje que describe el cambio.
Mensaje de confirmación
Una breve nota, escrita por el desarrollador y almacenada junto con la confirmación, que describe dicha confirmación. Idealmente, registra el motivo de la modificación, una descripción de su efecto o propósito, y aspectos menos evidentes de su funcionamiento.
Conflicto
Se produce un conflicto cuando distintas partes modifican el mismo documento y el sistema no puede conciliar dichos cambios. El usuario debe resolver el conflicto combinando las modificaciones o seleccionando una en lugar de la otra.
Compresión delta
La mayoría del software de control de versiones utiliza compresión delta , que conserva únicamente las diferencias entre versiones sucesivas de los archivos. Esto permite un almacenamiento más eficiente de muchas versiones diferentes de archivos.
Flujo dinámico
Una secuencia en la que algunas o todas las versiones de los archivos son réplicas exactas de las versiones de la secuencia principal.
Exportar
Exportar consiste en obtener los archivos del repositorio. Es similar a extraerlos, con la diferencia de que crea una estructura de directorios limpia, sin los metadatos de control de versiones que se utilizan en una copia de trabajo. Esto se suele usar, por ejemplo, antes de publicar el contenido.
Buscar
Ver tirar .
Integración hacia adelante
El proceso de integrar los cambios realizados en la rama principal en una rama de desarrollo (de funcionalidad o de equipo).
Cabeza
También llamado a veces punta , se refiere a la confirmación más reciente, ya sea en el tronco o en una rama. El tronco y cada rama tienen su propia cabeza, aunque HEAD a veces se usa de forma imprecisa para referirse al tronco. [ 33 ]
Importar
La importación consiste en copiar por primera vez un árbol de directorios local (que actualmente no es una copia de trabajo) en el repositorio.
Inicializar
Para crear un repositorio nuevo y vacío.
deltas intercalados
Algunos programas de control de versiones utilizan deltas intercalados , un método que permite almacenar el historial de archivos de texto de una manera más eficiente que mediante la compresión delta .
Etiqueta
Ver etiqueta .
Cierre
Cuando un desarrollador bloquea un archivo, nadie más puede actualizarlo hasta que se desbloquee. El bloqueo puede realizarse mediante el sistema de control de versiones o a través de comunicaciones informales entre desarrolladores (lo que se conoce como bloqueo social ).
Chutarse
Similar a trunk , pero puede haber una rama principal para cada rama secundaria.
Unir
Una fusión o integración es una operación en la que se aplican dos conjuntos de cambios a un archivo o conjunto de archivos. Algunos ejemplos de escenarios son los siguientes:
- Un usuario, que trabaja en un conjunto de archivos, actualiza o sincroniza su copia de trabajo con los cambios realizados y registrados en el repositorio por otros usuarios. [ 34 ]
- Un usuario intenta registrar archivos que han sido actualizados por otros desde que se extrajeron , y el software de control de versiones fusiona automáticamente los archivos (normalmente, después de preguntar al usuario si debe proceder con la fusión automática, y en algunos casos solo lo hace si la fusión se puede resolver de forma clara y razonable).
- Se crea una rama , se edita de forma independiente el código de los archivos y, posteriormente, la rama actualizada se incorpora a un único tronco unificado .
- Se crea una bifurcación a partir de un conjunto de archivos , se corrige un problema preexistente en una rama y, posteriormente, la corrección se integra en la otra rama. (Este tipo de fusión selectiva se conoce a veces como " cherry pick" para distinguirla de la fusión completa del caso anterior).
Promover
El acto de copiar el contenido de un archivo desde una ubicación menos controlada a una ubicación más controlada. Por ejemplo, desde el espacio de trabajo de un usuario a un repositorio, o desde un flujo a su padre. [ 35 ]
Tirar, empujar
Copiar revisiones de un repositorio a otro. La operación pull la inicia el repositorio receptor, mientras que la operación push la inicia el repositorio de origen. A veces, fetch se usa como sinónimo de pull , o para referirse a una operación pull seguida de una actualización .
Solicitud de extracción
Las contribuciones a un repositorio de código fuente que utiliza un sistema de control de versiones distribuido se realizan comúnmente mediante una solicitud de extracción, también conocida como solicitud de fusión. [ 36 ] El colaborador solicita al mantenedor del proyecto que extraiga el cambio del código fuente, de ahí el nombre de "solicitud de extracción". El mantenedor debe fusionar la solicitud de extracción para que la contribución pase a formar parte de la base de código fuente. [ 37 ]
El desarrollador crea una solicitud de extracción para notificar a los mantenedores sobre un nuevo cambio; cada solicitud de extracción tiene asociado un hilo de comentarios. Esto permite una discusión centrada en los cambios de código . Las solicitudes de extracción enviadas son visibles para cualquier persona con acceso al repositorio. Los mantenedores pueden aceptar o rechazar una solicitud de extracción. [ 38 ]
Una vez revisada y aprobada la solicitud de extracción, se integra al repositorio. Según el flujo de trabajo establecido, es posible que el código deba probarse antes de su inclusión en la versión oficial. Por lo tanto, algunos proyectos incluyen una rama especial para integrar solicitudes de extracción sin probar. [ 37 ] [ 39 ] Otros proyectos ejecutan un conjunto de pruebas automatizadas en cada solicitud de extracción, utilizando una herramienta de integración continua , y el revisor verifica que el código nuevo cuente con la cobertura de pruebas adecuada.
Repositorio
En los sistemas de control de versiones, un repositorio es una estructura de datos que almacena metadatos para un conjunto de archivos o una estructura de directorios . [ 40 ] Dependiendo de si el sistema de control de versiones en uso es distribuido, como Git o Mercurial , o centralizado, como Subversion , CVS o Perforce , todo el conjunto de información en el repositorio puede estar duplicado en el sistema de cada usuario o puede mantenerse en un solo servidor . [ 41 ] Algunos de los metadatos que contiene un repositorio incluyen, entre otras cosas, un registro histórico de cambios en el repositorio, un conjunto de objetos de confirmación y un conjunto de referencias a objetos de confirmación, llamados cabezas .
Resolver
El acto de intervención del usuario para resolver un conflicto entre diferentes cambios realizados en el mismo documento.
Integración inversa
El proceso de fusionar diferentes ramas de equipo en el tronco principal del sistema de control de versiones.
Reversión
El abandono de uno o más cambios recientes en favor de volver a una versión anterior del material en cuestión. Una reversión puede realizarse por muchas razones, entre ellas: corregir errores introducidos por ediciones anteriores; restaurar el material a un estado que no era controvertido hasta que se puedan resolver nuevas disputas; revertir la ampliación del alcance ; y realizar pruebas de regresión .
Revisión y versión
Una versión es cualquier cambio de forma. En SVK, una revisión es el estado en un momento dado de todo el árbol en el repositorio.
Compartir
El acto de hacer que un archivo o carpeta esté disponible en varias ramas simultáneamente. Cuando se modifica un archivo compartido en una rama, se modifica también en las demás.
Arroyo
Un contenedor para archivos ramificados que mantiene una relación conocida con otros contenedores similares. Los flujos forman una jerarquía; cada flujo puede heredar diversas propiedades (como versiones, espacio de nombres, reglas de flujo de trabajo, suscriptores, etc.) de su flujo principal.
Etiqueta
Una etiqueta o rótulo se refiere a una instantánea importante en el tiempo, consistente en muchos archivos. En ese momento, todos estos archivos pueden estar etiquetados con un nombre o número de revisión descriptivo y fácil de usar. Consulte líneas base, etiquetas y rótulos .
Trompa
El tronco es la única línea de desarrollo que no es una rama (a veces también llamada Línea base, Línea principal o Maestra [ 42 ] [ 43 ] ).
Actualizar
Una actualización (o sincronización , aunque sincronización también puede referirse a una combinación de envío y recepción ) fusiona los cambios realizados en el repositorio (por otras personas, por ejemplo) con la copia de trabajo local . Actualización es también el término utilizado por algunas herramientas de gestión de configuración (CM+, PLS, SMS) para el concepto de paquete de cambios (véase lista de cambios ). Sinónimo de extracción en sistemas de control de versiones que requieren que cada repositorio tenga exactamente una copia de trabajo (común en sistemas distribuidos).
Desbloqueo
Liberar un candado.
Copia de trabajo
La copia de trabajo es la copia local de los archivos de un repositorio, en un momento o revisión específicos. Todo el trabajo realizado en los archivos de un repositorio se realiza inicialmente en una copia de trabajo, de ahí su nombre. Conceptualmente, es un entorno aislado (sandbox) .
Véase también
- Control de cambios
- Registro de cambios
- Blockchain
- Comparación de software de control de versiones
- Comparación de plataformas de alojamiento de código fuente
- control de versiones de datos
- Control de versiones distribuido
- Lista de software de control de versiones
- Edición no lineal
- Gestión de la configuración del software
- Control de versiones del software
- Sistema de control de versiones
Notas
- ↑ En este caso, los búferes de edición son una forma secundaria de copia de trabajo y no se denominan como tal.
- ↑ En principio, dos revisiones pueden tener la misma marca de tiempo y, por lo tanto, no pueden ordenarse en una misma línea. Esto suele ocurrir con repositorios separados, aunque también es posible con cambios simultáneos en varias ramas de un mismo repositorio. En estos casos, las revisiones pueden considerarse como un conjunto de líneas independientes, una por repositorio o rama (o rama dentro de un repositorio).
- ↑ El "árbol" de revisión o repositorio no debe confundirse con el árbol de directorios de archivos en una copia de trabajo.
- ↑ Si una nueva rama se basa en HEAD, entonces topológicamente HEAD ya no es una punta, puesto que tiene un hijo.
- ↑ "Mainline" también puede referirse a la ruta principal en una rama separada.
Referencias
- 1 2 3 O'Sullivan, Bryan (2009). Mercurial: la guía definitiva . Sebastopol: O'Reilly Media, Inc. ISBN 978-0-596-55547-4Archivado del original el 8 de diciembre de 2019. Consultado el 4 de septiembre de 2015 .
- ↑ " Google Docs ", Ver qué ha cambiado en un archivo , Google Inc., archivado del original el 06/10/2022 , recuperado el 21/04/2021.
- ↑ Scott, Chacon; Straub, Ben (2014). Pro Git Segunda edición . Estados Unidos: Apress . pág. 14. Archivado del original el 25-12-2015 . Recuperado el 19-02-2022 .
- ↑ Goetz, Martin (3 de mayo de 2002). «Una entrevista con Martin Goetz» (Entrevista). Entrevistado por Jeffrey R. Yost. Washington, DC: Instituto Charles Babbage, Universidad de Minnesota. págs. 5–7 . Archivado del original el 26 de septiembre de 2024. Recuperado el 17 de agosto de 2023 .
- ↑ Piscipo, Joseph (3 de mayo de 2002). «Una entrevista con Joseph Piscopo» (Entrevista). Entrevistado por Thomas Haigh. Washington, DC: Instituto Charles Babbage, Universidad de Minnesota. págs. 3, 5, 12–13 . Archivado del original el 26 de septiembre de 2024. Recuperado el 17 de agosto de 2023 .
- ↑ Rochkind, Marc J. (1975). "The Source Code Control System" (PDF) . IEEE Transactions on Software Engineering . SE-1 (4): 364–370 . Bibcode : 1975ITSEn...1..364R . doi : 10.1109/TSE.1975.6312866 . S2CID 10006076. Archivado del original (PDF) el 30 de septiembre de 2020. Consultado el 3 de septiembre de 2020 .
- ↑ Tichy, Walter F. (1985). "Rcs — un sistema para control de versiones" . Software: Practice and Experience . 15 (7): 637– 654. doi : 10.1002/spe.4380150703 . ISSN 0038-0644 . S2CID 2605086. Archivado del original el 26 de septiembre de 2024. Recuperado el 28 de diciembre de 2023 .
- ↑ Collins-Sussman, Ben; Fitzpatrick, BW; Pilato, CM (2004), Control de versiones con Subversion , O'Reilly, ISBN 0-596-00448-6
- ↑ Loeliger, Jon; McCullough, Matthew (2012). Control de versiones con Git: Herramientas y técnicas potentes para el desarrollo colaborativo de software . O'Reilly Media. págs. 2–5 . ISBN 978-1-4493-4504-4Archivado del original el 26/09/2024 . Consultado el 22/03/2023 .
- ↑ Para planos de ingeniería, consulte Whiteprint#Control de documentos , para algunos de los sistemas manuales vigentes en el siglo XX, por ejemplo, los Procedimientos de ingeniería de Hughes Aircraft , cuya revisión requería la aprobación de Lawrence A. Hyland ; véanse también los procedimientos de aprobación instituidos por el gobierno de los Estados Unidos.
- ↑ Kim, Jin-Hyun; Han, Sung-Lim; Lee, Kwang-Hyeon (2013). "Un marco de control de revisiones basado en la web para datos de modelos CAD 3D". Revista Internacional de Ingeniería de Precisión y Fabricación . 14 (9): 1575– 1582. doi : 10.1007/s12541-013-0214-4 .
- ↑ Zitzman, Sharone (09/05/2023). "5 herramientas de control de versiones que los desarrolladores de juegos deberían conocer" . The New Stack . Recuperado el 29/11/2025 .
- ↑ "Colaboración y control de versiones en Unreal Engine | Documentación de Unreal Engine 5.7 | Comunidad de desarrolladores de Epic" . Epic Games Developer . Consultado el 29 de noviembre de 2025 .
- ↑ Smart, John Ferguson (2008). Java Power Tools . O'Reilly Media, Inc. pág. 301. ISBN 978-1-4919-5454-6Archivado del original el 26 de septiembre de 2024. Consultado el 20 de julio de 2019 .
- ↑ Sink, Eric (2011). Control de versiones mediante ejemplos (PDF) . Pyrenean Gold Press.
- ↑ Wheeler, David. "Comentarios sobre los sistemas de gestión de configuración de software (SCM) de software libre/de código abierto (OSS/FS)" . Archivado del original el 9 de noviembre de 2020. Recuperado el 8 de mayo de 2007 .
- ↑ GitLab. "¿Cuáles son las mejores prácticas de control de versiones de Git?" . gitlab.com . Consultado el 11 de noviembre de 2022 .
- ↑ Alessandro Picarelli (17 de noviembre de 2020). "El costo de no usar control de versiones" . Archivado del original el 19 de noviembre de 2022. Recuperado el 18 de noviembre de 2022. En
términos de horas de trabajo, te costará entre 6 y 48 veces más que usar control de versiones, y eso es para revertir un par de modelos para un solo desarrollador.
- ↑ Irma Azarian (14 de junio de 2023). "Una revisión del control de versiones de software: sistemas, beneficios y por qué es importante" . Archivado del original el 26 de septiembre de 2024. Recuperado el 18 de noviembre de 2022. Los
sistemas de control de versiones permiten comparar archivos, identificar diferencias y fusionar los cambios si es necesario antes de confirmar cualquier código. El control de versiones también es una excelente manera de realizar un seguimiento de las compilaciones de aplicaciones, ya que permite identificar qué versión se encuentra actualmente en desarrollo, control de calidad y producción.
- ↑ ReQtest (26/10/2020). "¿Cuáles son los beneficios del control de versiones?" . Archivado del original el 22/11/2022 . Recuperado el 21/11/2022 .
El historial del documento proporciona información invaluable sobre el autor y la fecha de edición. También indica el propósito de los cambios realizados. Tendrá un impacto en el desarrollador que trabaja en la última versión, ya que ayudará a resolver problemas experimentados en versiones anteriores. La capacidad de identificar al autor del documento permite al equipo actual vincular los documentos con colaboradores específicos. Esto, a su vez, permite al equipo actual descubrir patrones que pueden ayudar a corregir errores. Esto ayudará a mejorar la funcionalidad general del software.
- ↑ Chiradeep BasuMallick (06/10/2022). "¿Qué es el control de versiones? Significado, herramientas y ventajas" . Archivado del original el 19/11/2022 . Consultado el 18/11/2022 .
Los equipos de software pueden comprender la evolución de una solución examinando versiones anteriores mediante revisiones de código.
- ↑ Chiradeep BasuMallick (06/10/2022). "¿Qué es el control de versiones? Significado, herramientas y ventajas" . Archivado del original el 19/11/2022 . Consultado el 18/11/2022 .
Si se comete un error, los desarrolladores pueden retroceder en el tiempo y revisar iteraciones anteriores del código para remediar el error, minimizando así las molestias para todos los miembros del equipo.
- ↑ Chacon, Scott; Straub, Ben (2022-10-03). "Pro Git" (Edición versión 2.1.395-2-g27002dd ). Apress. Archivado del original el 26-09-2024 . Recuperado el 18-11-2022 .
La herramienta git bisect es una herramienta de depuración increíblemente útil que se utiliza para encontrar qué confirmación específica fue la primera en introducir un error o problema mediante una búsqueda binaria automática.
- ↑ Irma Azarian (14 de junio de 2023). "Una revisión del control de versiones de software: sistemas, beneficios y por qué importa" . Archivado del original el 26 de septiembre de 2024. Recuperado el 18 de noviembre de 2022. El
control de versiones es un proceso invaluable, especialmente cuando hay varios desarrolladores trabajando en una sola aplicación, porque les permite compartir archivos fácilmente. Sin control de versiones, los desarrolladores eventualmente interferirán entre sí y sobrescribirán cambios de código que alguien más puede haber realizado sin siquiera darse cuenta. El uso de estos sistemas permite extraer archivos para detectar modificaciones y luego, durante la confirmación, si los archivos han sido modificados por otro usuario, se recibirá una alerta y se permitirá fusionarlos.
- ↑ Jesse Phillips (21/01/2019) [12/12/2018]. "Git es una herramienta de comunicación" . Archivado del original el 19/11/2022 . Recuperado el 18/11/2022 .
Continúan las discusiones sobre el uso de rebase, merge y/o squash. Quiero centrarme en el punto clave de todas estas opciones: la comunicación.
- ↑ Cortes-Coy, Luis Fernando; Linares-Vasquez, Mario; Aponte, Jairo; Poshyvanyk, Denys (2014). "Sobre la generación automática de mensajes de confirmación mediante la síntesis de cambios en el código fuente". 2014 IEEE 14th International Working Conference on Source Code Analysis and Manipulation . IEEE. pp. 275–284 . doi : 10.1109/scam.2014.14 . ISBN 978-1-4799-6148-1. S2CID 360545 .
- ↑ Wingerd, Laura (2005). Practical Perforce . O'Reilly. ISBN 0-596-10185-6Archivado del original el 21/12/2007 . Consultado el 27/08/2006 .
- ↑ cambio en el glosario de Git
- ↑ revisión en el glosario de Git
- ↑ Entendiendo Mercurial - Mercurial
- ↑ Mercurial: ChangeSet archivado el 15 de enero de 2010 en Wayback Machine .
- ↑ "Comparativa de sistemas de control de versiones" . Iniciativa Better SCM. Archivado del original el 21 de marzo de 2009.
- ↑ Gregory, Gary (3 de febrero de 2011). "Trunk vs. HEAD en sistemas de control de versiones" . Java, Eclipse y otros datos técnicos . Archivado del original el 20 de septiembre de 2020. Consultado el 16 de diciembre de 2012 .
- ↑ Collins-Sussman, Fitzpatrick y Pilato 2004 , 1.5: SVN tour cycle resolve : 'La G significa merGed, lo que significa que el archivo tenía cambios locales desde el principio, pero los cambios provenientes del repositorio no se superpusieron con los cambios locales.'
- ↑ Manual de conceptos (Edición versión 4.7 ). Accurev. Julio de 2008.
- ^ Sijbrandij, Sytse (29 de septiembre de 2014). "Flujo de GitLab" . GitLab . Consultado el 4 de agosto de 2018 .
- 1 2 Johnson, Mark (8 de noviembre de 2013). "¿Qué es una solicitud de extracción?" . Oaawatch . Recuperado el 27 de marzo de 2016 .
- ↑ "Uso de solicitudes de extracción" . GitHub . Consultado el 27 de marzo de 2016 .
- ↑ "Cómo hacer una solicitud de extracción" . Atlassian . Consultado el 27 de marzo de 2016 .
- ↑ "SVNBook" . Consultado el 20 de abril de 2012 .
- ↑ "Conceptos y mejores prácticas de control de versiones" . 3 de marzo de 2018. Archivado del original el 27 de abril de 2020. Consultado el 10 de julio de 2020 .
- ↑ Wallen, Jack (22 de septiembre de 2020). "GitHub reemplazará master por main a partir de octubre: lo que los desarrolladores deben hacer ahora" . TechRepublic . Archivado del original el 8 de febrero de 2021. Recuperado el 24 de abril de 2022 .
- ↑ Heinze, Carolyn (24 de noviembre de 2020). "Por qué GitHub cambió el nombre de su rama principal a main" . TheServerSide . Archivado del original el 26 de mayo de 2022. Consultado el 24 de abril de 2022 .
Enlaces externos
- "Guía visual para el control de versiones", mejor explicada..
- Sink, Eric, "Control de versiones", SCM (cómo hacerlo)Los fundamentos del control de versiones.
- proceso de desarrollo de software
- Control de versiones
- Sistemas de control de versiones
- Comunicación técnica
- Sistemas de control de versiones distribuidos