Saltar a contenido

GA5 · Ejercicios de automatizar y configurar

Cada ejercicio parte de un repositorio que se prepara con unos comandos. Hazlos en una carpeta de pruebas, nunca en un proyecto real. Al final se comprueba con un comando y se muestra el resultado esperado.

Ejercicio GA5.1 · Un hook que exige formato

Crea un hook commit-msg que rechace los mensajes que no empiecen por feat:, fix: o docs:. Comprueba que git commit --allow-empty -m 'cambios' falla, haz después git commit --allow-empty -m 'feat: añade la lista' y comprueba el historial.

Prepara el repositorio con:

mkdir proyecto && cd proyecto
git init
echo '# Proyecto' > README.md && git add README.md && git commit -m 'Crea el proyecto'

Al terminar, ejecuta git log --format=%s. Debe salir exactamente esto (si salen números de commit, los tuyos serán distintos):

feat: añade la lista
Crea el proyecto
Pista

El hook recibe en $1 el archivo del mensaje; exit 1 cancela el commit. Y tiene que ser ejecutable.

Ejercicio GA5.2 · Un alias

Crea el alias ult para que git ult muestre solo el mensaje del último commit. Pruébalo.

Prepara el repositorio con:

mkdir proyecto && cd proyecto
git init
echo '# Proyecto' > README.md && git add README.md && git commit -m 'Crea el proyecto'

Al terminar, ejecuta git ult. Debe salir exactamente esto (si salen números de commit, los tuyos serán distintos):

Crea el proyecto
Pista

git config alias.nombre 'comando', y el comando es log -1 --format=%s.

Ejercicio GA5.3 · Dejar de seguir un archivo

Por error se subió .env junto a app.txt. Deja de seguir .env (sin borrarlo de tu carpeta), ignóralo para que no vuelva a entrar y haz un commit. Después, git ls-files debe mostrar solo .gitignore y app.txt.

Prepara el repositorio con:

mkdir proyecto && cd proyecto
git init
echo '# Proyecto' > README.md && git add README.md && git commit -m 'Crea el proyecto'
echo 'sesion=1' > .env && echo 'app' > app.txt && git add .env app.txt && git commit -m 'Añade la app y la configuración local'

Al terminar, ejecuta git ls-files. Debe salir exactamente esto (si salen números de commit, los tuyos serán distintos):

.gitignore
README.md
app.txt
Pista

git rm --cached saca el archivo del seguimiento; luego, .gitignore.

Ejercicio GA5.4 · Limpiar lo que sobra

Hay un archivo sin seguimiento (temporal.tmp) y una carpeta con otro (carpeta/otra.tmp). Primero comprueba qué se borraría y después bórralo todo. Al final, ls debe mostrar solo README.md.

Prepara el repositorio con:

mkdir proyecto && cd proyecto
git init
echo '# Proyecto' > README.md && git add README.md && git commit -m 'Crea el proyecto'
echo basura > temporal.tmp
mkdir carpeta && echo otra > carpeta/otra.tmp

Al terminar, ejecuta ls. Debe salir exactamente esto (si salen números de commit, los tuyos serán distintos):

README.md
Pista

Primero git clean -nd (en seco) y luego git clean -fd.

Ejercicio GA5.5 · Exportar sin lo ignorado

El proyecto tiene README.md, datos.txt y un .env ignorado. Exporta el último commit como un archivo tar y lista su contenido en la misma orden: debe salir sin .env y sin la carpeta .git.

Prepara el repositorio con:

mkdir proyecto && cd proyecto
git init
echo '# Proyecto' > README.md && git add README.md && git commit -m 'Crea el proyecto'
echo '.env' > .gitignore && echo 'secreto' > .env && echo 'datos' > datos.txt
git add .gitignore datos.txt && git commit -m 'Añade datos'

Al terminar, ejecuta git archive --format=tar HEAD | tar -t. Debe salir exactamente esto (si salen números de commit, los tuyos serán distintos):

.gitignore
README.md
datos.txt
Pista

git archive --format=tar HEAD escribe el archivo en la salida; tar -t lista su contenido.