GitHub

img

¿Qué es GitHub?

GitHub es una plataforma basada en la nube para el control de versiones y la colaboración en proyectos de software.
Está construida sobre Git, un sistema de control de versiones distribuido, y añade funcionalidades como:

Diferencias frente a otros:


2. ¿Para qué se usa?

Usos principales:

Contextos ideales:

3. ¿Qué puedo construir con GitHub?

Con GitHub puedes crear y gestionar prácticamente cualquier tipo de proyecto:

Ejemplo: alojar un portafolio personal con GitHub Pages.

4. ¿Cuándo es más conveniente usarlo?

Usar GitHub es más recomendable cuando:

No es la mejor opción si:

Buenas prácticas recomendadas


Resumen rápido

✅ Fortalezas principales:

⚠️ Debilidades principales:

🛠️ Cuándo usarlo:

🚫 Cuándo evitarlo:


Temas


Conceptos relacionados

Antes de usar GitHub de forma efectiva, es importante conocer algunos conceptos clave que se relacionan directamente con la plataforma y su funcionamiento.

1. Git

Sistema de control de versiones distribuido que permite registrar cambios en el código, trabajar de forma colaborativa y mantener un historial completo de modificaciones.

Git es la base sobre la que se construye GitHub.

2. Repositorio (Repo)

Espacio donde se almacena el proyecto, incluyendo:

Puede ser público (visible para todos) o privado (acceso restringido).

3. Commit

Registro puntual de cambios realizados en el proyecto.

Ejemplo de mensaje de commit:
feat: agregar formulario de registro

4. Branch (Rama)

Versión paralela del proyecto que permite trabajar en nuevas funciones o correcciones sin afectar la rama principal.

Flujo común de ramas:

5. Pull Request (PR)

Solicitud para fusionar cambios de una rama en otra, generalmente revisada por otros miembros del equipo antes de aprobarla.

6. Issue

Herramienta para registrar tareas, bugs o mejoras dentro de un proyecto.

7. Fork

Copia de un repositorio en tu propia cuenta para:

8. Merge

Proceso de fusionar cambios de una rama a otra.

Tipos comunes de merge:

9. Markdown

Lenguaje de marcado ligero usado en GitHub para:

10. GitHub Actions

Sistema de automatización para ejecutar flujos de trabajo como:

11. GitHub Pages

Servicio gratuito de GitHub para publicar sitios web estáticos directamente desde un repositorio.

12. Licencias

Definen cómo otros pueden usar, modificar y distribuir tu código.

Ejemplo:

🔼 temas


Herramientas recomendadas

Para trabajar eficientemente con GitHub, estas herramientas y configuraciones son altamente recomendadas:

1. Git CLI (Command Line Interface)

Instalar Git en tu computadora para ejecutar comandos básicos:

git clone       # Clonar un repositorio.
git add         # Agregar archivos al área de staging.
git commit      # Guardar cambios con mensaje.
git push        # Enviar cambios a GitHub.
git pull        # Obtener cambios de GitHub.

Descarga oficial: https://git-scm.com/


2. Visual Studio Code (VSCode)

Editor de código altamente compatible con GitHub.

Extensiones recomendadas:


3. GitHub Desktop

Aplicación gráfica oficial de GitHub para usuarios que prefieren una interfaz visual en lugar de usar comandos.

Descarga oficial: https://desktop.github.com/


4. SSH Keys

Clave segura para autenticarte con GitHub sin tener que escribir usuario y contraseña cada vez que interactúas con un repositorio.

Pasos básicos:

  1. Generar clave SSH:
    ssh-keygen -t rsa -b 4096 -C "tu_email@ejemplo.com"
    
  2. Agregar la clave pública a GitHub.
  3. Configurar Git para usar SSH.

5. GitHub CLI (gh)

Herramienta oficial de línea de comandos para gestionar GitHub directamente desde la terminal.

Comandos útiles:

gh repo create            # Crear repositorio en GitHub
gh issue list             # Listar issues
gh pr create              # Crear un pull request
gh pr merge               # Fusionar pull request

Instalación: https://cli.github.com/

6. Integraciones y Automatización

7. Navegadores y Extensiones Web

8. Documentación y Wikis

🔼 temas


Snippets rápidos

Fragmentos de código y configuraciones que se utilizan con frecuencia en proyectos de GitHub.

Estructura básica de README.md

