Git – La guía básica

Todo empezó entorno al núcleo de Linux. Mantenerlo no era nada sencillo: mucha gente contribuyendo, muchos archivos a tener en cuenta … Justamente por eso, allá por 2002, se empezó a usar un software de control de versiones, BitKeeper.
1 - BitKeeper

Problema arreglado? Pues no. Llegó 2005, las relaciones se enfriaron y dejaron de ofrecer la herramienta de manera gratuita. Justo lo que necesitaba Linus Torvalds y su equipo para desarrollar su propia herramienta de control de versiones: Git. En realidad la historia tiene un poco más de miga, pero tampoco nos interesa… Lo verdaderamente importante es que nació un software sencillo, rápido, distribuido y capaz de gestionar grandes proyectos de forma eficiente (sí, todo el kernel de Linux está gestionado con Git: https://github.com/torvalds/linux)

2 - Git-logo

Por cierto, un control de versiones es un sistema que registra los cambios realizados sobre un archivo o un conjunto de archivos a lo largo del tiempo. Entre los muchos ámbitos donde es útil, se encuentra el mundo de la informática y el desarrollo de software, con lo que empezamos a hablar de sistemas de control de versiones. Por qué resulta útil a la hora de crear y mantener aplicaciones? Porque …

  • … facilita el trabajo colaborativo. Cualquier miembro del equipo de desarrollo puede estar trabajando sobre el mismo archivo. Git se encarga de “hacer magia” y todos los cambios se verán reflejados en el archivo final.
  • … reduce el tiempo de despliegue, ya que no es necesario subir todos los archivos, ni siquiera todos los archivos que se han cambiado, sino únicamente los cambios realizados.
  • … permite regresar a versiones anteriores de un archivo. Esto es muy útil, especialmente cuando metes la pata. Basta con retroceder al estado anterior y todo seguirá igual.
  • … para empezar a trabajar, solo tienes que clonar el proyecto en tu entorno de trabajo.

Podríamos seguir hablando de las bondades de Git … pero esa no es la idea. Lo que realmente nos interesa es conocer los aspectos y comandos básicos para poder comenzar a usar Git. Así que … allá vamos!
3 - linus torvalds

* Configuración

Descarga Git por aquí: https://git-scm.com/download

* Crea un nuevo repositorio

Esto es tan sencillo como crear un directorio nuevo, posicionarte en él y ejecutar

git init

* Clona tu primer repositorio

Puedes crear una copia local del repositorio ejecutando:

git clone /path/to/repository

En caso de que uses un servidor remoto, mejor ejecuta:

git clone [email protected]:/path/to/repository

* Flujo de trabajo

Tu repo local está compuesto de árboles, concretamente tres, administrados por Git. El primero es tu directorio de trabajo, donde están los archivos. Después viene el índice, que viene siendo una zona intermedia. Y finalmente tenemos el HEAD que apunta al último de los commits realizados.
4 - directorios

* Add y commits

Para que Git empiece a registrar los cambios de un archivo usa:

git add “nombre de mi archivo

Si en lugar del nombre de tu archivo, usas un punto “.” agregarás todos los archivos que hayan sufrido cambios al índice.

git add .

Ya has comenzado el flujo de trabajo básico … El siguiente paso es hacer un commit, o lo que es lo mismo, decirle a Git que queremos hacer permanentes los cambios realizados. Esto lo hacemos usando:

git commit -m “Mensaje del commit”

Usa siempre la opción -m. SIEMPRE. Es necesario saber qué estamos commiteando. Y a ser posible, pon un comentario que sea interesante. Antes de escribirlo, piensa: si yo estuviese leyendo ese cambio, qué me gustaría saber de él?

Ahora mismo tenemos los cambios en el HEAD, pero todavía no lo tenemos en el repositorio remoto.

* Envío de cambios

Habíamos dejado nuestros cambios preparados en local, pero donde realmente son útiles y están seguros, es en el repositorio remoto. Para ello ejecuta:

git push [origin] “nombre de la rama a la que quiero mandar mis cambios”

Si no especificas que la rama está en remoto, Git te preguntará y guardará tu respuesta como opción por defecto para próximos push.

* Ojo! Ramas

Las ramas en Git son fundamentales para desarrollar funcionalidades aisladas de forma segura y ordenada. La rama master es la rama por defecto al crear un repositorio.

Mientras estés desarrollando, crea todas las ramas que necesites y fusiónalas a medida que vayas terminando. Te explico:

Puedes crear una nueva rama usando

git branch “nombre de la rama”

Si quieres moverte a la rama que acabas de crear …

git checkout –“nombre del archivo a reemplazar”

En caso de querer borrar una rama que hayas creado (todo el mundo necesita una rama de pruebas de vez en cuando 😉 )

git branch -d “nombre de la rama”

Cuando quieras hacer disponible tu rama para el resto del equipo de desarrollo, tendrás que “pushearla”, lo que viene siendo subir la rama al repositorio remoto. Tan sencillo como:

git push origin “nombre de la rama”

* Already up-to-date … Fuuuuusión!!

Cuando trabajas en equipo es necesario tener siempre los últimos cambios de tus compañeros. Lógico, nadie quiere estar desfasado! En Git es tan sencillo como ejecutar

git pull

Esto no solo bajará los últimos cambios disponibles en el repositorio remoto, sino que además fusionará los cambios disponibles.

Por otro lado, habrá millones de ocasiones en las que tú seas quien quiere fusionar o combinar los cambios de dos ramas: la rama en la que estás, o rama activa y otra rama de tu interés. Para ello usa:

//recuerda, estás en tu rama activa
git merge “nombre de la rama con la que me quiero fusionar”

En ambos casos, tanto ante una actualización o pull como ante una unión o merge, Git intentará hacer la fusión de forma automática … pero eso no siempre será posible y entonces aparecerán los conflictos. No te preocupes, te vas a cansar de tratar con ellos :-). Un conflicto no es más que un momento en el que Git no sabe qué cambio aplicar a un archivo; así que tú eres entonces el responsable que resolver esa discrepancia.
5 - conflicto

