Curso Completo de GitHub: De principiante a experto

Aprende a dominar GitHub y Git desde lo más básico hasta técnicas avanzadas para mejorar tu flujo de trabajo de desarrollo.

1. Introducción a GitHub

1.1 ¿Qué es GitHub?

GitHub es una plataforma de desarrollo colaborativo basada en Git que permite alojar y revisar código, gestionar proyectos y construir software junto a otros desarrolladores. Fue adquirida por Microsoft en 2018 y se ha convertido en el mayor repositorio de código fuente del mundo.

1.2 ¿Por qué usar GitHub?

  • Control de versiones: Rastrea y registra cambios en el código
  • Colaboración: Facilita el trabajo en equipo
  • Visibilidad: Muestra tu trabajo a la comunidad
  • Portafolio: Sirve como currículum para desarrolladores
  • Comunidad: Acceso a millones de proyectos open source

1.3 Git vs GitHub

Git: Sistema de control de versiones distribuido para rastrear cambios en archivos

GitHub: Plataforma en la nube que utiliza Git y añade funcionalidades como issues, pull requests, acciones automatizadas, etc.

2. Primeros pasos con GitHub

2.1 Crear una cuenta en GitHub

  1. Visita github.com
  2. Haz clic en "Sign up" y sigue las instrucciones
  3. Verifica tu dirección de correo electrónico
  4. Configura tu perfil con foto, biografía y otra información relevante

2.2 Instalar Git

  • Windows: Descargar el instalador desde git-scm.com
  • macOS:
    • Usando Homebrew: brew install git
    • Descargar desde git-scm.com
  • Linux:
    • Ubuntu/Debian: sudo apt-get install git
    • Fedora: sudo dnf install git

2.3 Configuración inicial de Git

# Configurar nombre de usuario

git config --global user.name "Tu Nombre"

# Configurar email

git config --global user.email "tu.email@ejemplo.com"

# Verificar la configuración

git config --list

2.4 Autenticación en GitHub

Configurar credenciales con SSH o token de acceso personal

Proceso de configuración de SSH:

# Generar clave SSH

ssh-keygen -t ed25519 -C "tu.email@ejemplo.com"

# Iniciar el agente SSH

eval "$(ssh-agent -s)"

# Añadir clave privada al agente

ssh-add ~/.ssh/id_ed25519

# Copiar la clave pública y añadirla a GitHub

cat ~/.ssh/id_ed25519.pub

3. Fundamentos de Git

3.1 Conceptos básicos

  • Repositorio: Colección de archivos y su historial de cambios
  • Commit: Punto de guardado en el historial de cambios
  • Branch (Rama): Línea de desarrollo independiente
  • Merge: Combinar cambios de una rama a otra
  • Clone: Copiar un repositorio remoto a tu máquina local
  • Pull: Obtener cambios desde un repositorio remoto
  • Push: Enviar cambios a un repositorio remoto

Un commit es como una "fotografía" del estado de tu proyecto en un momento determinado. Cada commit tiene un identificador único (hash) y lleva asociado un mensaje descriptivo.

3.2 Inicializar un repositorio

# Crear un nuevo repositorio

git init

# Clonar un repositorio existente

git clone https://github.com/usuario/repositorio.git

3.3 Flujo de trabajo básico

# Verificar estado del repositorio

git status

# Añadir archivos al área de preparación

git add archivo.txt    # Añadir un archivo específico

git add .              # Añadir todos los archivos

# Realizar un commit

git commit -m "Mensaje descriptivo del cambio"

# Ver el historial de commits

git log

3.4 Sincronizar con GitHub

# Añadir un repositorio remoto

git remote add origin https://github.com/usuario/repositorio.git

# Enviar cambios al repositorio remoto

git push -u origin main

# Obtener cambios del repositorio remoto

git pull origin main

4. Trabajando con repositorios

4.1 Crear un repositorio en GitHub

  1. Inicia sesión en GitHub y haz clic en "+" en la esquina superior derecha
  2. Selecciona "New repository"
  3. Completa los campos requeridos:
    • Nombre del repositorio
    • Descripción (opcional)
    • Visibilidad (público o privado)
    • Opciones de inicialización (README, .gitignore, licencia)
  4. Haz clic en "Create repository"

4.2 Estructura de un repositorio

  • README.md: Descripción y documentación del proyecto
  • .gitignore: Archivos que Git debe ignorar
  • LICENSE: Licencia del proyecto
  • CONTRIBUTING.md: Guía para contribuyentes
  • CODE_OF_CONDUCT.md: Normas de comportamiento

4.3 Trabajar con archivos

# Crear un archivo

touch archivo.txt

# Editar un archivo (con tu editor preferido)

code archivo.txt  # VS Code

nano archivo.txt  # Nano

vim archivo.txt   # Vim

# Renombrar un archivo

git mv nombre_antiguo.txt nombre_nuevo.txt

# Eliminar un archivo

git rm archivo.txt

4.4 Deshacer cambios

# Descartar cambios en un archivo no añadido al área de preparación

git checkout -- archivo.txt

# Quitar un archivo del área de preparación