Archivo principal para documentar un proyecto en GitHub.

# Nombre del Proyecto

Descripción breve de lo que hace el proyecto y su propósito.

## Instalación

```bash
git clone https://github.com/usuario/proyecto.git
cd proyecto
npm install
```

Uso

npm run dev

Contribuir

  1. Haz un fork del proyecto.
  2. Crea una nueva rama (git checkout -b feature/nueva-funcion).
  3. Realiza tus cambios y haz commit (git commit -m 'feat: descripción del cambio').
  4. Haz push a la rama (git push origin feature/nueva-funcion).
  5. Crea un Pull Request.

Licencia

Este proyecto está bajo la licencia MIT.

1. .gitignore básico para Node.js

Evitar subir archivos innecesarios al repositorio.

node_modules/
.env
dist/
coverage/

2. Flujo típico de ramas en GitHub

Estructura recomendada para ramas en proyectos colaborativos.

main        # Versión estable lista para producción
develop     # Rama de integración para desarrollo
feature     # Nuevas funcionalidades
hotfix      # Correcciones urgentes
release     # Versión previa a producción

3. Template para Issues

Archivo .github/ISSUE_TEMPLATE/bug_report.md

## Descripción del bug

Explica claramente el problema.

## Pasos para reproducir

1. Ir a...
2. Hacer clic en...
3. Ver error.

## Comportamiento esperado

Explica lo que debería suceder.

## Información adicional

Capturas de pantalla, versiones, etc.

4. Template para Pull Requests

Archivo .github/PULL_REQUEST_TEMPLATE.md

## Descripción

Breve resumen de los cambios realizados.

## Tipo de cambio

- [ ] Nueva funcionalidad
- [ ] Corrección de bug
- [ ] Mejora de documentación
- [ ] Refactor

## Checklist

- [ ] El código sigue las convenciones del proyecto.
- [ ] Los tests se han ejecutado correctamente.
- [ ] La documentación se ha actualizado si es necesario.

🔼 temas


Comandos

Estos son los comandos principales de Git y GitHub, con ejemplos claros y directos.

Configuración inicial

git config --global user.name "Tu Nombre"       # Configurar nombre de usuario
git config --global user.email "tu@email.com"   # Configurar email
git config --list                               # Ver configuración actual

Creación y clonación de repositorios

git init                                         # Inicializar repositorio en carpeta actual
git clone https://github.com/usuario/repo.git    # Clonar repositorio remoto

Ciclo básico de trabajo

git status                            # Ver estado de archivos
git add archivo.js                    # Agregar archivo específico
git add .                             # Agregar todos los cambios
git commit -m "feat: mensaje claro"   # Guardar cambios con mensaje
git push origin main                  # Subir cambios a GitHub
git pull origin main                  # Descargar cambios desde GitHub

Ramas (Branch)

git branch                          # Listar ramas
git branch nueva-rama               # Crear nueva rama
git checkout nueva-rama             # Cambiar a otra rama
git checkout -b feature/login       # Crear y cambiar a nueva rama
git merge nueva-rama                # Fusionar una rama a la actual
git branch -d rama-obsoleta         # Eliminar rama local

Historial y commits

git log                      # Ver historial completo
git log --oneline            # Historial resumido
git diff                     # Ver cambios no confirmados
git show commit_id           # Ver detalles de un commit específico

Revertir y deshacer cambios

git reset archivo.js                   # Quitar archivo del staging
git checkout -- archivo.js             # Deshacer cambios no guardados
git reset --hard HEAD~1                # Deshacer último commit y cambios

Trabajar con remotos

git remote -v                          # Ver repositorios remotos
git remote add origin URL_REPO         # Vincular repositorio remoto
git push -u origin main                # Subir cambios y establecer remoto por defecto

Pull Requests (CLI de GitHub)

Si tienes instalada la GitHub CLI:

gh auth login                           # Autenticarse en GitHub
gh repo create                          # Crear un nuevo repositorio en GitHub
gh pr create                            # Crear Pull Request
gh pr list                              # Listar Pull Requests
gh pr merge                             # Fusionar Pull Request

GitHub Pages

Publicar un sitio web desde una rama:

git branch -M main                      # Renombrar rama principal a main
git push -u origin main                 # Subir cambios
# Luego habilitar GitHub Pages desde la configuración del repositorio

