Curso de programación con Git
Git, la herramienta de control de versiones más utilizada por desarrolladores. Aprende a gestionar y colaborar en proyectos de software con Git.
Git es un sistema de control de versiones distribuido, diseñado para gestionar y registrar los cambios en archivos de código fuente durante el desarrollo de software.
Creado por Linus Torvalds en 2005, Git permite a múltiples desarrolladores trabajar de manera simultánea en un proyecto, facilitando la colaboración y manteniendo un historial completo de modificaciones.
¿Qué es un sistema de control de versiones?
Un sistema de control de versiones es una herramienta que registra los cambios realizados en archivos a lo largo del tiempo. Permite revertir archivos a estados anteriores, comparar cambios y entender quién modificó qué y cuándo. Esto es esencial en proyectos de software donde el código evoluciona constantemente y varios colaboradores pueden estar trabajando en diferentes partes del proyecto.
Características principales de Git
- Distribuido: Cada copia de un repositorio Git es un repositorio completo con historial completo, lo que permite trabajar sin conexión y reduce el riesgo de pérdida de datos.
- Eficiencia: Optimizado para manejar proyectos grandes con rapidez y eficiencia.
- Integridad: Utiliza sumas de verificación (hash SHA-1) para garantizar la integridad de los datos.
- Ramas y fusiones: Facilita la creación y gestión de ramas para el desarrollo paralelo y la posterior fusión de cambios.
Instalación de Git
En Linux
La mayoría de las distribuciones incluyen Git en sus repositorios oficiales.
Para distribuciones basadas en Debian/Ubuntu:
sudo apt-get update
sudo apt-get install git
Para distribuciones basadas en Fedora:
sudo dnf install git
En macOS
Utiliza Homebrew para instalar Git:
brew install git
En Windows
Descarga el instalador desde la página oficial:
Configuración inicial
Después de instalar Git, es recomendable configurar tu nombre de usuario y correo electrónico:
git config --global user.name "Tu Nombre"
git config --global user.email "tuemail@example.com"
Estos datos se utilizarán en cada commit que realices.
Comandos básicos de Git
Inicializar un repositorio
Para crear un nuevo repositorio en un directorio existente:
git init
Clonar un repositorio existente
Para obtener una copia local de un repositorio remoto:
git clone https://github.com/usuario/repositorio.git
Ver el estado del repositorio
Muestra los cambios realizados desde el último commit:
git status
Añadir cambios al área de preparación
Antes de confirmar cambios, debes añadirlos al área de preparación:
git add archivo.txt # Añade un archivo específico
git add . # Añade todos los archivos modificados
Realizar un commit
Confirma los cambios añadidos al área de preparación:
git commit -m "Mensaje descriptivo del cambio"
Ver el historial de commits
Muestra un registro de los commits realizados:
git log
Enviar cambios al repositorio remoto
Para subir tus commits al repositorio remoto:
git push origin main # Envía a la rama 'main' en 'origin'
Obtener cambios del repositorio remoto
Actualiza tu repositorio local con los cambios remotos:
git pull origin main
Trabajo con ramas
Las ramas permiten desarrollar funcionalidades aisladas del código principal.
Crear una nueva rama
git branch nueva-funcionalidad
Cambiar a otra rama
git checkout nueva-funcionalidad
O crear y cambiar a la rama en un solo paso:
git checkout -b nueva-funcionalidad
Fusionar ramas
Para combinar los cambios de una rama con otra:
git checkout main
git merge nueva-funcionalidad
Eliminar una rama
Una vez fusionada, puedes eliminarla:
git branch -d nueva-funcionalidad
Resolución de conflictos
Al fusionar ramas, pueden surgir conflictos si se han modificado las mismas líneas en ambos lados.
Identificar conflictos
Git indicará qué archivos tienen conflictos después de una fusión fallida. Puedes verlos con:
git status
Resolver conflictos
Edita los archivos conflictivos para solucionar las discrepancias. Luego, añade los archivos resueltos y realiza un commit:
git add archivo_en_conflicto.txt
git commit -m "Resueltos conflictos de fusión"
Repositorios remotos
Añadir un repositorio remoto
Si tu repositorio local no está vinculado a uno remoto:
git remote add origin https://github.com/usuario/repositorio.git
Ver repositorios remotos
git remote -v
Cambiar la URL de un remoto
git remote set-url origin https://github.com/usuario/nuevo-repositorio.git
Etiquetas
Las etiquetas se utilizan para marcar puntos específicos en el historial, como versiones de lanzamiento.
Crear una etiqueta
Etiqueta anotada con mensaje:
git tag -a v1.0 -m "Versión 1.0"
Listar etiquetas
git tag
Enviar etiquetas al remoto
git push origin v1.0
# O todas las etiquetas:
git push origin --tags
Archivo .gitignore
Para excluir archivos o directorios del seguimiento de Git, utiliza el archivo .gitignore
.
Ejemplo de .gitignore
# Ignorar archivos compilados
*.class
# Ignorar directorios
/logs
/tmp
# Ignorar archivos específicos
secretos.txt
Revertir cambios
Deshacer cambios no añadidos al área de preparación
git checkout -- archivo.txt
Retirar archivos del área de preparación
git reset archivo.txt
Revertir un commit
Crea un nuevo commit que deshace los cambios:
git revert <id_commit>
Alias y configuraciones útiles
Crear alias para comandos frecuentes
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm 'commit -m'
Ahora puedes usar git st
en lugar de git status
.
Flujos de trabajo recomendados
Git Flow
Un modelo de ramificación que define roles claros para las ramas y procedimientos para fusionarlas.
- main: Código en producción.
- develop: Rama de integración para desarrollo.
- feature/: Ramas para nuevas funcionalidades.
- release/: Preparación de nuevas versiones.
- hotfix/: Correcciones urgentes en producción.
GitHub Flow
Más simple y adecuado para despliegues continuos.
- Trabajar siempre en ramas cortas basadas en
main
. - Abrir pull requests para revisión y discusión antes de fusionar.
Integración con herramientas y servicios
GitHub
Plataforma que ofrece repositorios remotos y funcionalidades adicionales como issues, pull requests y wikis.
GitLab
Similar a GitHub, con características añadidas como integración continua (CI/CD) incorporada.
Bitbucket
Ofrece repositorios privados gratuitos y se integra bien con herramientas de Atlassian como Jira.
Consejos y buenas prácticas
- Commits atómicos: Realiza commits que contengan cambios relacionados y limitados en alcance.
- Mensajes claros: Utiliza mensajes de commit descriptivos que expliquen el "qué" y el "por qué".
- Revisión de código: Aprovecha las pull requests para revisar y mejorar el código antes de fusionarlo.
- Documentación: Mantén una documentación actualizada y utiliza el archivo
README.md
para explicar el proyecto.
Recursos adicionales
- Documentación oficial: git-scm.com/doc
- Pro Git Book: Libro completo y gratuito sobre Git.
- Try Git: Tutorial interactivo para aprender los fundamentos.
Tutoriales de Git
Aprende Git con tutoriales de programación en Git.
Introducción A Git
Introducción Y Entorno
Instalación Y Configuración
Introducción Y Entorno
Comandos Básicos
Comandos
Comandos Avanzados
Comandos
Ramas
Ramas
Github Como Remoto
Trabajo Remoto Y Colaboración
Git Con Github Desktop
Trabajo Remoto Y Colaboración
Git Con Visual Studio Code
Trabajo Remoto Y Colaboración
Git Con Intellij Idea
Trabajo Remoto Y Colaboración
Resolución De Conflictos
Trabajo Remoto Y Colaboración
Ejercicios de programación de Git
Evalúa tus conocimientos en Git con ejercicios de programación Git de tipo Test, Puzzle, Código y Proyecto con VSCode.
Introducción a Git
Comandos avanzados
Comandos básicos
GitHub como remoto
Comandos básicos
Comandos avanzados
Git con GitHub Desktop
Ramas
Instalación y configuración
Resolución de conflictos
Git con Intellij IDEA
Git con Visual Studio Code
Tipo de tecnología
Control de versiones
Categoría laboral
DevOps
Año de lanzamiento
2005
Developers
Linus Torvalds
Todos los módulos de Git
Git
Introducción y entorno
Git
Comandos
Git
Ramas
Git
Trabajo remoto y colaboración
Git
Etiquetado y versionado
Git
Técnicas avanzadas
Otras tecnologías
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Selenium
Selenium
Testing / QA (Quality Assurance)
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
Seaborn
Seaborn
Ciencia de Datos e Inteligencia artificial
Biblioteca de visualización de datos para Python.
CSharp
CSharp
Backend
Lenguaje de programación de Microsoft para aplicaciones robustas.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
Go
Go
Backend
Lenguaje de programación eficiente y concurrente creado por Google.
SQL
SQL
Administración de bases de datos
Lenguaje para gestionar bases de datos relacionales.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.