A través del desarrollo de este tutorial pondrá en práctica los diferentes conceptos vistos durante el módulo.

Se espera que al finalizar usted pueda:

El punto de partida es un proyecto web que contiene diferentes recetas de cocina hispanoamericana. Hará fork de un repositorio existente que contiene una rama por cada país, creará una nueva rama, agregará nuevas recetas y mezclará su rama con la rama principal.

Para este tutorial se ha preparado el siguiente repositorio: Ver repositorio

Para realizar este tutorial usted debe tener claras las respuestas a las siguientes preguntas:

Pregunta 1. ¿Qué es una rama?

Pregunta 2. ¿Cuándo crear ramas?

Pregunta 3. ¿Qué es un tag?

Pregunta 4. ¿Cuáles son los tipos de tag?

Pregunta 5. ¿Cuál es la utilidad de un tag?

Si no es así, por favor revise los videos y el material propuesto antes de seguir. De esta forma podrá sacarle más provecho.

Realice los siguientes pasos para hacer Fork del repositorio base.

  1. Inicie sesión utilizando su cuenta GitHub.

  1. Usando el navegador web vaya a la página del proyecto base y haga clic en el botón Fork ubicado en la parte superior derecha de la pantalla.

Note que GitHub ha creado una copia del repositorio base en su dominio y que el nuevo repositorio tiene el nombre de su usuario/ el nombre del repositorio base.

  1. Haga clic en el botón Clone or download para copiar la URL del nuevo repositorio.

  1. Clone el nuevo repositorio en su computador.
$ git clone https://github.com/mooc-uniandes/recetas_hispanoamericanas.git

Antes de empezar tenga en cuenta que el repositorio base tiene configurada una rama por cada país que se incluye en el recetario.

  1. Cree una rama llamada Brasil.
$ git branch Brasil

  1. Consulte las ramas del repositorio para verificar la operación anterior.
$ git branch -a

Note que el repositorio remoto contiene 3 ramas diferentes, Colombia, México y master. Mientras que el repositorio local sólo tiene master y la rama que se acaba de crear (Brasil).

  1. Cambie de rama para agregar una nueva receta.
$ git checkout Brasil

Realice los siguientes pasos para agregar una receta de Brasil:

  1. Copie y pegue la carpeta /files_to_add/Brasil en el directorio /recetas de su copia de trabajo local.
  2. Copie y pegue la imagen /files_to_add/imagenes/arrolladito.jpg en la carpeta /imagenes de su copia de trabajo local.
  3. Incluya el nuevo país en el archivo index.html
  4. Verifique el estado del repositorio.
$ git status

Evidencie que los nuevos archivos han sido identificados en la copia de trabajo local, pero aún no han sido incluidos en el área de preparación.

  1. Agregue los cambios al área de preparación.
$ git add .

  1. Confirme los cambios en el repositorio local.
$ git commit -m "Se incluye receta de Brasil"

  1. Sincronice los cambios con el repositorio remoto.
$ git push --set-upstream origin Brasil //la opción --set-upstream se encarga de publicar la rama en el repositorio remoto

  1. Consulte nuevamente las ramas del repositorio para verificar la operación anterior.
$ git branch -a

Git permite etiquetar puntos específicos del historial como importantes. Esta funcionalidad facilita la búsqueda de los commit marcados a lo largo del tiempo.

En este tutorial trabajará con etiquetas anotadas, las listará, consultará y eliminará.

  1. Cree una etiqueta anotada para el último commit.
$ git tag -a v1.0 -m 'Receta brasileña: Arrolladitos'

  1. Liste las etiquetas del repositorio.
$ git tag

  1. Consulte la etiqueta creada en el primer punto.
$ git show v1.0

Este comando muestra toda la información relacionada con la etiqueta: su autor, la fecha, el commit correspondiente y una previsualización de los archivos involucrados.

  1. Elimine la etiqueta v1.0
$ git tag -d v1.0 //la opción -d indica que se hará un delete de la etiqueta

Ejecute el siguiente comando para comparar dos ramas:

$ git diff --name-status master..Brasil //la opción --name--status permite consultar el nombre de los archivos y su estado (Delete, Add or Modified)