Tip:
Memoriza el flujo básico:
git addgit commitgit push
Este ciclo es la base del trabajo diario con Git y GitHub.

🔼 temas


Conceptos Claves

🟢 Básico

1. ¿Cuál es la diferencia fundamental entre Git y GitHub?

2. Explica el propósito de un "pull request" (solicitud de extracción) y describe el proceso general para crear uno.

Un pull request (PR) es una solicitud para fusionar cambios de una rama a otra en un repositorio. Sirve para revisar, discutir y aprobar cambios antes de integrarlos.

Proceso:

  1. Crear una rama para los cambios:
    git checkout -b feature/nueva-funcion
    
  2. Hacer commits con las modificaciones.
  3. Subir la rama al repositorio remoto:
    git push origin feature/nueva-funcion
    
  4. En GitHub, crear un Pull Request desde la rama hacia main o develop.
  5. Solicitar revisiones y, una vez aprobado, fusionar.

3. ¿Cómo se clona un repositorio de GitHub a tu máquina local?
¿Qué comandos de Git utilizarías?

Para clonar un repositorio:

git clone https://github.com/usuario/repo.git
cd repo

Este comando descarga el repositorio y configura automáticamente el remoto llamado origin.

4. Describe la diferencia entre git fetch, git pull y git merge.
¿Cuándo usarías cada uno?

Uso recomendado:

5. ¿Qué es el archivo .gitignore y por qué es importante en un proyecto?

El archivo .gitignore especifica qué archivos o carpetas no deben ser rastreados por Git, evitando subir información sensible o archivos innecesarios.

Ejemplo:

node_modules/
.env
dist/
*.log

🟡 Intermedio

6. Explica el concepto de "rebase" en Git y cómo se diferencia de git merge. ¿Cuándo sería apropiado usar rebase?

Cuándo usar rebase:

Ejemplo:

git checkout feature
git rebase main

7. ¿Qué es un "fork" en GitHub y en qué situaciones lo utilizarías? ¿Cuál es el proceso para mantener tu "fork" sincronizado con el repositorio original?

Proceso para sincronizar:

git remote add upstream https://github.com/original/repo.git
git fetch upstream
git checkout main
git merge upstream/main
git push origin main

8. ¿Para qué sirve git revert vs git reset? Explica diferencias entre sus modos (--soft, --mixed, --hard).

Modos de reset:

9. ¿Qué son los tags en Git? ¿Cómo los usarías para marcar versiones estables en un proyecto?

Ejemplo:

git tag -a v1.0.0 -m "Versión estable inicial"
git push origin v1.0.0

Esto permite rastrear versiones y generar releases en GitHub.

10. ¿Cómo se gestionan las ramas en GitHub? Describe el flujo de trabajo de ramas que consideras una buena práctica.

Flujo recomendado (Git Flow simplificado):

main            # Rama estable para producción.
develop         # Rama para integrar cambios en desarrollo.
feature         # Nuevas funcionalidades.
hotfix          # Correcciones urgentes en producción.
release         # Preparación previa a producción.

🔴 Avanzado

11. Describe cómo se puede proteger una rama principal (por ejemplo main o master) usando políticas de GitHub.

En GitHub se puede proteger una rama mediante la sección Branch Protection Rules:

12. ¿Qué son los submodules en Git y cuándo sería útil utilizarlos en un repositorio de GitHub?

Ejemplo:

git submodule add https://github.com/usuario/lib.git libs/lib

13. Menciona al menos dos estrategias avanzadas de branching y cuándo conviene utilizarlas.

14. Explica cómo auditar el historial de cambios de un repositorio grande para identificar cuándo se introdujo un bug o una característica específica.

15. Explica el concepto de "GitHub Actions" y describe un flujo de trabajo de integración continua/despliegue continuo (CI/CD) que podrías implementar con él.

Ejemplo de flujo CI/CD:

  1. Cuando se hace push a la rama main, se ejecutan pruebas automáticas.
  2. Si las pruebas pasan, se genera un build de la aplicación.
  3. El build se despliega automáticamente a un servidor o plataforma como Heroku o AWS.

Archivo .github/workflows/ci.yml:

name: CI Pipeline
on:
  push:
    branches:
      - main
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Instalar dependencias
        run: npm install
      - name: Ejecutar pruebas
        run: npm test

Esto asegura calidad y despliegues automáticos de forma segura.

🔼 temas