Git para seres humanos

Seguro que si no conoces nada del control de versiones, o ni siquiera sabes lo que es el control de versiones, te habrás preguntado ¿Que es esto de Git para seres humanos?. Pues vayamos de menos a mas. ¿Que es eso del control de versiones? Simplemente es un sistema que nos permite gestionar los cambios que se producen en uno o varios archivos de texto sin formato (lo que vulgarmente conocemos como texto plano). Esto, cuando eres el único que realizas cambios sobre los archivos, tiene su aquel, pero ¿Que sucede cuando sois varios los que trabajáis sobre varios archivos? Ahí es donde toma protagonismo el control de versiones. Y ¿Que es Git? Pues es un sistema de control de versiones creado por Linus Torvalds (el mismo creador de Linux), junto con otros desarrolladores en 2005, para la implementación kernel de Linux*. Git permite hacer gran cantidad de operaciones, sin embargo, en este artículo verás lo básico, para sacar el máximo provecho para tus necesidades, y de ahí que se trate de Git para seres humanos.

Te puede parecer que eso del control de versiones no es para ti. Algo que está pensado para desarrolladores de código, no es para seres humanos, pero nada mas lejos de la realidad. Cuando tienes que hacer un trabajo colaborativo, un sistema de control de versiones, no solo es una gran ayuda, es algo imprescindible. ¿Porqué? Os permite trabajar a todos de forma completamente independiente, y descentralizada, pero sobre todo colaborativa.

¿Como utilizar Git en tu trabajo diario y en tu vida personal? La respuesta la tienes aquí, en Git para seres humanos

Git para seres humanos

Git para seres humanos

Antes que nada, indicarte que en este artículo no vas a encontrar una profunda guía de Git. Si eso es lo que buscas o necesitas, te recomiendo un serie de artículos sobre Git y GitHub, publicados en Colaboratorio, donde se hace un barrido completo, de principio a fin.

Con este artículo, lo que pretendo es que veas, que es el control de versiones y que es Git. De esta forma, tu mismo, serás el que descubras su potencial. Así, puedes decidir si puedes aprovechar increíble tecnología y si lo puedes incorporar en tu flujo normal de trabajo. Se trata de que tengas una visión general de todas las posibilidades y que entiendas como puedes introducirte en ello, se trata de mostrar Git para seres humanos.

Quiero insistir en el asunto de que aunque esta herramienta fué creada por desarrolladores, y teniendo en mente el desarrollo de software, es perfectamente aplicable a cualquier otra disciplina. El único requisito que debe cumplir, es que trabajes con archivos de texto.

Esto puede ser en principio un inconveniente, pero no lo es tanto, si te planteas la ventaja que supone trabajar con archivos de texto. Y es que los archivos de texto, son una ventaja tanto desde el punto de vista del tamaño, como desde el punto de vista de la productividad.

Así, te recomiendo que leas el artículo sobre Markdown,y el artículo sobre como hacer presentaciones eficaces. El primero de los artículos te servirá para descubrir como escribir de forma totalmente productiva, mientras que el segundo, te mostrará como crear presentaciones con archivos de texto. Cualquiera de estos dos artículos te mostrará el potencial de trabajar con archivos de texto sencillo, y el potencial que puedes sacar, permitiéndote centrar en el contenido, y dejar al margen el aspecto estético.

Sobre el control de versiones

En la introducción ya he explicado, en pocas palabras, que es un sistema de control de versiones. Sin embargo, quiero dar una pincelada rápida, sobre los sistemas de control de versiones. Así entenderás porque Git ha terminado por conquistar el corazón de gran parte de la comunidad de desarrolladores.

Existen, a grandes rasgos, tres sistemas de control de versiones,

  • Locales
  • Centralizado
  • Distribuido

Puedes encontrar una explicación sobre estos tres sistemas en Colaboratorio. Por simplificar, los locales se encuentran en el propio equipo. Los centralizados se encuentran en un servidor externo. En los sistemas de control distribuidos, cada uno de los que trabajan en el proyecto tienen una copia del mismo. Git es un sistema de control de versiones distribuido.

Así, cada uno de los miembros del equipo de proyecto, realiza las modificaciones sobre su copia local. Una vez, realizadas las modificaciones las sube al repositorio central, y allí, el gestor del proyecto, se encarga de mezclarlas convenientemente. Quizá, sea esta parte, la de la mezcla, la mas compleja. Sin embargo, por ahora no te debes preocupar de esto.

