"¡Hola, amigo!"

"¡Hola!"

"Hoy les hablaré sobre los sistemas de control de versiones".

"Como probablemente ya sepa, los programas suelen ser muy grandes y tardan mucho tiempo en escribirse. A veces, decenas de personas pueden pasar años escribiendo un programa".

"Los proyectos con millones de líneas de código son una realidad".

"Guau".

"Todo es muy complicado. Las personas a menudo interfieren entre sí y, a menudo, modifican el mismo código, y así sucesivamente".

"Para poner orden en este lío, los programadores comenzaron a usar sistemas de control de versiones para su código".

" Un sistema de control de versiones es un programa que consta de un cliente y un servidor.

"El programa almacena datos (el código escrito por los programadores) en un servidor, y los programadores lo agregan o lo modifican usando clientes".

"La principal diferencia entre un sistema de control de versiones y los programas que simplemente permiten trabajar en colaboración en documentos es que almacena todas las versiones anteriores de todos los documentos (archivos de código)".

"¿Puedes darme más detalles? ¿Cómo funciona todo?"

"Imagina que eres programador y quieres hacer pequeños cambios en el código fuente de un programa almacenado en un repositorio en el servidor".

"Esto es lo que tienes que hacer:"

"1) Inicie sesión en el servidor".

"2) Copie la última versión de todos los archivos a su computadora usando el comando Checkout".

"3) Realice cambios en los archivos requeridos".

"4) Ejecute el programa localmente para asegurarse de que compila y se ejecuta".

"5) Envía tus 'cambios' al servidor usando el comando Confirmar".

"Eso generalmente tiene sentido".

"Pero hay más. Imagina que llegas al trabajo por la mañana, pero ya es la hora del almuerzo en la India. Entonces, tus colegas indios ya hicieron cambios y confirmaron sus cambios en tu repositorio en el servidor".

"Necesita trabajar con la última versión del código. Así que ejecuta el comando Actualizar ".

"¿En qué se diferencia eso de Checkout ?"

" Checkout está diseñado para copiar todos los archivos del repositorio, pero Update solo actualiza los archivos que se han actualizado en el servidor desde la última vez que ejecutó un comando Checkout / Update ".

"Así es aproximadamente cómo funciona:"

Pago :

Sistemas de control de versiones - 1

"Ahora, digamos que cambiamos el archivo B y queremos cargarlo en el servidor. Para hacer esto, necesitamos usar el comando Confirmar ".

Sistemas de control de versiones - 2

"Y así es como funciona el comando Actualizar :"

Sistemas de control de versiones - 3

"¡Qué interesante! ¿Hay otros comandos?"

"Sí, hay bastantes. Pero varían según el programa de control de versiones que elija. Por lo tanto, estoy tratando de explicar los principios generales".

"También hay una operación llamada fusión: la unión de dos documentos. Supongamos que dos programadores modifican el mismo archivo al mismo tiempo. Entonces el programa en el servidor no permitirá que se confirmen ambos cambios. El que confirme primero puede agregar su o sus cambios".

"Entonces, ¿qué hace la otra persona?"

"Se le invitará a realizar una operación de actualización para obtener los últimos cambios del servidor. Por cierto, esto, hacer una actualización antes de confirmar, es una buena práctica".

"Luego, durante la operación de actualización, el programa cliente intentará fusionar los cambios locales con los cambios recibidos del servidor".

"Si los programadores cambiaron diferentes partes del archivo, entonces el programa de control de versiones probablemente podrá fusionarlos con éxito.  Si los cambios están en el mismo lugar, entonces el programa de control de versiones informará un conflicto de fusión y pedirá al usuario que realice manualmente combinar los cambios".

"Por ejemplo, esto sucede a menudo cuando ambos programadores agregan algo al final de un archivo".

"Ya veo. En general, eso parece razonable".

"Y hay una cosa más: ramas".

"Imagínese que dos programadores de un equipo tienen la tarea de reescribir el mismo módulo. O incluso mejor, reescribirlo desde cero. Hasta que se complete este módulo, el programa no podrá ejecutarse y es posible que ni siquiera se compile".

"Entonces, ¿qué se supone que deben hacer?"

"Avanzan agregando ramas al repositorio. En términos generales, esto significa que el repositorio se divide en dos partes. No por archivos o directorios, sino por versiones".

"Imagínese que la electricidad nunca se descubrió y los robots nunca se inventaron. Entonces las tres guerras de liberación nunca habrían sucedido, y toda la historia humana habría seguido un camino completamente diferente " .

"Este camino es una rama alternativa de la historia".

"O simplemente puede intentar imaginarse una rama simplemente como una copia del repositorio. En otras palabras, en algún momento, hicimos un clon del repositorio en el servidor, de modo que, además del repositorio principal (a menudo llamado tronco ), tenemos otra sucursal ".

"Bueno, eso parece más comprensible.

"¿Por qué no pudiste simplemente decir que copiamos el depósito?"

"Esto no es una simple copia".

"Estas ramas no solo pueden separarse del tronco, sino también fusionarse con él".

"En otras palabras, se puede hacer algo de trabajo en una rama, y ​​luego, cuando haya terminado, ¿puede agregar la rama del repositorio al tronco del repositorio?"

"Sí."

"¿Y qué pasará con los archivos?"

"Los archivos se fusionarán".

"Bueno, eso suena genial. Espero que sea igual de genial en acción".

"Y algo más. Está bien, tomemos un descanso".

"Hay un montón de información útil  aquí "