Introducción a GIT para no desarrolladores


Hoy en día, el uso de GIT o de cualquier otra herramienta de control de versiones, no es opcional a la hora de desarrollar proyectos en equipo, ya sean tecnológicos o de otro tipo.

Para desarrollar nuestros productos, en Simettric formamos equipos entre profesionales de diferentes perfiles: diseñadores, profesionales de comunicación y copy, gestores de contenido, traductores… necesitamos que todos ellos puedan acceder y trabajar de modo seguro a ciertas partes del proyecto e incluso al código en sí, sin pisar el trabajo del otro.

El objetivo de este artículo, es el de proveer de una guía comprensible a profesionales no desarrolladores de software para que puedan integrarse en nuestro flujo de trabajo gracias a GIT.

En esta guía vamos a mostrar cómo usar git bajo MacOSX, Linux o cualquier sistema que tenga una línea de comandos Bash. (En Windows gracias al cliente gratuito de GIT disponible para esta plataforma se puede emular, pero haremos una guía específica para ese entorno en el futuro).

¿Por qué usar GIT?

Existen otros sistemas de control de versiones, pero GIT es actualmente el más utilizado por su facilidad de uso y también, gracias a servicios populares como github o bitbucket, que nos dan herramientas muy potentes para trabajar en equipo, siendo gratuitas para proyectos abiertos u Open Source. Hablaremos de estos servicios más adelante en este artículo.

Git nos da ventajas tanto si trabajamos de forma solitaria como si lo hacemos en equipo.

  • Podemos tener registrado cada cambio en los archivos en los que trabajemos y volver a cada uno de ellos en todo momento
  • Podemos incluso crear diferentes ramas, pudiendo avanzar con cambios en los archivos de forma independiente en cada una de ellas, de una forma más cómoda y segura que si tuviésemos una copia de la carpeta de nuestro proyecto
  • Si trabajamos en equipo, podemos ver quién ha cambiado los archivos en todo momento y volver a versiones anteriores
  • También podemos ver, en el caso de archivos de texto, qué líneas han cambiado exactamente y quien ha registrado los cambios
  • Si trabajamos en equipo, podemos crear una rama mientras el resto trabaja en una versión anterior, nosotros avanzar con una versión nueva y cuando estos cambios estén validados y listos, añadirlos a la rama en la que trabaja todo el equipo.

En esta guía no vamos a entrar en el uso de ramas para no complicar innecesariamente la introducción. En futuros artículos, cursos y workshops hablaremos en detalle sobre este y otros temas.

En Simettric también tenemos la filosofía de usar pocas ramas y nuestros colaboradores no desarrolladores suelen trabajar por lo general en una única rama, la principal o “master” del proyecto.

Repositorios

Un repositorio no es más que “la carpeta” del proyecto que contiene los archivos con los que vamos a trabajar. De hecho, para crear un repositorio en nuestro ordenador, lo único que deberíamos hacer es crear la carpeta en sí e inicializar un repositorio en ella.

Vamos a hacerlo desde el Terminal.

Nota:

Si no tienes costumbre de utilizar la línea de comandos, te recomiendo este tutorial para aprender lo básico, necesario para operaciones rutinarias con GIT.

Paso 1. Abrimos el terminal

Al abrir el Terminal, por defecto se nos sitúa en “la carpeta Home” de nuestro usuario. Para saber donde estamos, podemos mostrar nuestro directorio actual escribiendo siguiente comando

Al pulsar enter nos aparecerá nuestra ruta actual, en mi caso /Users/asier.

Paso 2. Vamos al directorio en el cual queremos crear la carpeta y la creamos

Nuestro objetivo va a ser ir al escritorio y crear una carpeta llamada my_project en ella. En ese directorio será donde inicializaremos el repositorio de GIT para empezar a trabajar.

Por lo tanto, vamos a ir al escritorio (en el caso de MacOSX, si estamos en nuestra Home, se trata de una carpeta llamada Desktop)

Una vez en el escritorio, creamos la carpeta my_project mediante el comando mkdir

Y nos situamos en dicha carpeta

Paso 3. Inicializamos el repositorio

Ahora que ya hemos creado una carpeta donde trabajar, podemos empezar a trabajar con GIT e inicializar un repositorio en ella

Esto nos ha creado un directorio oculto, llamado .git que contendrá una pequeña base de datos de los cambios que vayamos haciendo, junto a la configuración del repositorio.

Notas:

Si ya tenemos un directorio de proyecto previamente con archivos creados en él, bastará con situarnos en el mismo y llamar al comando git init .  de la misma forma en la que lo hemos hecho en este último paso.

Si no estamos acostumbrados a la línea de comandos y queremos crear los directorios desde Finder en Mac, navegando por ellos de forma gráfica en lugar de por línea de comandos, podemos configurar de forma sencilla la opción de abrir el Terminal desde la carpeta que nos interese desde Finder.

Añadir archivos y registrar cambios