Ya te puedes imaginar las ventajas de todo esto. No te tienes que preocupar de que le pase algo a tu copia local, pues hay una copia central. Bueno, no es del todo cierto, porque es posible, que pierdas tus últimos cambios. Por otro lado, no estás trabajando directamente en la nube, lo cual puede ser un problema si tienes una conexión limitada, y te puede llevar a perder parte de la información.

Digamos que, un sistema de control de versiones distribuido, tiene las ventajas de los otros dos sistemas, pero no sus inconvenientes.

¿Que nos permite el sistema de control de versiones?

Un sistema de control de versiones nos permite, de forma sencilla, gestionar todos los cambios que realizamos en nuestros archivos.

Pero, ¿Con que fin queremos gestionar los cambios?. El objeto es permitir realizar variaciones sobre un documento, pero con la posibilidad de recuperar una versión anterior o distinta.

De esta forma, si estamos redactando unos estatutos, podemos añadir un artículo en varias versiones, y posteriormente tomar una u otra versión. Incluso pasadas las versiones, podemos recuperar una versión original. ¿Te haces ya una idea del potencial del control de versiones?.

Trabajando con Git

Una vez ya has el potencial del control de versiones, el siguiente paso es que veas como trabajar con Git. Para que te hagas una idea, un archivo puede estar en varios estados,

  • Descontrolado. Se trata de un archivo que está en el directorio donde estás haciendo tu control de versiones, pero que no está sometido al Git.
  • Controlado. En este caso el archivo si que está supervisado por Git. Dentro de este estado, nos podemos encontrar tres posibilides,
    • Modificado. Aquí, hemos realizado cambios sobre el archivo, sin embargo, estos cambios no están registrados. Puedes volver a modificarlos y cambiarlos, sin embargo, todos estos cambios se perderán.
    • Archivado temporal. En este caso, los cambios se registran, y es posible volver a un estado anterior de los cambios realizados. Este archivado es de solo local, es decir, estos cambios no se subirán al repositorio central.
    • Archivado confirmado. Este es un paso mas del anterior. Los cambios incluidos se subirán al repositorio central.
    • Actualizado. En este caso el archivo no ha sufrido ningún tipo de modificación.

Así, para subir un archivo al repositorio central, tenemos que modificarlo, archivarlo de forma temporal y confirmar los cambios. Luego lo podemos subir.

Esto que puede parecer muy farragoso, se traduce en los siguientes comandos en un terminal,

  • Tanto para pasar de descontrolado a controlado, como para pasar de modificado a archivado temporal utilizaremos git add archivo.txt.
  • Para confirmar los cambios git commit -m "confirmados los cambios".
  • Para subir los cambios al repositorio central git push -u origin master.

A lo mejor te puede parecer algo enrevesado o complejo o ambas cosas, pero nada mas lejos de la realidad. Cuando has incorporado todo esto a tu flujo de trabajo es cuestión de coser y cantar.

Por otro lado, si quieres actualizar tu archivos locales con el repositorio central, tan solo tienes que ejecutar git pull.

Ahora vamos a realizar los pasos inversos,

  • Para pasar un fichero que esté archivado temporalmente, tenemos que ejecutar git reset archivo.txt.
  • Si lo que queremos es pasar de un archivo del estado confirmado al estado temporal ejecutaremos git reset HEAD~

Por último es interesante tener en mente la orden git status, que nos permite conocer en cualquier momento el estado de nuestro repositorio.

Entiendo que visto esto puedas pensar que esto de Git para seres humanos, es algo pretencioso, sin embargo, si tienes algún conocimiento del terminal, verás que no es nada complicado. Si, por el contrario no te manejas con el terminal, no te preocupes, aún hay dos opciones, para trabajar con el control de versiones.

El repositorio central. GitLab

Pero ¿donde está nuestro repositorio central? Actualmente existen diferentes servicios que nos permiten alojar nuestro repositorio central. Así, tenemos entre otros GitHub o GitLab. En particular, me decanto por este segundo por tratarse de software libre.

¿Que nos ofrece GitLab? GitLab nos ofrece la posibilidad de editar nuestros archivos directamente en la página web. Actualmente dispone, de un potente editor gráfico, con resaltado de sintaxis, lo que nos facilita convenientemente el trabajo. Esto nos permite trabajar en cualquier sitio y en cualquier momento, directamente sobre los archivos que se encuentran en el repositorio, sin ni siquiera la necesidad de realizar una copia local.

