Dos ejercicios. El primero se hace solo; el segundo, en parejas. No se entregan
para nota, pero son la base de cómo se entregan los tres trabajos del curso.
Por qué en lenguaje C
El objetivo aquí es practicar Git, no programar. Un programa en C de cinco
líneas basta para tener algo que modificar, y evita mezclar el aprendizaje de Git
con el de HTML.
Para compilar necesitas gcc:
sudo apt install gcc
Ejercicio 1 — Individual
Objetivo: recorrer el ciclo completo, desde crear el repositorio hasta ver tu
código publicado en GitHub.
Compílalo y ejecútalo para comprobar que funciona:
gcc hola.c -o hola./hola
Paso 4. Primer commit
git status # ¿Qué archivos ve Git?git add hola.cgit commit -m "Agrega programa que saluda"git push
No subas el ejecutable
gcc genera un archivo hola (sin extensión) que no debe ir al repositorio: es
un binario que se regenera al compilar. Por eso el git add hola.c es
específico, en vez de git add ..
La forma correcta de excluirlo permanentemente es crear un archivo .gitignore
con una línea que diga hola. Pruébalo y vuelve a ejecutar git status.
Paso 5. Un segundo commit
Modifica el programa para que además imprima tu carrera:
printf("Estudio <TU CARRERA>\n");
Y repite el ciclo, observando el diff:
git diff # ¿Qué líneas cambiaron?git add hola.cgit commit -m "Agrega la carrera al saludo"git push
Paso 6. Verifica en GitHub
Entra a github.com/tu-usuario/practica-git y comprueba que:
El archivo hola.c está ahí con la última versión.
En la pestaña Commits aparecen tus dos commits, con sus mensajes.
Al hacer clic en un commit, ves las líneas agregadas en verde.
Los commits aparecen a tu nombre (si dicen otro nombre, revisa git config --global --list).
Ejercicio 2 — En parejas
Objetivo: ver cómo se trabaja en grupo y provocar un conflicto a propósito
para aprender a resolverlo. Es mejor encontrárselo aquí que el día antes de una
entrega.
Paso 1. Preparar
Uno de los dos (llamémosle A) crea un repositorio practica-grupal con README.
A invita a su compañero: en el repositorio, Settings → Collaborators → Add people,
con el usuario de GitHub de B. B acepta la invitación que le llega por correo.
Git dirá algo como Updates were rejected because the remote contains work that you do not have locally. Es lo esperado: el remoto avanzó. La solución es traer
lo nuevo y volver a subir:
git pullgit push
Al terminar, ambos ejecutan git pull y comprueban que tienen los dos archivos.
No hubo conflicto, porque cada uno tocó un archivo distinto.
Paso 3. Provocar el conflicto
Ahora, sin hacer pull ni avisarse, los dos editan la misma línea del
README.md:
A escribe en la primera línea: # Práctica grupal de A y B
B escribe en la primera línea: # Repositorio de práctica
A sube primero:
git add README.mdgit commit -m "Actualiza el titulo del README"git push
B intenta subir y falla. Al hacer git pull, aparece el conflicto:
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.
Paso 4. Resolver
B abre README.md y encuentra las marcas:
<<<<<<< HEAD
# Práctica grupal de A y B
=======
# Repositorio de práctica
>>>>>>> ...
B conversa con A, decide qué título queda, borra las tres líneas de
marcas y guarda. Luego:
git add README.mdgit commit -m "Resuelve conflicto en el titulo del README"git push
A ejecuta git pull y ve el resultado acordado.
Paso 5. Verificar
El README.md no contiene ninguna marca <<<<<<<, ======= ni >>>>>>>.
En Commits aparecen commits de ambos, cada uno a su nombre.
Existe un commit de fusión (merge) en el historial.
Ambos tienen exactamente el mismo contenido tras un git pull.
Qué deberías poder hacer después de esto
Crear un repositorio y clonarlo sin consultar apuntes.
Ejecutar el ciclo pull → add → commit → push de memoria.
Interpretar lo que dice git status.
Entender por qué te rechazaron un push y cómo solucionarlo.
Resolver un conflicto sin entrar en pánico.
Cómo evitar conflictos en los trabajos
El Paso 3 fue un conflicto provocado. En un trabajo real se evitan con dos
costumbres: hacer git pull antes de empezar a trabajar y repartirse los
archivos para que dos personas no editen lo mismo al mismo tiempo. Cuando eso no
alcanza, se usan ramas.