Ir al contenido principal

Control de Versiones

El control de versiones, es una fuente de paz mental. Podemos pensar en los sistemas de control de versiones como un Ctrl+Z superdotado, en el cual se pueden guardar todos los cambios que queramos, incluso si cerramos el editor.

Es necesario entender que los sistemas de control versiones trabajan con repositorios. Usualmente un repositorio es una carpeta, y se guardan versiones de todo lo que está en la carpeta.


Código Fuente

Hasta este punto lo que he dicho aplica tanto a sistemas de automatización de copias de seguridad como sistemas de control de versiones de código fuente. En adelante hablaré de estos últimos únicamente.

Una característica importante del control de versiones, es que nos obliga a documentar los cambios. Esto puede parecer una desventaja, puesto que supone que para cambio que queremos guardar, tenemos que escribir una descripción (bueno, siempre podemos escribir tonterías)... sin embargo, tiene sus ventajas:

  • Al agregar un costo a guardar un cambio, nos hace considerar si hemos hecho un cambio importante.
  • Al tener descripciones de los cambios, es más fácil encontrarlos en el historial de cambios.
  • Podemos usarlos para contar una historia de las cosas que hacemos. Los cambios no necesariamente ocurren en el orden que los hacemos (esto es debido a que podemos pensar los cambios que vamos a hacer, antes de hacerlos). Pero podemos describir los cambios en un orden que tiene sentido.

Nota: No está de más programar nuestro editor para que guarde a archivo automáticamente. En particular cuando sabemos que tenemos versiones guardadas en un sistema de control de versiones (y que el servicio eléctrico puede fallar).


Cosas que los sistemas de control versiones no son

  • Un lugar para documentar porqué el código es como es. Es posible usarlos para documentar porqué se realizó un cambio. Sin embargo, los comentarios son un mejor lugar para explicar porqué el código es como es.
  • Un lugar para documentar tareas por hacer. Con suerte, tenemos una solución para manejar listas de tareas o para gestión de proyectos. Y si no la tenemos, es mejor escribir en comentarios lo que falta por hacer.
  • Un lugar para compartir archivos.

Oportunidades de los sistemas de control de versiones

A pesar que podemos pensar en un sistema de control de versiones como un Ctrl+Z, no son solo eso. Lo primero que debemos considerar es que podemos tener varias copias del mismo repositorio. Permitiéndonos explorar varios posibles caminos para continuar el desarrollo, y permitiéndonos combinar los cambios.En general, estos sistemas manejan el concepto de "ramas" el cual permite hacer estas cosas en una sola copia del repositorio.

Otra ventaja de tener copias del repositorio, es que podemos tener una copia en un servidor remoto y otra local. De forma que podemos sincronizar todas las copias que hacemos con el servidor remoto.Y por esto es que tengo que decir que no son un lugar para compartir archivos.

Una vez tenemos una copia del repositorio en un servidor y otras copias locales que podemos combinar y sincronizar, es natural dar copias a varios programadores y de esa forma permitir que trabajen juntos en el mismo proyecto.

Nota: El sistema de control de versiones documenta quien hizo que cambio en que archivo y en que momento. Por favor no incluir esta información en comentarios. Gracias.

Addendum: Otros software pueden vigilar el estado del repositorio y realizar acciones cuando se guarda una nueva versión. Por ejemplo, esto puede ser útil para compilar el código, ejecutar pruebas automatizadas, empaquetar los archivos, crear ejecutables, subirlos a un sitio web, etc...


Sistemas Distribuidos

Lo que he dicho hasta ahora aplica tanto a sistemas de control de versiones de código fuente centralizados y distribuidos. En adelante hablare de estos últimos.

Si usamos un sistema distribuido, no tenemos la necesidad de establecer un servidor central al que se sincronizar todos las demás copias. En su lugar podemos sincronizar la copia de un programador directamente con la de otro. O podemos tener varios servidores remotos.

También nos dan la libertad de crear un repositorio local, sin tener que considerar que servidor o servidores vamos a usar. Eso se puede resolver después.

Lamentablemente, en el Internet moderno, todos vivimos detrás de una NAT lo cual hace la conexión directa entre programadores difícil (pero no imposible), a menos que se encuentren en la misma intranet. Debido a esto, solemos elegir un servidor remoto de todas formas.

Comentarios