Esta es una sencilla manera de comenzar con el control de versiones, en particular, es una manera de ver Git para seres humanos. Lo cierto, que esta forma es la que hemos utilizado recientemente para realizar varios documentos colaborativos. La gracia, en este caso, es que algunos de los participantes, no tenían ningún conocimiento de Git, ni del control de versiones. Así, puedo decir, que este ha sido un claro caso de Git para seres humanos.

Gestión gráfica. Visual Studio Code y Git para seres humanos

Probablemente, esto de utilizar el terminal para gestionar el control de versiones, te pueda resultar algo complejo, aunque todo es cuestión de aprender…. Sin embargo, no quiero que por esto, pierdas el potencial que tiene el control de versiones.

Soy consciente de que de primeras puede resultar algo tedioso, pero una vez lo integras en tu flujo de trabajo, tiene un gran potencial. Pero, como digo, no quiero que lo dejes por el simple hecho de que no te haces con el terminal… Así la solución, la tienes en una potente herramienta como es Visual Studio Code, por ponerte un ejemplo.

Visual Studio Code integra por defecto el contro de versiones, sin necesidad de añadir ningún complemento, viene así, por defecto. De esta forma, pasar por los diferentes estados de los archivos, se convierte en una sucesión de colores y ubicaciones dentro del panel lateral. De esta forma, en cualquier momento, sabes en que estado se encuentra cada archivo.

Así, en el panel, lateral tienes una zona llamada cambios donde se recogen todos las modificaciones llevadas en archivos. Ya sea porque se trata de archivos descontrolados, en cuyo caso van marcados con una U o por que a pesar de estar bajo control, los has modifcado, en cuyo caso van marcados con una M.

Situándote sobre cada uno de los archivos, en la zona cambios, aparecerán tres iconos,

  • abrir archivo
  • descartar cambios
  • almacenar cambios provisionalmente

Si, pulsas sobre el icono de almacenar los cambios provisionalmente pasará a la zona de cambios almacenados provisionalmente. En esta zona, al situarte sobre cualquier archivo, aparecerán dos iconos,

  • abrir archivo
  • cancelar almacenamiento provisional de los cambios

En la parte superior del panel, encontrarás dos iconos. Uno para actualizar y el segundo para confirmar los cambios que has almacenado de forma provisional. Al pulsar sobre el icono de confirmar los cambios, aparecerá un cuadro de texto para que introduzcas el mensaje de confirmación. Una vez introducido el mensaje de confirmación, se realizará el commit.

En ese caso, verás que en la parte inferior de Visual Studio Code, aparecerá un 1 junto a una flecha hacia arriba, indicándote que hay una confirmación para subir al repositorio central. Si al pulsar el botón de actualizar, encuentra cambios en el repositorio central, esto se marcará de igual forma indicándote los cambios con una flecha hacia abajo.

Sencillo e intuitivo, ¿no te parece?.

Conclusión

Como has podido ver, el control de versiones tiene un gran potencial, con independencia del trabajo que realices. Incorporado a tu flujo normal de trabajo, puede ser un gran aliado en tu productividad.

Eso si, lo que hemos visto en Git para seres humanos, no es mas que la punta del iceberg de las posibilidades que ofrece el control de versiones, sin embargo, para tu trabajo diario, con esto que has leído aquí es mas que suficiente. Simplemente te invito a que lo pienses, y si puedes lo pruebes.

Para que te hagas una idea, yo todos los artículos que lees en este sitio, los tengo en un repositorio de GitLab. Los artículos los escribo utilizando Markdown. Posteriormente, los convierto a html y los añado a WordPress. Pensarás que este flujo de trabajo, no es el más cómodo. Sin embargo, te puedo asegurar que a mi me resulta de lo mas productivo y, sobre todo, seguro. De esta manera siempre tengo una copia de los artículos, tanto en un repositorio local, como en GitLab. Así, cuando por lo que sea, necesito hacer una versión de un artículo, tan solo necesito tirar de repositorio.

Por último, indicarte, que si te parece interesante el tema del control de versiones, y quieres ir un poco mas allá de Git para seres humanos,, tan solo tienes que recurrir a la serie de artículos sobre Git y GitHub, que encontrarás en Colaboratorio.

Ánimate y pásate a la productividad segura con el control de versiones.


Más información,