Conceptos clave en Forgejo
Conceptos clave en Forgejo
Este capitulo no es una introduccion a Git. Asume que sabes hacer commits, crear branches y usar remotes. El objetivo es explicar como Forgejo implementa cada concepto y que opciones adicionales ofrece la plataforma.
Repositorios
Un repositorio en Forgejo es mas que un directorio con historial Git. La plataforma agrega una capa de gestion sobre el repositorio.
Visibilidad
Cada repositorio tiene uno de tres niveles de visibilidad:
Publico: Cualquier persona puede ver el codigo, clonar el repositorio y leer los issues. No necesitan cuenta en la instancia.
Privado: Solo el propietario y los colaboradores explicitamente invitados tienen acceso. Desde el exterior, el repositorio ni siquiera aparece en busquedas.
Interno: Visible para cualquier usuario autenticado en la instancia, pero no para el publico general. Util en instancias de empresas o universidades donde quieres compartir con todos los miembros sin hacerlo publico.
Forks
Un fork es una copia completa de un repositorio en otra cuenta u organizacion. En Forgejo, los forks mantienen referencia al repositorio original. Desde la interfaz puedes ver cuantos forks tiene tu repositorio y abrir Pull Requests desde un fork hacia el repositorio original.
Mirrors
Forgejo puede configurar un repositorio como mirror de una fuente externa. El mirror se sincroniza automaticamente en intervalos configurables. Hay dos tipos:
- Mirror de entrada: Forgejo clona y actualiza desde una URL externa (GitHub, GitLab, otro Forgejo)
- Mirror de salida: Forgejo empuja los cambios hacia un repositorio externo
Los mirrors son utiles para respaldos automaticos y para mantener repositorios sincronizados entre instancias.
Templates
Un repositorio puede marcarse como template. Cuando un usuario crea un nuevo repositorio, puede elegir un template como punto de partida. El nuevo repositorio hereda la estructura de archivos, las labels, los milestones y los webhooks del template, pero no el historial de commits.
Wiki por repositorio
Cada repositorio puede tener una wiki propia. La wiki de Forgejo es en si misma un repositorio Git, lo que significa que puedes clonarla, editarla localmente y hacer push como cualquier otro repositorio. El formato es Markdown.
Branches y proteccion de ramas
Ramas protegidas
Forgejo permite definir reglas de proteccion para ramas especificas. Cuando una rama esta protegida, se pueden configurar estas restricciones:
- Bloquear push directo: Obliga a que todos los cambios lleguen por Pull Request
- Requerir revisiones aprobadas: Cuantas aprobaciones se necesitan antes de poder hacer merge
- Requerir que los checks de CI pasen: El merge se bloquea si los Actions fallan
- Bloquear push forzado: Previene
git push --forceincluso de administradores - Requerir commits lineales: Solo permite merge si el branch esta al dia con la base
Las protecciones se configuran desde Configuracion > Ramas > Agregar regla de proteccion.
Reglas de push
Ademas de las protecciones de rama, puedes definir reglas mas granulares:
- Que usuario o equipo puede hacer push a una rama
- Si se permite crear ramas que coincidan con un patron
- Si se permite eliminar ramas remotas
Firma GPG obligatoria
Para contextos donde la autenticidad de los commits importa (cumplimiento normativo, software critico), Forgejo puede configurarse para rechazar commits sin firma GPG valida en ramas protegidas.
La verificacion aparece en la interfaz con un indicador verde “Verificado” junto a cada commit firmado.
Pull Requests
Un Pull Request (PR) en Forgejo es la unidad central del flujo de revision de codigo. Representa una propuesta de cambio desde una rama hacia otra.
Workflow de revision
- El autor abre el PR desde su rama hacia la rama destino
- Los revisores asignados reciben una notificacion
- Cada revisor puede agregar comentarios en lineas especificas del diff o comentarios generales
- El revisor puede aprobar, solicitar cambios o simplemente comentar
- Cuando se cumplen las condiciones de merge, el autor o un mantenedor puede hacer merge
Aprobaciones requeridas
Puedes configurar cuantas aprobaciones son necesarias antes de permitir el merge. Si un revisor que habia aprobado el PR ve nuevos commits, su aprobacion puede invalidarse automaticamente (configurable).
Estrategias de merge
Forgejo soporta tres estrategias y el administrador del repositorio puede habilitar o deshabilitar cada una:
Merge commit: Crea un commit de merge que preserva el historial completo de la rama. El historial muestra exactamente cuando se integro cada feature.
Squash: Combina todos los commits de la rama en un solo commit antes de hacer merge. Produce un historial lineal mas limpio. Util para PRs con muchos commits de “work in progress”.
Rebase: Reaplica los commits de la rama sobre la rama destino sin crear un commit de merge. Produce un historial completamente lineal.
La eleccion de estrategia afecta como se ve el historial de git log en la rama principal.
CI checks en PRs
Si el repositorio tiene Actions configurados, Forgejo muestra el estado de los workflows directamente en el PR. Si la regla de proteccion de rama lo requiere, el merge se bloquea automaticamente si algun check falla.
Draft PRs
Un PR puede abrirse como borrador (Draft). Un PR en estado Draft no puede recibir aprobaciones formales ni hacerse merge. Sirve para compartir trabajo en progreso y recibir feedback temprano sin presion de integracion.
Issues
Los issues son el sistema de seguimiento de tareas, bugs y solicitudes de funcionalidad de Forgejo.
Labels
Las etiquetas permiten clasificar los issues. Forgejo incluye un conjunto predeterminado que puedes modificar. Cada label tiene nombre y color. Puedes crear conjuntos de labels predefinidos por tipo de proyecto (bug tracker, feature requests, etc.).
Las labels se pueden aplicar tambien a Pull Requests.
Milestones
Un milestone agrupa issues y PRs que forman parte de una entrega o version especifica. Cada milestone muestra el porcentaje de progreso segun cuantos issues se han cerrado. Los milestones tienen fecha de vencimiento opcional.
Projects
Projects es el sistema de tableros tipo kanban de Forgejo. Puedes crear un project a nivel de repositorio o de organizacion. Cada project tiene columnas configurables y puedes agregar issues o PRs a las columnas.
Los projects permiten una vista diferente del trabajo: en lugar de ver una lista de issues, ves el flujo de trabajo con estados visuales.
Templates de issue
Puedes crear plantillas que pre-rellenan la descripcion cuando alguien abre un issue. Esto es util para estandarizar reportes de bugs (con campos como pasos para reproducir, comportamiento esperado, entorno) o solicitudes de funcionalidad.
Los templates se definen como archivos Markdown en .forgejo/ISSUE_TEMPLATE/ o .github/ISSUE_TEMPLATE/ (por compatibilidad).
Asignacion multiple
Un issue puede asignarse a varios usuarios simultaneamente. Todos los asignados reciben notificaciones de actividad en el issue y aparecen listados en el panel lateral.
Que viene en los proximos capitulos
Los conceptos presentados aqui se profundizan en el resto del tutorial:
- Capitulo 7: Creacion y configuracion de repositorios en detalle
- Capitulo 8: Configuracion de SSH y tokens de acceso personal
- Capitulo 9: Uso avanzado de issues, labels y milestones
- Capitulo 10: Flujo completo de Pull Requests con revisiones
- Capitulo 11: Organizaciones, equipos y permisos
- Capitulo 14-17: Forgejo Actions para CI/CD
Cada capitulo incluye comandos reales y configuraciones que puedes aplicar directamente en tu instancia.
Siguiente: Capitulo 4 - Instalacion con Docker