Resolver un conflicto es tan sencillo como:

    1. editar manualmente el archivo en el que esté el problema
    2. dejar el código que creas necesario
    3. guardar
    4. marcar el archivo como fusionado usando:
git add “nombre del archivo”

 

No te preocupes, resolver conflictos forma parte del día a día … Te darás cuenta de ello muy pronto!
6 - keep calm

* Etiquetas

Es recomendable crear etiquetas para cada nueva versión que se publique de un desarrollo. Para hacerlo basta con ejecutar

git tag 1.0.0 “id del commit”

El id del commit al que quieres hacer referencia en la etiqueta puedes consultarlo con

git log

* Reemplazar cambios locales

Esta parte seguramente nunca la uses … al fin y al cabo quién hace alguna vez algo mal … :-p. Puedes reemplazar los cambios de tu directorio local con los disponibles en el HEAD usando

git checkout — “nombre del archivo a reemplazar”

En caso de querer reemplazar todos y, recalco, todos los cambios locales, así como sus commits, podemos recuperar la última versión remota usando

git fetch “rama remota”
git reset – -hard “rama remota”

* Otras cosas interesantes …

Gitk es lo más para ver gráficamente qué está pasando con tu proyecto. Podrás consultar información sobre commits, merges, conflictos, quién, cuándo … Es realmente útil.
7 - git branch
Más o menos, un flujo básico de control de cambios y mezcla con otra rama puede ser semejante al que sigue (pista: la rama con la que vamos a mezclar se llama develop):

git status //muestra el estado de la rama actual
git add [nombre del archivo]
git commit -m “Texto comiteo”
git push origin [nombre de la rama]
git checkout develop
git pull
git merge [nombre de la rama]
git push origin develop

Agrega archivos de forma interactiva usando …

git add -i

Hoy día, prácticamente en cualquier entorno de trabajo verás la necesidad de tener un control de versiones para poder vivir tranquilo. Muchos optan por hacer uso de Git, así que si no has comenzado a usarlo, es un buen momento!

Si quieres más info acerca de Git, no dudes en revisar su documentación tanto en formato libro, como en digital. Puedes encontrarlo en: https://git-scm.com/doc

Bonus track …

Ya para acabar te dejo un enlaces en el que puedes encontrar una lista de trucos para el día a día con Githttp://ndpsoftware.com/git-cheatsheet.html
8 - yoda

Autor/a: Alejandro Arrojo .