El comando anterior permite comparar master con respecto a Brasil. Note que los archivos marcados con la letra A corresponden a los agregados en la sección anterior y el archivo marcado con la letra M corresponde al modificado.

Este comando tiene muchas variaciones dependiendo de lo requerido.

En el caso de querer consultar las diferencias incluyendo el contenido de los archivos implicados, utilice el comando:

$ git diff master..Brasil

Si desea consultar el nombre y cantidad de archivos modificados, así como la cantidad de líneas insertadas o eliminadas, utilice el comando:

$ git diff --stat master..Brasil //la opción --stat permite consultar la cantidad de archivos modificados y la cantidad de cambios

En esta sección del tutorial fusionará los cambios realizados en la rama Brasil con la rama master.

Siga los siguientes pasos:

  1. Ubíquese en la rama master.
$ git checkout master

  1. Fusione la rama Brasil en master.
$ git merge Brasil

De esta forma habrá realizado una fusión entre ramas sin conflicto. En la siguiente sección, realizará un ejemplo de fusión con conflictos.

A continuación, simulará el trabajo de 2 desarrolladores, uno desde la rama master y otro desde la rama Colombia. Ambos provocarán un conflicto al agregar una receta de este país y modificar el index simultáneamente.

Antes de empezar, abra dos terminales o consolas de Git Bash, asegúrese que cada una esté en una ubicación diferente y que tenga el repositorio del proyecto clonado.

Personalice su identidad en cada una de las terminales teniendo en cuenta el material proporcionado en lecciones pasadas. Si no lo tiene a la mano, ejecute:

git config user.name "desarrollador_1"
git config user.email desarrollador_1@uniandes.edu.co
git config user.name "desarrollador_2"
git config user.email desarrollador_2@uniandes.edu.co

Ahora, siga los siguientes pasos para el desarrollador 1:

  1. Ubíquese en la rama Colombia.
$ git checkout Colombia

Si aparece el siguiente error:

Esto porque no se ha creado localmente una referencia a esa rama remota. Lo puede verificar consultando las ramas del repositorio.

Para hacer seguimiento de forma local a la rama Colombia ejecute el comando

 $ git checkout --track origin/Colombia

Consulte nuevamente el listado de ramas para evidenciarlo.

  1. Copie y pegue el archivo /files_to_add/Colombia/bandeja_paisa.html en el directorio /recetas/Colombia de su copia de trabajo local.
  1. Copie y pegue la imagen /files_to_add/imagenes/bandeja_paisa.jpg en la carpeta /imagenes de su copia de trabajo local.
  1. Incluya la nueva receta en el archivo index.html.
  1. Confirme los cambios en el repositorio local.

  1. Sincronice los cambios con el repositorio remoto.

Siga los siguientes pasos para el desarrollador 2:

  1. Ubíquese en la rama master.
$ git checkout master

  1. Copie y pegue el archivo /files_to_add/Colombia/arroz_coco.html en el directorio /recetas/Colombia de su copia de trabajo local.
  1. Copie y pegue la imagen /files_to_add/imagenes/arroz_coco.jpg en la carpeta /imagenes de su copia de trabajo local.
  1. Incluya la nueva receta en el archivo index.html.
  1. Confirme los cambios en el repositorio local.

  1. Sincronice los cambios con el repositorio remoto.

  1. Integre los cambios de la rama Colombia con la rama Master.

Si Git no reconoce Colombia en su espacio local, mezcle con la rama remota de Colombia.

Note que Git ha detectado un conflicto pues el archivo index.html tiene cambios diferentes en cada una de las ramas.

Para solucionarlo abra el archivo en su IDE preferido. Resaltado en verde aparecen los cambios presentes en la rama master y resaltado en azul los cambios presentes en la rama origin/Colombia, acepte los 2 cambios y haga commit en su repositorio local.

Ahora guarde los cambios.

8. Sincronice los cambios con el repositorio remoto.

Con este último paso, usted ha solucionado el conflicto generado por modificar la misma parte del mismo archivo en diferentes ramas.

En el siguiente curso, aprenderá sobre los diferentes flujos de trabajo en Git y la utilidad de las ramas en esos casos.