Si escribes código, tarde o temprano vas a toparte con Git. No es una herramienta más: es el sistema de control de versiones que mueve el desarrollo de software moderno. En esta guía te explico qué es Git, cómo se usa, por qué todo el mundo habla de GitHub, y qué alternativas tienes si quieres hospedar tu propio repositorio.
¿Qué es Git y por qué necesitas usarlo?
Git es un sistema de control de versiones distribuido. Creado por Linus Torvalds en 2005 para gestionar el desarrollo del kernel de Linux, se ha convertido en el estándar de facto de la industria.
En términos simples, Git lleva un registro de cada cambio que haces en tu código. Puedes volver atrás, crear ramas para experimentar, trabajar con otras personas sin pisaros, y tener una copia de seguridad completa de todo tu proyecto.
¿Qué problema resuelve?
Sin control de versiones, trabajar en equipo es un caos: archivos compartidos por correo, carpetas con nombres como proyecto-final-v3-definitivo-esta-si.zip, conflictos sin resolver... Git elimina todo eso. Cada desarrollador tiene su copia local completa del repositorio, y los cambios se sincronizan cuando toca.
Los beneficios clave:
- Historial completo: cada commit es una foto del proyecto. Puedes volver a cualquier punto anterior.
- Trabajo en paralelo: las ramas (branches) permiten desarrollar funcionalidades sin afectar al código estable.
- Colaboración: varios desarrolladores pueden trabajar en el mismo proyecto sin conflictos constantes.
- Seguridad: al ser distribuido, cada copia local es un backup completo.
Conceptos básicos de Git
Antes de meterse con GitHub, hay que entender cómo funciona Git localmente.
El flujo de trabajo básico
Working Directory → Staging Area (index) → Repositorio Local
- Modificas archivos en tu directorio de trabajo
- Añades los cambios al staging con
git add - Confirmas los cambios con
git commit, que los guarda en el historial
Comandos esenciales
# Configuración inicial (solo una vez)
git config --global user.name "Tu Nombre"
git config --global user.email "[email protected]"
# Iniciar un repositorio
git init
# Clonar uno existente
git clone https://github.com/usuario/repositorio.git
# Ver el estado de los archivos
git status
# Añadir archivos al staging
git add archivo.py # Un archivo concreto
git add . # Todos los archivos modificados
# Confirmar los cambios
git commit -m "Descripción del cambio"
# Ver el historial
git log
git log --oneline --graph # Más visual
# Subir cambios a un remoto
git push origin main
# Traer cambios del remoto
git pull origin main
Ramas (branches)
Las ramas son lo que hace a Git tan potente para trabajar en equipo:
# Crear una rama nueva
git branch nombre-rama
# Cambiar a esa rama
git checkout nombre-rama
# O en un solo paso (Git 2.23+)
git switch -c nombre-rama
# Fusionar una rama con la actual
git merge nombre-rama
# Eliminar una rama (ya fusionada)
git branch -d nombre-rama
El flujo típico: creas una rama para una funcionalidad, trabajas en ella, haces commits, y cuando está lista la fusionas con main (o master).
GitHub: el centro neurálgico del código abierto
GitHub es una plataforma que aloja repositorios Git en la nube. No es lo mismo que Git: Git es el sistema de control de versiones; GitHub es un servicio que lo utiliza, añadiendo una capa visual y social.
Repositorios públicos vs privados
| Característica | Público | Privado |
|---|---|---|
| Visibilidad | Cualquiera puede verlo | Solo tú y tus colaboradores |
| Coste | Gratis (sin límite) | Gratis hasta 3 colaboradores en el plan free |
| Ideal para | Proyectos open source, portafolio | Código propietario, trabajo interno |
| Fork | Cualquiera puede hacer fork | No aplica |
Importante: desde 2019, GitHub permite repositorios privados ilimitados incluso en la cuenta gratuita. El límite está en el número de colaboradores (tres en el plan free, aunque han ido flexibilizándolo).
Funcionalidades clave de GitHub
- Pull Requests: propones cambios de una rama a otra con discusión, revisión de código y tests automáticos antes de fusionar.
- Issues: sistema de seguimiento de tareas, bugs y propuestas.
- Actions: CI/CD integrado. Puedes ejecutar tests, linters, despliegues automáticos cuando haces push.
- GitHub Pages: hosting gratuito para sitios estáticos directamente desde tu repositorio.
- Wiki y Discussions: documentación y foros de debate por proyecto.
- Projects: tablero Kanban para gestión de proyectos.
Flujo de trabajo típico con GitHub
# Clonar el repositorio
git clone https://github.com/usuario/proyecto.git
cd proyecto
# Crear rama para una funcionalidad
git switch -c feature/nueva-funcion
# Trabajar... hacer cambios...
git add .
git commit -m "Añadida nueva funcionalidad"
# Subir la rama a GitHub
git push -u origin feature/nueva-funcion
# En GitHub: crear Pull Request
# Alguien lo revisa, se discute, se aprueba
# Se fusiona con main
Alternativas a GitHub con hospedaje local
GitHub no es la única opción. Si quieres tener control total sobre tus repositorios, sin depender de un servicio externo y con privacidad absoluta, puedes montar tu propio servidor Git con herramientas diseñadas para ello.
Gitea — La opción más ligera
Gitea es un servidor Git auto-gestionado, escrito en Go, extremadamente ligero. Funciona en una Raspberry Pi sin problemas.
Ventajas:
- Ocupa ~50 MB de RAM
- Se instala en minutos con Docker
- Interfaz similar a GitHub
- Incluye Issues, Pull Requests, Wiki, Actions (experimental)
- Consume muy pocos recursos
Instalación con Docker:
# docker-compose.yml
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
ports:
- "3000:3000"
- "22:22"
volumes:
- ./gitea-data:/data
restart: unless-stopped
docker compose up -d
# Acceder en http://localhost:3000
GitLab Community Edition
GitLab CE es la alternativa más completa a GitHub, con CI/CD integrado, registro de contenedores, y potentes herramientas de DevOps.
Ventajas:
- CI/CD nativo muy potente (GitLab CI)
- Registro de contenedores Docker integrado
- Gestión de proyectos completa
- Más funcionalidades que GitHub en algunos aspectos
Instalación con Docker:
services:
gitlab:
image: gitlab/gitlab-ce:latest
container_name: gitlab
ports:
- "80:80"
- "443:443"
- "22:22"
volumes:
- ./gitlab-config:/etc/gitlab
- ./gitlab-logs:/var/log/gitlab
- ./gitlab-data:/var/opt/gitlab
restart: unless-stopped
⚠️ Requisitos: GitLab necesita al menos 4 GB de RAM. No es para una Raspberry Pi.
Forgejo — Fork comunitario de Gitea
Forgejo nació como un fork de Gitea cuando el proyecto pasó a ser gestionado por una empresa. Es completamente comunitario y sin ánimo de lucro.
Ventajas:
- Totalmente open source sin empresa detrás
- Compatible con Gitea (migración directa)
- Más activo en políticas de privacidad y gobernanza
services:
forgejo:
image: codeberg.org/forgejo/forgejo:latest
container_name: forgejo
ports:
- "3000:3000"
- "22:22"
volumes:
- ./forgejo-data:/data
restart: unless-stopped
Gogs — El original ultra-ligero
Gogs fue el precursor de Gitea. Aunque menos activo hoy en día, sigue siendo funcional y aún más ligero que Gitea si tienes un hardware muy limitado.
Comparativa rápida
| Herramienta | RAM mínima | CI/CD | Docker | Ideal para |
|---|---|---|---|---|
| Gitea | ~50 MB | Actions (experimental) | ✅ Una línea | Servidor casero, Raspberry Pi |
| Forgejo | ~50 MB | Actions (nativo) | ✅ Una línea | Quien quiera código 100% comunitario |
| GitLab CE | ~4 GB | GitLab CI (muy potente) | ✅ | Equipos que necesitan CI/CD completo |
| Gogs | ~30 MB | No | ✅ | Hardware muy limitado |
¿Cuándo elegir cada opción?
GitHub es la opción correcta cuando:
- Necesitas visibilidad para tu proyecto (open source, portafolio)
- Trabajas en equipo y quieres la herramienta más usada del mercado
- Quieres Actions, Pages, y todo el ecosistema sin configurar nada
Self-hosted (Gitea/Forgejo/GitLab) es mejor cuando:
- Tienes código sensible que no debe salir de tu red
- Quieres evitar límites de colaboradores o almacenamiento
- Necesitas CI/CD privado sin pagar por runners
- Te gusta tener control total sobre tus datos
Mi recomendación personal: usa GitHub para proyectos públicos y portafolio, y Gitea en Docker para proyectos privados que quieras tener bajo tu control. Con docker compose up -d lo tienes funcionando en cinco minutos.
Conclusión
Git no es opcional si programas: es la herramienta que te permite dormir tranquilo sabiendo que tu código está versionado, seguro y listo para colaborar. GitHub le añade la capa social y de automatización que lo convierte en el estándar de la industria.
Pero si prefieres tener el control, montar tu propio servidor Git con Docker es más fácil de lo que parece. Gitea en una Raspberry Pi o en un VPS te da prácticamente la misma experiencia que GitHub, sin depender de nadie.
Empieza por aprender bien Git: init, add, commit, push, pull, branch, merge. Con eso tienes el 90% del flujo cubierto. El resto lo irás aprendiendo sobre la marcha.