Aprende a dominar GitHub y Git desde lo más básico hasta técnicas avanzadas para mejorar tu flujo de trabajo de desarrollo.
Contenido del curso
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
- Visita github.com
- Haz clic en "Sign up" y sigue las instrucciones
- Verifica tu dirección de correo electrónico
- 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
- Usando Homebrew:
- Linux:
- Ubuntu/Debian:
sudo apt-get install git
- Fedora:
sudo dnf install git
- Ubuntu/Debian:
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
- Inicia sesión en GitHub y haz clic en "+" en la esquina superior derecha
- Selecciona "New repository"
- Completa los campos requeridos:
- Nombre del repositorio
- Descripción (opcional)
- Visibilidad (público o privado)
- Opciones de inicialización (README, .gitignore, licencia)
- 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) ydevelop
(desarrollo) - Ramas auxiliares:
feature/
,release/
,hotfix/
- Ramas principales:
- GitHub Flow:
- Una rama principal (
main
) - Ramas para nuevas características que se fusionan mediante PR
- Una rama principal (
- 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
- Fork: Crea una copia personal de un repositorio
- Botón "Fork" en la interfaz de GitHub
- Clone: Clona tu fork a tu máquina local
git clone https://github.com/tu-usuario/repositorio-forkeado.git
- Remote: Añade el repositorio original como "upstream"
git remote add upstream https://github.com/usuario-original/repositorio-original.git
- Trabajo: Crea una rama, haz cambios y commits
- Push: Envía la rama a tu fork
git push origin mi-nueva-caracteristica
- 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
0 Comentarios