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:
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.
GitHub
.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.
Clone or download
para copiar la URL del nuevo repositorio.$ 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.
$ git branch Brasil
$ 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).
$ git checkout Brasil
Realice los siguientes pasos para agregar una receta de Brasil:
/files_to_add/Brasil
en el directorio /recetas
de su copia de trabajo local./files_to_add/imagenes/arrolladito.jpg
en la carpeta /imagenes
de su copia de trabajo local.index.html
$ 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.
$ git add .
$ git commit -m "Se incluye receta de Brasil"
$ git push --set-upstream origin Brasil //la opción --set-upstream se encarga de publicar la rama en el repositorio remoto
$ 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á.
etiqueta anotada
para el último commit
.$ git tag -a v1.0 -m 'Receta brasileña: Arrolladitos'
$ git tag
$ 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.
$ 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:
$ git checkout 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:
$ 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.
/files_to_add/Colombia/bandeja_paisa.html
en el directorio /recetas/Colombia
de su copia de trabajo local./files_to_add/imagenes/bandeja_paisa.jpg
en la carpeta /imagenes
de su copia de trabajo local.index.html
.Siga los siguientes pasos para el desarrollador 2:
$ git checkout master
/files_to_add/Colombia/arroz_coco.html
en el directorio /recetas/Colombia
de su copia de trabajo local./files_to_add/imagenes/arroz_coco.jpg
en la carpeta /imagenes
de su copia de trabajo local.index.html
.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.