Una vez inicializado el repositorio, podemos trabajar en esa carpeta de forma normal. Creando archivos en ella, modificando los archivos que creemos.. desde fuera del terminal, como lo haríamos normalmente.

Sin embargo, para que GIT registre un cambio, tenemos que decírselo explícitamente, no vale con guardar los archivos. Por ello, cuando queramos registrar un cambio que no queremos perder, tendremos que ejecutar esos dos comandos en el terminal en el directorio de nuestro proyecto.

Vamos a ver en detalle qué hacen estos dos comandos:

Con git add .  le decimos a GIT que registre los archivos nuevos que hemos creado y los archivos que hemos eliminado. Yo recomiendo ejecutarlo siempre que queramos registrar un cambio, incluso si no hemos añadido archivos nuevos o eliminado nada.

Con git commit -a -m "mensaje..."  le decimos a GIT que registre los cambios con un mensaje descriptivo para nosotros y el resto del equipo.

Cada vez que queramos que GIT recuerde un cambio relevante, tendremos que realizar este proceso. Por ello, recomiendo tener a mano la ventana del terminal situada en el directorio del proyecto, mientras trabajamos en él.

Visualizar archivos cambiados pendientes de registrar por GIT

Para ver qué archivos han cambiado desde nuestro último “commit”, podremos hacerlo con el siguiente comando:

Esto nos devolverá el listado de archivos que GIT sabe que han cambiado, pero que no se han guardado en su base de datos de cambios.

Volver a un cambio anterior

Para volver a un cambio concreto que hayamos hecho sobre nuestros archivos, primero debemos ver el histórico de cambios que hemos realizado. De momento podemos hacerlo con este comando:

Este comando nos devuelve el listado de los cambios que hemos ido registrando.

Nota:

En este artículo veremos más adelante cómo podemos verlo de forma más sencilla, si utilizamos un entorno gráfico o web, como en el caso de GitHub o Bitbucket. Pero es importante conocer cómo podemos hacerlo desde la línea de comandos primero.

Sabiendo los cambios que hemos ido registrando sobre los archivos del repositorio y los identificadores de cada commit, podemos volver a restaurar nuestro repositorio al commit que nos interese.

Repositorios externos y servicios de hosting de GIT

Hasta ahora hemos visto cómo trabajar con GIT en repositorios que se encuentran en nuestro equipo, en local. Pero todos sabemos que nuestro equipo se puede estropear o puede no estar disponible.

Otra necesidad surge cuando trabajamos en equipo, si alguien quiere trabajar en ese mismo proyecto, necesita alguna forma de centralizar los cambios y los archivos, de una forma similar a cómo lo haría con sistemas como DropBox pero con toda la potencia que nos da GIT.

GIT nos permite montar servidores en los que podemos configurar nuestros repositorios de forma centralizada, pero lo normal es utilizar servicios en la nube como GitHub, Bitbucket o Gitlab, que son los más utilizados.

Estos servicios además, nos permiten integrarnos con otros servicios en la nube, pudiendo avisar automáticamente en Slack cuando hagamos un cambio en el repositorio o incluso, automatizar la subida a un servidor web sin necesidad de utilizar un cliente de FTP.

Algunos de estos servicios, como Bitbucket, son totalmente gratuitos para grupos de trabajo pequeños. Otros como Github, son gratuitos solo para proyectos abiertos u Open Source.

Crear un repositorio externo en Bitbucket y autorizarnos para subir/bajar cambios desde nuestro equipo

Después de registrarnos en Bitbucket, desde el menú de creación, podemos crear un repositorio privado nuevo:

Tras crear nuestro repositorio, necesitamos añadir claves de acceso ssh para poder trabajar desde nuestro equipo sin tener que estar indicando nuestra contraseña constantemente.

Una clave ssh es un acceso seguro asociado a un usuario de un ordenador. Con ellas, podemos acceder a otros servidores sin tener que utilizar contraseñas y desde ellos, se puede revocar el acceso, en caso de perder el equipo.

Para añadir una clave, necesitamos ir a Opciones de Bitbucket / Seguridad / Claves SSH, de nuestra cuenta. Al asociar nuestras claves SSH en nuestra cuenta de Bitbucket, podremos gestionar directamente todos los repositorios a los que tengamos acceso en Bitbucket.

Si no tenemos creada una clave en nuestro equipo para nuestro usuario, necesitamos crear una. Bitbucket tiene un tutorial para crear nuestras claves, pero el resumen sería el siguiente:

Abrir el terminal y ejecutar el siguiente comando:

Se nos preguntará el sitio donde queremos generar la clave (por defecto el directorio .ssh de nuestra home) y una contraseña. Podemos dejar por defecto todo, aunque la seguridad será mayor si indicamos una contraseña.

Tras generar las claves, se nos crea un archivo id_rsa e id_rsa.pub en el directorio que le hemos indicado. Nos interesa el contenido del archivo id_rsa.pub, que es el que añadiremos en Bitbucket.

Si hemos dejado la ruta por defecto, podremos abrir el directorio con los archivos mediante el comando:

