🐙 GitHub Cheatsheet Completo 🐙
GitHub es una plataforma web para el alojamiento de repositorios de control de versiones Git. Facilita la colaboración en proyectos de software, la gestión de código, la revisión de código, el seguimiento de problemas y la automatización del flujo de trabajo de desarrollo.
1. 🌟 Conceptos Clave (GitHub vs. Git)
- Git: El sistema de control de versiones distribuido (software) que rastrea los cambios en el código localmente.
- GitHub: La plataforma de alojamiento web que proporciona servicios para repositorios Git, permitiendo la colaboración, la gestión de proyectos, y un ecosistema de herramientas adicionales.
- Repositorio (Repository): Un proyecto alojado en GitHub. Contiene todos los archivos del proyecto, su historial de Git, y las funcionalidades de GitHub (Issues, PRs, etc.).
- Pull Request (PR): El corazón de la colaboración en GitHub. Una forma de proponer cambios de una rama a otra, permitiendo la revisión del código antes de fusionarlo.
- Issue (Problema): Un elemento de seguimiento para tareas, bugs, mejoras o preguntas.
- Fork (Bifurcación): Crear una copia personal de un repositorio de otro usuario en tu propia cuenta. Útil para contribuir a proyectos de código abierto.
- Star (Estrella): Una forma de “marcar como favorito” un repositorio, útil para guardar proyectos interesantes.
- Watcher (Observador): Recibir notificaciones sobre la actividad de un repositorio.
2. 🛠️ Configuración Inicial y Repositorios
2.1. Cuenta y Perfil
- Crear Cuenta: Regístrate en github.com.
- Configurar Perfil: Añade tu nombre, biografía, enlaces, etc.
- Configurar SSH Keys (Recomendado): Para una autenticación segura sin contraseña para las operaciones de Git.
- Generar:
ssh-keygen -t ed25519 -C "tu_email@example.com"(orsa) - Añadir a GitHub: Copia el contenido de
~/.ssh/id_ed25519.pub(oid_rsa.pub) y pégalo en “Settings > SSH and GPG keys > New SSH key”. - Probar:
ssh -T git@github.com
- Generar:
2.2. Crear un Nuevo Repositorio en GitHub
- Ve a tu perfil de GitHub y haz clic en el botón
+(New repository). - Define:
- Owner: Tu usuario o una organización.
- Repository name: Nombre del proyecto (ej.
my-awesome-project). - Description (optional).
- Public/Private: Visibilidad del repositorio.
- Add a README file: Recomendado para una descripción inicial.
- Add .gitignore: Elige una plantilla para tu lenguaje/framework.
- Choose a license: Para código abierto.
- Haz clic en “Create repository”.
2.3. Clonar un Repositorio (Localmente)
- Obtener una copia local de un repositorio existente en GitHub.
git clone <URL_del_repositorio> [nombre_directorio_local] # URL HTTPS: git clone https://github.com/usuario/repo.git # URL SSH (recomendado): git clone git@github.com:usuario/repo.git
2.4. Enlazar un Repositorio Local a GitHub
- Si ya tienes un repositorio Git local (
git init):cd mi_proyecto_local/ git remote add origin <URL_del_repositorio_remoto_en_github> git branch -M main # Renombra la rama por defecto a 'main' si aún es 'master' git push -u origin main # Sube el historial local a GitHub
3. 📝 Funcionalidades del Repositorio (Web UI)
En la página principal de un repositorio en GitHub, verás varias pestañas:
Code:- Explorar archivos y directorios.
- Ver el historial de commits.
- Descargar el código (
Code>Download ZIP). - Clonar el repositorio.
- Ver ramas y tags.
Issues:- Crear Nuevos Issues: Para reportar bugs, solicitar características, hacer preguntas.
- Asignar Issues: A miembros del equipo.
- Etiquetar Issues (Labels): Para categorizar (bug, enhancement, question).
- Milstones: Agrupar Issues y Pull Requests en objetivos de proyecto.
Pull requests:- Ver PRs Abiertos/Cerrados: Listado de todas las propuestas de cambio.
- Crear un Nuevo PR: Para proponer tus cambios.
- Revisar Código: Dejar comentarios, sugerencias, aprobar o solicitar cambios.
- Fusionar PRs: Integrar los cambios en la rama de destino.
Actions:- Configurar flujos de trabajo de CI/CD (Integración Continua/Despliegue Continuo).
- Ejecutar pruebas automáticas, builds, despliegues.
Projects:- Tableros Kanban personalizables para organizar tareas y flujo de trabajo.
- Vincula Issues y PRs a columnas (ej. To do, In progress, Done).
Wiki:- Espacio para documentación del proyecto, guías, FAQs.
- Escrito en Markdown.
Security:- Alertas de seguridad (dependencias vulnerables).
- Secret scanning (prevenir la exposición de secretos).
Insights:- Estadísticas del repositorio: contribuidores, tráfico, commits.
Settings:- Manage Access: Añadir colaboradores, gestionar permisos.
- Branches: Configurar reglas de protección de ramas (ej. requerir revisiones, no permitir pushes directos a
main). - Webhooks: Automatizar notificaciones a sistemas externos sobre eventos en el repositorio.
- GitHub Pages: Alojamiento de sitios estáticos directamente desde el repositorio.
4. 🤝 Flujo de Colaboración (Pull Request Workflow)
El modelo de colaboración más común en GitHub.
-
Forkear el Repositorio (si contribuyes a un proyecto externo):
- En la página del repositorio original, haz clic en
Fork. Esto crea una copia en tu cuenta.
- En la página del repositorio original, haz clic en
-
Clonar tu Fork (o el repositorio original si eres colaborador directo):
git clone git@github.com:tu_usuario/nombre_del_fork.git cd nombre_del_fork/ -
Crear una Nueva Rama para tu Característica/Corrección:
- Es crucial trabajar en una rama separada para tus cambios.
git checkout -b mi-nueva-feature -
Realizar Cambios y Commits (Localmente):
- Modifica archivos.
git add .git commit -m "feat: añade la nueva característica X"- Repite hasta que la característica esté completa.
-
Subir tu Rama a GitHub (Push):
git push -u origin mi-nueva-feature -
Crear un Pull Request (PR):
- Ve a la página de tu repositorio en GitHub.
- Verás un botón o notificación para “Compare & pull request” desde tu rama recién subida.
- Elige la rama base (a la que quieres fusionar, ej.
mainodevelopdel repositorio original) y la rama de comparación (tumi-nueva-feature). - Escribe un título claro y una descripción detallada del PR.
- Puedes vincular Issues, añadir revisores, etiquetas, proyectos.
-
Revisión de Código (Code Review):
- Otros desarrolladores (o el mantenedor del proyecto) revisarán tus cambios, dejarán comentarios, sugerencias o solicitarán más cambios.
- Si hay cambios solicitados, realízalos en tu rama local, haz nuevos commits y
git push(el PR se actualizará automáticamente).
-
Fusionar el PR (Merge Pull Request):
- Una vez aprobado, el PR puede ser fusionado.
- Opciones de Merge:
- Create a merge commit: Mantiene el historial de commits original y añade un commit de merge.
- Squash and merge: Combina todos los commits de la rama del PR en un solo commit antes de fusionar. Historial más limpio.
- Rebase and merge: Rebasea los commits del PR sobre la rama base, creando un historial lineal. ¡CUIDADO con rebase si ya compartiste commits!
-
Sincronizar tu Fork (Opcional, para proyectos forkados):
- Para mantener tu fork actualizado con el repositorio original (upstream):
git remote add upstream <URL_del_repositorio_original> git fetch upstream git checkout main # O tu rama de desarrollo git merge upstream/main git push origin main
- Para mantener tu fork actualizado con el repositorio original (upstream):
5. 🚀 GitHub Actions (CI/CD)
GitHub Actions te permite automatizar tareas directamente en tus repositorios.
- Workflows: Archivos YAML (
.github/workflows/) que definen una serie dejobsysteps. - Eventos: Los workflows se disparan por eventos (ej.
push,pull_request,schedule,workflow_dispatch). - Jobs: Un conjunto de pasos que se ejecutan en un runner. Pueden ejecutarse en paralelo o en secuencia.
- Steps: Una tarea individual (ej. ejecutar un comando de shell, usar una Action predefinida).
- Actions: Componentes reutilizables que realizan una tarea específica (ej.
actions/checkout,actions/setup-node).
Ejemplo Básico de Workflow (.github/workflows/build-test.yml):
name: CI Build and Test # Nombre del workflow
on: # Eventos que disparan el workflow
push:
branches: [ "main" ] # Se ejecuta en pushes a la rama main
pull_request:
branches: [ "main" ] # Se ejecuta en PRs a la rama main
jobs: # Conjunto de tareas
build: # Nombre del job
runs-on: ubuntu-latest # Sistema operativo del runner
steps: # Pasos del job
- uses: actions/checkout@v4 # Action para clonar el repositorio
- name: Setup Node.js # Nombre del paso
uses: actions/setup-node@v4 # Action para configurar Node.js
with:
node-version: '20' # Versión de Node.js
- name: Install dependencies # Paso para instalar dependencias
run: npm ci # 'ci' para instalación limpia
- name: Run tests # Paso para ejecutar pruebas
run: npm test
6. 🔒 Seguridad y Acceso
- Personal Access Tokens (PATs):
- Alternativa a la contraseña para autenticación en la línea de comandos o con APIs de GitHub.
- Crea PATs en “Settings > Developer settings > Personal access tokens”.
- ¡Trátalos como contraseñas! No los expongas en tu código.
- Two-Factor Authentication (2FA):
- Actívalo para mayor seguridad de tu cuenta.
- Branch Protection Rules:
- En “Repository Settings > Branches > Add branch protection rule”.
- Requerir Pull Request reviews, estado de checks de CI/CD, no permitir pushes directos, etc.
- CODEOWNERS:
- Define quién es responsable de revisar el código en ciertos directorios/archivos.
- Archivo en
.github/CODEOWNERS.
7. 💡 Consejos y Mejores Prácticas
- README.md Completo: Un buen
README.mdes la tarjeta de presentación de tu proyecto. Incluye descripción, cómo instalar, cómo usar, cómo contribuir, licencia. .gitignoreEfectivo: Asegúrate de que tu archivo.gitignoreexcluya dependencias (node_modules/), logs, archivos temporales, configuraciones locales (.env), y otros archivos que no deben estar en el control de versiones.- Commits Atómicos y Claros: Cada commit debe ser una unidad de cambio lógica y con un mensaje descriptivo.
- Pull Requests Pequeños y Focales: PRs pequeños y con un único propósito son más fáciles de revisar y fusionar.
- Utiliza Issues para Todo: Registra bugs, características, preguntas, y discusiones en Issues. Usa etiquetas y hitos.
- Code Review Riguroso: Revisa los PRs de otros y solicita revisiones para los tuyos.
- Estrategia de Ramificación Consistente: Adopta y sigue una estrategia de ramas (ej. GitHub Flow para proyectos simples, Git Flow para más complejos).
- Sincroniza Frecuentemente:
git pulla menudo para evitar conflictos grandes. - Protege la Rama Principal: Configura reglas de protección para tu rama
main(omaster). - Automatiza con GitHub Actions: Aprovecha CI/CD para automatizar pruebas, builds y despliegues.
- Documenta en el Wiki/Discussions: Para documentación más extensa o preguntas de la comunidad.
Este cheatsheet te proporciona una referencia completa de GitHub, cubriendo sus conceptos esenciales, cómo interactuar con repositorios, el flujo de colaboración, GitHub Actions y las mejores prácticas para un desarrollo de software eficiente y colaborativo.