Ventajas de usar control de versiones en tus proyectos de hardware

El control de versiones es una herramienta ampliamente conocida e implementada en el mundo de la programación, pero es muy posible que, si vienes de proyectos más físicos, como los que tratamos aquí, aún no lo utilices, lo cual es una lástima, ya que incorporar esta herramienta en tus proyectos te proporcionará más seguridad, más capacidad de resolver problemas, más posibilidades de colaboración y, sobre todo, más libertad a la hora de experimentar.

Ejemplo de estructura de proyecto de control de versiones.

¿Estás preparado para darle una vuelta a esta herramienta? En este artículo vamos a repasar las herramientas de control de cambios, sus puntos fuertes y todo lo que podrás hacer al incorporar esta herramienta en tus proyectos.

Qué exactamente es el control de versiones

El control de versiones es una herramienta que, como bien indica su nombre, nos permite realizar un control de los cambios que experimenta un proyecto, normalmente a través de un histórico de modificaciones sobre los archivos que componen el proyecto en sí.

No parece una función muy glamurosa, pero el disponer de un histórico de los cambios en cada uno de los archivos de un proyecto, en detalle, de tal manera que puedes llegar a saber con precisión qué línea o palabra se cambió en un momento determinado y por quien, te otorgará un mayor control sobre tu proyecto y te permitirá trabajar y colaborar de formas que  o podías antes.

Tipos de programas de control de versiones

Existen varios programas de gestión de cambios, basados en diferentes métodos de control de versiones, aunque en este artículo nos vamos a centrar en uno de los más populares y fáciles para iniciarse: Git.

En cuanto al uso de un programa de control de versiones, normalmente trabajamos por dos bandas: por un lado tenemos el programa local con el que gestionamos las versiones de nuestro proyecto, para el cual hace poco recomendé utilizar Github desktop:

Programas y software gratis imprescindible para proyectos de Arduino y Raspberry Pi
Comentaremos los programas gratis e imprescindibles para tus proyectos de Arduino, Raspberry Pi, programación o electrónica: KiCad, LTSpice, VS Code, Github desktop
Github desktop está entre los programas imprescindibles de Ardumaster.

Mientras que por otro tenemos el repositorio en sí, que es donde guardaremos toda la información sobre el versionado de nuestro proyecto. Este repositorio puede ser local, por lo que prescindiremos de una página o programa secundario y trabajaremos únicamente con nuestro programa de control de versiones, o puede estar alojado en un servidor; esta es la opción más común, pues nos otorga más seguridad al disponer de los datos en un segundo lugar (en caso de fallo o perdida de nuestro ordenador) y nos permite colaborar fácilmente con terceros trabajando en el mismo proyecto, aspecto que exploraremos luego en más detalle.

En cuanto a opciones para alojar nuestro repositorio, existen soluciones gratuitas y populares como github o bitbucket, o si lo prefieres, puedes alojar tu propio servidor de repositorios, con soluciones como la popular gitlab.

Por qué utilizar control de versiones

El control de versiones brilla a la hora de encontrar diferencias entre diferentes archivos, ya sea entre diferentes momentos en el tiempo o entre diferentes versiones hechas por diferentes personas o para probar soluciones diferentes, hasta el punto de poder encontrar cambios en palabras individuales.

Esta habilidad lo hace inmensamente potente en la programación, como se podría llegar a esperar, donde el cambio de unas poca líneas de código o incluso de un par de palabras puede a llegar a ser increíblemente significativo.

Cuando salimos de archivos simples de texto, como podrían ser los de un programa de ordenador o de incluso el contenido de este artículo, sin embargo, el control de versiones pierde mucha fuerza, ya que en archivos complejos, como podrían ser los que componen el diseño de nuestra última PCB o un esquemático para nuestro próximo circuito electrónico, cambian gran parte de su contenido al hacer pequeñas modificaciones, y ya no es posible ni siquiera saber a qué corresponde cada cambio.

