https://github.com/johnny-godoy/laboratorios-mds
¶Git
Responda las siguientes preguntas (0.2 pts c/u):
¿Qué es Git
y cómo se relaciona con el control de versiones?
Nombre y explique 3 diferencias entre Git
y Github
.
¿Qué es un hash
y cómo se representa en un commit
? De un ejemplo.
¿Que elementos componen a la estructura de datos de Git
?
¿Que comandos de Git
sirven para crear un repositorio y hacer seguimiento a cambios en los archivos?
Escriba sus respuestas acá:
git init <repository-name>
git diff
git log
Responda si las siguientes afirmaciones son Verdaderas (V) o Falsas (F). Justifique en cualquiera de los casos (0.2 pts c/u):
Git
siempre resuelve automáticamente los problemas de lineas al hacer merge entre diferentes ramas.git pull
sobre un repositorio es equivalente a ejecutar git clone
.Git
.Git
es posible deshacer cambios y volver a versiones anteriores del código.git commit
se utiliza para enviar cambios al repositorio remoto.Escriba sus respuestas acá:
pull
realiza actualizaciones locales de un repositorio que ya está clonado (es decir, para el cual ya tenemos una copia local)push
para actualizar su trabajo y pull
para recibir las actualizaciones de los otros miembros.checkout
. Si ya se subió remotamente (con push
), también podemos obtenerlo del repositorio remoto (con pull
). El comando reset
también puede volver a un commit anterior y revertir todo su uso, dejándolo en la historia de versionamiento.commit
guarda los cambios locales, no el remoto. Para pasar estos cambios locales al repositorio remoto, se debe usar push
después de ya haber realizado commit
.Para empezar a "soltar las manos" con Git
, se les encomienda crear un repositorio con una presentación personal. El repositorio debe contener un breve resumen de quienes son ustedes, sus gustos, experiencias, y cualquier otro detalle interesante que ustedes consideren relevante.
Para realizar esto, deben seguir los siguientes pasos:
readme.md
con la información que ustedes deseen compartir.A modo de ejemplo, pueden guiarse por esta suculenta presentación.
Hint: Una buena opción es usar templates de presentación personal que encuentren en Google, como los que ofrece este sitio.
Entregable:
Enlace al repositorio con la presentación personal.
IMPORTANTE: DEBEN ADJUNTAR UN ENLACE POR PERSONA
Link Presentacion 1: https://github.com/johnny-godoy
Me disculpo si no es muy breve, ya lo tenía hecho de antes!
Tras muchos dolores de cabeza, un grupo de entusiastas académicos decidieron aprender sobre Git
y así trabajar colaborativamente de forma más ordenada y eficiente. Después de una infinidad de intentos y aprender de sus errores "a la mala", los académicos lograron levantar un repositorio en Github
. Usando el repositorio de los académicos, responda las siguientes preguntas (incluya también los comandos en Git
ocupados):
Escriba sus respuestas acá:
git clone https://github.com/MDS7202/lab1.git
Escriba sus respuestas acá:
En el último commit, el repositorio contiene tres archivos:
readme.md
, que explica el objetivo del proyecto, que es emular los sonidos de animales.animales.py
, que implementa la función animales
, que recibe el nombre de un animal, e imprime el sonido que este hace (en distintas formas según el animal...)main.py
, que es un programa interactivo que le pregunta al usuario el nombre de un animal, y luego le imprime el sonido correspondientecommit
realizados? (0.25 pts)Hint: Se recomienda usar los argumentos all
, graph
y decorate
Escriba sus respuestas acá:
Para ver las ramas:
git branch -av
En este caso hay 3 ramas remotas: main
, fix-ifs
y new_features
. Además, está nuestro clon local de la rama main
realizado en la parte 1, que se llama main
también.
Para ver los cambios:
git log --all --graph --decorate
El último commit se realizó en fix-ifs
, con una descripción no informativa "fix ifs", que no agrega nada al nombre de la rama. El anterior fue la separación en módulos que se realizó en main
es más informativo, y explica que el proyecto se separó en módulos. Antes de eso igual es en main
, y dice que agrega función. Esto solamente se entiende porque el proyecto tiene una única función, pero en general no sería un buen mensaje. Antes de eso estuvo el commit inicial de creación, cubriendo todos.
git blame
(0.25 pts)Hint: Le puede ser útil esta documentación.
Escriba sus respuestas acá:
El error está en la implementación de la función animales
. Considerar el caso input="gato"
, que correctamente imprime "miau", pero luego se verifica que input!="zorro"
, por lo cual cae un error. Esto fue un error de uso de if
en vez de elif
.
Para determinar quién cometió el error, se usa git blame animales.py
:
Vemos que la implementación incorrecta la hizo el usuario mezosky.
commit
:c8b1a62d7299552b0654f930d695b33109214111
362fe21ee44f53ee944cee4ba484600308f83d78
25543a3baf77292baf849726784ca005473acab1
¿Qué diferencias existen entre cada uno? (0.25 pts)
Escriba sus respuestas acá:
Cada uno se busca con git show
:
animales
en main.py
2. (Output truncado) Este mueve la función
animales
al módulo animales.py
3. Este corrige la implementación de la función
animales
. Notar que esto no es en la rama main
, así que la función está en main.py
.
merge
de la rama fix-ifs
con la rama main
y describa lo que ocurre. ¿Qué parte del código podría estar ocasionando esto? (0.25 pts)Escriba sus respuestas acá:
Al realizarlo hay un conflicto:
Esto ocurre porque el último commit en ambas ramas es una modificación de líneas de main.py
, por lo cual no se puede resolver automáticamente con cual modificación quedarse.
Escriba sus respuestas acá:
Primero se crea la rama nueva con git branch jgodoy-fix-control_flow
, y se mueve a esta rama con git checkout jgodoy-fix-control_flow
.
Notemos que esta se basa en la rama main
, no en fix-ifs
, por lo cual las modificaciones que hay que hacer son implementar los arreglos de fix-ifs en animales.py
.
Si basáramos la rama en fix_ifs
entonces la modificaciones serían más complejas, pues habría que mantener main.py
de la misma forma que en la rama main
, así que habría que repetir más cambios.
Entonces, solamente hay que realizar cambios pequeños en animales.py
, los if
por los elif
tal como en fix-ifs
, cambiando la línea 9 y 11:
Luego, se agrega animales.py
a staging usando git add animales.py
y se guardan los cambios con git commit -m "fix: control flow bug"
:
Para terminar, se junta en la rama main
con git merge jgodoy-fix-control_flow main
:
Finalizando el arreglo.
Eso ha sido todo por ahora!! Esperamos que este laboratorio les haya gustado y servido para trabajar con Git
. Recuerden los dias de plazo que tienen disponibles y que ante cualquier duda no duden en contactar al equipo docente.
Nos vemos!!