Dia 23 - Fork de un repositorio Git en Gitea
Problema / Desafio
Un nuevo desarrollador (Jon) se unio al equipo del proyecto Nautilus y necesita comenzar a trabajar en un proyecto existente:
- Acceder a la interfaz web de Gitea
- Iniciar sesion con el usuario
jon(password:Jon_pass123) - Localizar el repositorio
sarah/story-blogy hacer un fork bajo el usuariojon
Conceptos clave
Que es un Fork
Un fork es una copia completa de un repositorio bajo tu propia cuenta. A diferencia de un clone (que es una copia local), el fork vive en el servidor Git y te permite:
- Trabajar de forma independiente sin afectar el repositorio original
- Proponer cambios al repositorio original mediante Pull Requests
- Experimentar libremente con el codigo
Repositorio original: Fork:
sarah/story-blog jon/story-blog
├── README.md ├── README.md ← copia exacta
├── posts/ ├── posts/
└── .git/ └── .git/
(sarah es owner) (jon es owner)
Fork vs Clone vs Branch
| Concepto | Donde vive | Proposito | Relacion con el original |
|---|---|---|---|
| Fork | Servidor (otra cuenta) | Copia independiente para contribuir | Mantiene referencia al upstream |
| Clone | Maquina local | Copia de trabajo local | Mantiene referencia al origin |
| Branch | Mismo repositorio | Linea de desarrollo paralela | Mismo repositorio |
Fork + Clone (flujo tipico de contribucion):
[sarah/story-blog] ←── Pull Request ── [jon/story-blog] (servidor)
│ │
│ clone │ clone
↓ ↓
(copia local sarah) (copia local jon) (local)
Flujo de trabajo con Fork
El flujo tipico de contribucion con forks:
1. Fork → Copiar el repo a tu cuenta
2. Clone → Descargar tu fork a tu maquina local
3. Branch → Crear un branch para tus cambios
4. Commit → Hacer cambios y commits
5. Push → Subir cambios a tu fork
6. PR → Crear Pull Request al repo original
Gitea — plataforma Git self-hosted
Gitea es una plataforma Git self-hosted ligera, similar a GitHub o GitLab pero diseñada para ser:
- Ligera — consume pocos recursos (puede correr en una Raspberry Pi)
- Facil de instalar — un solo binario o contenedor Docker
- Compatible — API compatible con GitHub, soporta webhooks, CI/CD, etc.
| Caracteristica | GitHub | GitLab | Gitea |
|---|---|---|---|
| Self-hosted | No (Enterprise si) | Si | Si |
| Recursos minimos | N/A | ~4GB RAM | ~256MB RAM |
| Open source | No | Community Edition | Si (MIT) |
| CI/CD integrado | GitHub Actions | GitLab CI | Gitea Actions (desde v1.19) |
| Lenguaje | Ruby/Go | Ruby/Go | Go |
Pasos
1. Acceder a Gitea
Hacer click en el boton Gitea UI en la barra superior del entorno de laboratorio para abrir la interfaz web.
2. Iniciar sesion como Jon
- Username:
jon - Password:
Jon_pass123
3. Localizar el repositorio
Navegar al repositorio sarah/story-blog. Se puede encontrar de varias formas:
- Usar la barra de busqueda y buscar
story-blog - Ir directamente a la URL:
http://<gitea-server>/sarah/story-blog - Ir a Explore > Repositories y buscar el repositorio
4. Hacer Fork del repositorio
- Dentro del repositorio
sarah/story-blog, hacer click en el boton Fork (esquina superior derecha) - Seleccionar el usuario jon como destino del fork
- Click en Fork Repository
Despues del fork, se redirige automaticamente a jon/story-blog — la copia del repositorio bajo la cuenta de Jon.
5. Verificar el fork
Confirmar que:
- El repositorio aparece como jon/story-blog
- Se muestra la etiqueta "forked from sarah/story-blog" debajo del nombre
- El contenido (archivos, commits) es identico al repositorio original
Comandos / Codigo
Trabajar con el fork despues de crearlo (opcional)
Una vez creado el fork en Gitea, Jon puede clonarlo localmente para empezar a trabajar:
# Clonar el fork
git clone http://<gitea-server>/jon/story-blog.git
cd story-blog
# Verificar el remote (apunta al fork)
git remote -v
origin http://<gitea-server>/jon/story-blog.git (fetch)
origin http://<gitea-server>/jon/story-blog.git (push)
Configurar el upstream (repositorio original)
Para mantener el fork sincronizado con el repositorio original de Sarah:
# Agregar el repositorio original como upstream
git remote add upstream http://<gitea-server>/sarah/story-blog.git
# Verificar ambos remotes
git remote -v
origin http://<gitea-server>/jon/story-blog.git (fetch)
origin http://<gitea-server>/jon/story-blog.git (push)
upstream http://<gitea-server>/sarah/story-blog.git (fetch)
upstream http://<gitea-server>/sarah/story-blog.git (push)
Sincronizar el fork con el upstream
# Obtener cambios del repositorio original
git fetch upstream
# Fusionar cambios de upstream/main en tu branch local
git checkout main
git merge upstream/main
# Subir los cambios sincronizados a tu fork
git push origin main
upstream (sarah/story-blog)
│
│ git fetch upstream
↓
tu repo local (main)
│
│ git push origin main
↓
origin (jon/story-blog)
Fork via API de Gitea
Gitea tambien permite hacer fork via su API REST:
# Fork usando la API de Gitea
curl -X POST "http://<gitea-server>/api/v1/repos/sarah/story-blog/forks" \
-H "Content-Type: application/json" \
-u "jon:Jon_pass123"
{
"id": 2,
"name": "story-blog",
"full_name": "jon/story-blog",
"fork": true,
"parent": {
"full_name": "sarah/story-blog"
}
}
Fork en Gitea vs GitHub
La interfaz es muy similar, pero hay algunas diferencias menores:
| Accion | GitHub | Gitea |
|---|---|---|
| Boton de Fork | Esquina superior derecha | Esquina superior derecha |
| Seleccionar destino | Popup con cuentas/orgs | Pagina de configuracion |
| Cambiar nombre al fork | Si (desde 2022) | Si |
| Fork de repos privados | Si (con permisos) | Si (con permisos) |
| Sincronizar fork | Boton "Sync fork" | Manual o via API |
Troubleshooting
| Problema | Solucion |
|---|---|
| No aparece el boton Fork | Verificar que estas logueado. No puedes hacer fork de tu propio repositorio |
| Error "repository already exists" | Ya existe un fork previo. Ir a jon/story-blog o eliminarlo primero |
No se encuentra sarah/story-blog |
Verificar que el repositorio existe y es publico (o que jon tiene permisos de lectura) |
| Error de permisos al clonar el fork | Verificar las credenciales: git clone http://jon:Jon_pass123@<server>/jon/story-blog.git |