Esto nos abrirá el Finder y con nuestro editor de texto favorito, copiaremos el contenido del archivo id_rsa.pub en la pantalla de añadir clave de nuestra cuenta de Bitbucket.

Una vez añadida la clave, ya no tendremos que volver a hacerlo para ese usuario y ese equipo cuando trabajemos con repositorios en Bitbucket.

En otros servicios como Github, el proceso sería similar y al igual que ocurre en el caso de Bitbucket, suelen tener documentación y tutoriales de ayuda para hacerlo.

Añadir un repositorio externo a nuestro repositorio local

Ahora que ya tenemos un repositorio creado en Bitbucket y nuestro usuario+ordenador autorizado, podremos asociar dicho repositorio remoto a nuestro repositorio local.

Podemos asociar nuestro repositorio local con infinitos repositorios remotos. Esto es interesante por ejemplo, si queremos tener un repositorio en Bitbucket para nosotros y un repositorio para nuestro cliente en Github.

Podemos elegir en cada momento qué cambios vamos a subir a cada repositorio para que otras personas se los descarguen. Y también, podemos elegir, desde qué repositorio nos vamos a descargar nosotros, los cambios de otras personas que trabajen en ese mismo proyecto.

Para asociar el repositorio que acabamos de crear, en Bitbucket tenemos la siguiente ayuda en el resumen del repositorio que hemos creado allí antes:

Como vemos, tendríamos que ejecutar el siguiente comando en el directorio de mi repositorio local:

Este comando registra esa ruta ssh://… en nuestro repositorio local con el nombre “origin”.

En mi caso, la ruta de mi repositorio remoto sería ssh://git@bitbucket.org/asiermarques/newproject.git  en el tuyo, puedes verla en la parte superior derecha del resumen del repositorio:

El desplegable nos permite elegir entre ssh o https. Utilizaremos siempre ssh.

El segundo comando que vemos es

Este comando subirá nuestros archivos al repositorio “origin” (que es el que hemos creado en Bitbucket) y a la rama “master”, la única que hemos creado y que se crea por defecto.

Subir cambios desde nuestra carpeta local a un repositorio externo

Como hemos visto en el punto anterior, los cambios que registremos en nuestro repositorio local, se subirán a un repositorio externo mediante el comando push

Básicamente, origin es el nombre del repositorio remoto y master la rama a la cual subimos. Si tuviésemos un repositorio llamado “cliente” y una rama de “traducciones”, haríamos lo siguiente:

Una vez subidos los cambios registrados mediante los commits que hayamos hecho, podremos visualizar la historia directamente en Bitbucket y ver cada uno de los cambios hechos en los archivos del repositorio:

Actualizar nuestra carpeta de trabajo local con los cambios subidos por otros al repositorio externo

Para actualizarnos con los cambios que otras personas hayan subido a un repositorio externo, utilizaremos el comando pull:

De igual forma, “origin” es el nombre del repositorio que hemos registrado y “master” la rama de la cual nos interesa descargar y actualizar nuestros archivos.

Si al descargarnos los archivos existiese algún conflicto porque dos personas hayan tocado la misma línea de un archivo, GIT nos lo avisaría y deberíamos corregir aquello que estuviese mal o desactualizado antes de poder registrar cambios nuevos.

Crear un repositorio local y una carpeta de proyecto, desde un repositorio externo

En algunas ocasiones, quizás nos interesa descargarnos un proyecto que ya esté en marcha desde un repositorio externo. Para ellos existe el comando git clone.

Por ejemplo si quisiéramos descargar la última versión de WordPress a una directorio de nuestro escritorio en Mac, haríamos:

Con el comando cd nos situaríamos en el directorio en el cual queramos bajarnos el proyecto WordPress, en nuestro caso la carpeta del escritorio de Mac.

Una vez allí, hacemos git clone para descargarnos la última versión de WordPress, esto nos creará el directorio WordPress en el escritorio.

Herramientas gráficas para trabajar con GIT

Hemos visto cómo utilizar el terminal para utilizar GIT mediante línea de comandos.

Existen algunas aplicaciones que nos permiten utilizarlo de forma más amigable desde asistentes o con una interfaz gráfica, pero la recomendación es aprender a utilizar bien GIT desde la consola/terminal para comprender qué es lo que estamos haciendo realmente.

Algunas opciones interesantes son:

Conclusión

A modo de guía, hemos visto los aspectos más importantes que vas a necesitar para trabajar con GIT en equipo o en solitario en tu día a día.

Escrito por Asier Marqués

Lo que necesitas saber sobre progressive Web Applications y el offline first web development.

Hoy en día, el uso de GIT o de cualquier otra herramienta de control de versiones, no es opcional a la hora de desarrollar proyectos en equipo, ya sean tecnológicos o de otro tipo. Para desarrollar nuestros productos, en Simettric formamos equipos entre profesionales de diferentes perfiles: diseñadores, profesionales de comunicación y copy, gestores de contenido, traductores… […]