git reset HEAD archivo.txt

# Deshacer el último commit (mantiene los cambios)

git reset --soft HEAD~1

# Deshacer el último commit (elimina los cambios)

git reset --hard HEAD~1

# Crear un nuevo commit que revierte otro commit

git revert <hash-del-commit>

5. Ramas y flujos de trabajo

5.1 Trabajar con ramas

# Ver todas las ramas

git branch

# Crear una nueva rama

git branch nueva-rama

# Cambiarse a una rama

git checkout nueva-rama

# Crear y cambiarse a una nueva rama (atajo)

git checkout -b nueva-rama

# Eliminar una rama

git branch -d rama-a-eliminar

5.2 Fusionar ramas

# Fusionar otra rama a tu rama actual

git merge otra-rama

# Resolver conflictos manualmente cuando aparezcan

# Después de resolver, añadir y hacer commit

git add .

git commit -m "Resuelto conflicto de fusión"

5.3 Flujos de trabajo comunes

  • Gitflow:
    • Ramas principales: main (producción) y develop (desarrollo)
    • Ramas auxiliares: feature/, release/, hotfix/
  • GitHub Flow:
    • Una rama principal (main)
    • Ramas para nuevas características que se fusionan mediante PR
  • Trunk Based Development:
    • Desarrollo en la rama principal
    • Ramas de corta duración para características

5.4 Rebasing

# Reorganizar commits de tu rama actual sobre otra rama

git rebase otra-rama

# Modo interactivo para modificar commits

git rebase -i HEAD~3  # Para los últimos 3 commits

6. Colaboración en GitHub

6.1 Forks y Pull Requests

  1. Fork: Crea una copia personal de un repositorio
    • Botón "Fork" en la interfaz de GitHub
  2. Clone: Clona tu fork a tu máquina local
    git clone https://github.com/tu-usuario/repositorio-forkeado.git
  3. Remote: Añade el repositorio original como "upstream"
    git remote add upstream https://github.com/usuario-original/repositorio-original.git
  4. Trabajo: Crea una rama, haz cambios y commits
  5. Push: Envía la rama a tu fork
    git push origin mi-nueva-caracteristica
  6. Pull Request: Crea una PR desde la interfaz de GitHub

6.2 Gestión de Pull Requests

  • Crear un PR con título y descripción claros
  • Solicitar revisiones de código
  • Responder a comentarios y realizar cambios
  • Fusionar PR cuando esté aprobado
  • Cerrar PR si ya no es necesario

6.3 Issues y proyectos

  • Issues: Para reportar bugs, solicitar características o discutir ideas
    • Etiquetas, asignaciones, hitos
    • Plantillas de issues
  • Proyectos: Tableros Kanban para gestionar tareas
    • Automatización de flujos de trabajo
    • Diferentes vistas (tablero, tabla)

6.4 Discusiones y wikis

  • Discussions: Para preguntas, ideas y anuncios
  • Wiki: Para documentación más extensa del proyecto

9.2 Git hooks

Pre-commit: Verificar calidad del código antes de commit

Pre-push: Ejecutar pruebas antes de push

Ejemplo de pre-commit para lint:

#!/bin/bash # .git/hooks/pre-commit npm run lint

9.3 GitHub API

  • REST API para interactuar con GitHub
  • GraphQL API para consultas más eficientes
  • Autenticación con tokens

9.4 Git avanzado

  • Cherry-pick: Aplicar commits específicos
    git cherry-pick <hash-commit>
  • Stash: Guardar cambios temporalmente
    git stash # Guardar cambios git stash pop # Recuperar y eliminar stash git stash list # Listar stashes
  • Bisect: Encontrar commits problemáticos
    git bisect start git bisect bad # Commit actual es malo git bisect good <hash-commit> # Un commit anterior es bueno # Git te ayudará a encontrar el commit problemático git bisect reset # Terminar bisect

9.5 Integración con herramientas externas

  • VS Code, IntelliJ, Eclipse
  • Jira, Trello, Slack
  • Docker, Kubernetes

10. Mejores prácticas y consejos

10.1 Commits semánticos

  • Formato: tipo(ámbito): mensaje
  • Tipos comunes: feat, fix, docs, style, refactor, test, chore

10.2 Versionado semántico

  • MAJOR.MINOR.PATCH (X.Y.Z)
  • GitHub Releases para gestionar versiones

10.3 Seguridad en GitHub

  • Dependabot para actualizar dependencias
  • CodeQL para análisis de seguridad
  • Configurar permisos adecuados

10.4 Optimización del flujo de trabajo

  • Aliases de Git para comandos frecuentes
    git config --global alias.co checkout
    
    git config --global alias.br branch
    
    git config --global alias.ci commit
    
    git config --global alias.st status
    
    
  • Herramientas gráficas: GitKraken, GitHub Desktop, Sourcetree

10.5 Documentación efectiva

  • README.md completo y claro
  • Uso de badges e imágenes
  • Ejemplos de código y casos de uso
  • Guías de contribución

Recursos adicionales

Documentación oficial

Herramientas útiles

Comunidad y aprendizaje


Publicar un comentario

0 Comentarios