Esto no significa que el control de versiones deje de sernos útiles fuera de los pocos casos en los que trabajemos exclusivamente con archivos de texto, únicamente deja de ser tan potente como lo sería en otros contextos. A continuación, expongo las grandes ventajas que nos proporcionará utilizar control de versiones en nuestros proyectos, tengan código (en cuyo caso recomiendo tener control de versiones aunque sea por eso únicamente) o no:

Hacer y deshacer

Es la aplicación más directa y fácil. Tener un control de versiones nos permite analizar en qué momento se cometió un error y bien solucionarlo en la versión actual o restaurar todos los archivos involucrados a antes de introducir el error.

No te limites a pensar en esto como únicamente una manera de deshacer errores, lo que realmente te otorga es libertad: la libertad de experimentar con soluciones o diseños que puede que no salgan bien, pero que siempre es interesante probar, con la seguridad de que tienes un punto de guardado, sin limitaciones temporales ni de espacio: aunque tu nueva propuesta no te haya convencido, siempre puedes volver a un puto anterior de desarrollo, sin importar que esta fuera hace más de dos meses o que hayas hecho cambios en veinte archivos diferentes desde ese punto.

Ten en cuenta que esta herramienta nos permite recuperar archivos eliminados, lo cual es inmensamente útil si eres propenso a darle al suprimir sin piedad, pero que esta habilidad viene unida por necesidad al hecho de que el sistema de control de versiones está almacenando en memoria todos los archivos que alguna vez has consagrado al sistema, por lo que, si no eres selectivo y añades archivos de gran tamaño, el peso del proyecto en sí no hará más que aumentar y puedes acabar con proyectos realmente grandes sin haberlo planeado.

Explora diferentes caminos

Hemos comentado en el punto anterior que el control de versiones nos permite explorar diferentes soluciones y volver atrás con libertad, lo que sería exploración vertical, pero el control de versiones también nos permite explorar horizontalmente.

Esto viene a ser la posibilidad de explorar soluciones paralelas, diseños que se exploran de forma simultánea o partiendo de la misma base. Por ejemplo, hace poco estuve diseñando una placa impresa basada en el popular microcontrolador Atmega 328, y quería utilizar varios puertos para un puente H integrado y otras funcionalidades. Tenía la duda de si prescindir de estos puertos como entradas o salidas genéricas I/O y dedicarlas completamente al control de estos periféricos o de incorporar un mecanismo para encender o apagar los periféricos y de esta manera poder utilizar estos puertos de forma independiente. Estos cambios no solo suponían un cambio en el enrutado de la placa impresa, sino que también impactaban de forma importante la geometría de la placa y el emplazado del resto de componentes, por lo que decidí realizar dos diseños diferentes, cada uno en su “rama” en el control de versiones, y así disponer tanto de la posibilidad de ir hacia atrás en el tiempo, haciendo y deshaciendo cambios, como de poder cambiar de diseño fácilmente al saltar de rama en rama.

Colabora con tus compañeros

El hecho de tener controlado donde se han realizado cambios nos permite colaborar con terceros a la hora de trabajar en proyectos en grupo, puesto que, siempre que los cambios no se realicen sobre la misma parte del mismo archivo, juntar versiones se puede hacer de forma automática.

Incluso con cambios sobre las mismas partes de los mismos archivos, es posible decidir, línea por línea, que versión preferimos, aunque recuerda que si se trata de un archivo que no es de texto, no vas a poder saber qué es lo que estas cambiando y, por lo tanto, recomiendo andar con cuidado y solo tocar los archivos que habéis acordado de antemano al trabajar con ficheros de diseño.

Conclusiones

Ahora que conoces el control de versiones, seguro que estas deseoso de implementarlo en tu próximo proyecto. ¡Espero haberte podido convencer y facilitarte el trabajo en tus próximos diseños!