Se evalúa el historialEl módulo requiere "historial que evidencie trabajo progresivo, no una entrega única en la fecha límite". Un repositorio con un solo commit penaliza aunque el código sea correcto.

1.gitignore y .gitattributes

Se crean antes del primer commit, para no llegar a subir nunca lo que no debe subirse.

text
# .gitignore
target/
build/
.idea/
.vscode/
.DS_Store
.env
*.local.yml
application-secrets.yml
datos/
logs/
Nunca ignoresmvnw, mvnw.cmd, .mvn/wrapper/, pom.xml, compose.yaml, .env.example, ni nada de src/ (incluidos los tests).
text
# .gitattributes
* text=auto eol=lf
*.cmd text eol=crlf
*.bat text eol=crlf
*.jar binary
*.png binary

2Repositorio remoto y SSH

Repositorio privado, con el profesorado como colaborador.

bash
cd multagal
git init
git branch -M main
git remote add origin git@github.com:usuario/multagal-apellido.git

ssh-keygen -t ed25519 -C "correo@ejemplo.com"
cat ~/.ssh/id_ed25519.pub    # pega en Settings → SSH keys
ssh -T git@github.com        # verificación

3README y reorganización de commits

El README.md debe permitir a alguien que clona el repositorio por primera vez arrancar el proyecto sin ayuda.

text
# multagal

Sistema de gestión de sanciones de tráfico (módulo Acceso a Datos, UD0).

## Requisitos previos
- JDK 25
- Maven 3.9+
- Docker + Docker Compose v2

## Cómo levantar los servicios de datos
docker compose up -d
docker compose ps

## Cómo arrancar la aplicación
./mvnw spring-boot:run

## Cómo ejecutar las pruebas
./mvnw test

## Decisiones técnicas
Ver docs/adr/
TipoCuándo
featNueva funcionalidad
fixCorrección de un defecto
refactorCambio interno sin alterar el comportamiento
testAñadir o corregir pruebas
docsDocumentación, Javadoc, ADR
choreConstrucción, dependencias, configuración
text
feat(dominio): añade los records Expediente, Denuncia e Infraccion
fix(jdbc): cierra el ResultSet en el bloque try-with-resources
refactor(service): extrae el cálculo de la bonificación a un método propio
test(repository): cubre el caso de expediente inexistente
docs(adr): registra la decisión de usar JdbcTemplate sobre JDBC puro
chore(docker): fija la versión de la imagen de PostgreSQL a 16-3.4
Evita"cambios", "arreglado", "asdf", "commit final", o mezclar varios cambios distintos en un commit: si necesitas un "y", son dos commits.

4Rama de hito, Pull Request y fusión

--no-ff fuerza un commit de fusión, dejando constancia en el historial de que existió un hito con su propio conjunto de commits.

bash
git switch -c hito/ud0-arranque
# ... varios commits ...
git push -u origin hito/ud0-arranque
# → abrir Pull Request hacia main
# → autorrevisión y revisión entre iguales
git switch main
git merge --no-ff hito/ud0-arranque
git push
Qué revisar antes de fusionar¿Se cierran los recursos (try-with-resources)? ¿Hay credenciales o rutas absolutas hardcodeadas? ¿Se concatenan parámetros en SQL? ¿Inyección por constructor? ¿Estado mutable en un bean singleton? ¿Los nombres son descriptivos? ¿Las pruebas cubren casos desfavorables?

5Etiqueta de entrega

La etiqueta fija el commit exacto que se evalúa: se pone antes del plazo, no en el minuto final.

bash
git tag -a ud0-completado -m "UD0: arranque del entorno y esqueleto de MULTAGAL"
git push origin ud0-completado
git tag -n              # listar
git show ud0-completado # ver a qué commit apunta
git log --oneline --graph --all

!Errores frecuentes

Trabajé en main por error (sin push)
bash
git switch -c hito/ud0-arranque
git switch main
git reset --hard origin/main
push rechazado: "fetch first"
bash
git pull --rebase
git push
Commiteé el .envSácalo del seguimiento, añádelo a .gitignore y cambia todas las contraseñas: persisten en el historial aunque borres el fichero.
Nunca reescribas historia publicadagit commit --amend, git rebase o git push --force sobre commits ya subidos a origin rompen el repositorio para otros y pueden invalidar la entrega.

✓Criterios de aceptación

  • El repositorio no contiene target/, .idea/ ni .env
  • Historial con mínimo 8 commits con mensajes convencionales
  • Cada commit compila y las pruebas pasan
  • PR fusionado con --no-ff; la etiqueta ud0-completado apunta a main
  • README.md permite arrancar a alguien que clona el repositorio por primera vez
  • docs/adr/ contiene mínimo dos decisiones registradas

Adaptado de apartado h — Flujo de trabajo con Git.