Repositorios remotos con GitHub
Módulo 3: Repositorios remotos con GitHub
Section titled “Módulo 3: Repositorios remotos con GitHub”Los repositorios remotos son versiones de tu proyecto alojadas en internet. GitHub es la plataforma más popular para alojar repositorios Git. En este módulo aprenderás a trabajar con repositorios remotos de manera eficiente.
Crear repositorio en GitHub
Section titled “Crear repositorio en GitHub”Antes de conectar tu repositorio local con GitHub, necesitas crear un repositorio remoto en la plataforma.
Crear repositorio desde GitHub
Section titled “Crear repositorio desde GitHub”Iniciar sesión en github.com
Crear nuevo repositorio: Haz clic en el botón ”+” → “New repository”
Configurar repositorio:
- Repository name: Nombre único y descriptivo
- Description: Descripción breve del proyecto (opcional)
- Visibility: Public (visible para todos) o Private (solo para ti)
- Initialize: Opciones de inicialización
Opciones de inicialización:
- ✅ Add a README file: Recomendado para nuevos proyectos
- ✅ Add .gitignore: Selecciona plantilla según tu tecnología
- ✅ Choose a license: Importante para proyectos open source
Configuraciones importantes
Section titled “Configuraciones importantes”Ventajas:
- Visible en tu perfil
- Otros pueden contribuir
- Ideal para portafolio
- GitHub Pages gratuito
Consideraciones:
- Código visible para todos
- No incluir información sensible
- Seguir buenas prácticas
Ventajas:
- Código privado
- Control total de acceso
- Ideal para proyectos comerciales
- Colaboradores invitados
Limitaciones:
- No visible en perfil público
- Limitaciones en GitHub Pages
- Menos exposición
Clonar repositorio (git clone)
Section titled “Clonar repositorio (git clone)”Clonar es crear una copia local completa de un repositorio remoto, incluyendo todo su historial.
Comandos básicos de clonación
Section titled “Comandos básicos de clonación”# Clonar con HTTPS (requiere token para push)git clone https://github.com/usuario/repositorio.git
# Clonar con SSH (requiere configuración de llaves)git clone git@github.com:usuario/repositorio.git
# Clonar en directorio específicogit clone https://github.com/usuario/repositorio.git mi-proyecto
# Clonar solo la rama principal (más rápido)git clone --single-branch https://github.com/usuario/repositorio.git
# Clonar con historial limitadogit clone --depth 1 https://github.com/usuario/repositorio.gitDiferencias entre HTTPS y SSH
Section titled “Diferencias entre HTTPS y SSH”# URL HTTPShttps://github.com/usuario/repositorio.git
# Ventajas:# - Funciona en cualquier red# - No requiere configuración especial# - Fácil de usar para principiantes
# Desventajas:# - Requiere token para push# - Puede ser más lento# - Necesita autenticación frecuente# URL SSHgit@github.com:usuario/repositorio.git
# Ventajas:# - Autenticación automática con llaves# - Más seguro# - Más rápido para operaciones frecuentes
# Desventajas:# - Requiere configuración inicial# - Puede estar bloqueado en algunas redes# - Más complejo para principiantesDespués de clonar
Section titled “Después de clonar”# Navegar al directorio clonadocd repositorio
# Verificar configuracióngit remote -vgit branch -agit log --oneline
# Ver información del repositoriogit config --list --localConectar repositorio local con remoto (git remote add)
Section titled “Conectar repositorio local con remoto (git remote add)”Si ya tienes un repositorio local y quieres conectarlo con GitHub, usa git remote add.
Agregar repositorio remoto
Section titled “Agregar repositorio remoto”# Agregar remoto llamado 'origin' (convención estándar)git remote add origin https://github.com/usuario/repositorio.git
# Verificar que se agregó correctamentegit remote -v
# Ver información detallada del remotogit remote show originGestionar múltiples remotos
Section titled “Gestionar múltiples remotos”# Agregar múltiples remotosgit remote add origin https://github.com/usuario/repositorio.gitgit remote add upstream https://github.com/original/repositorio.gitgit remote add backup https://gitlab.com/usuario/repositorio.git
# Ver todos los remotosgit remote -v
# Cambiar URL de remoto existentegit remote set-url origin git@github.com:usuario/repositorio.git
# Eliminar remotogit remote remove backup
# Renombrar remotogit remote rename origin githubSubir cambios (git push)
Section titled “Subir cambios (git push)”git push envía tus commits locales al repositorio remoto.
Comandos básicos de push
Section titled “Comandos básicos de push”# Push básico (primera vez)git push -u origin main
# Push después de configurar upstreamgit push
# Push de rama específicagit push origin nombre-rama
# Push de todas las ramasgit push --all origin
# Push incluyendo tagsgit push --tags originConfigurar upstream
Section titled “Configurar upstream”Upstream es la rama remota que Git usa por defecto para git push y git pull.
# Configurar upstream en el primer pushgit push -u origin main# Equivale a:git push --set-upstream origin main
# Después puedes usar simplemente:git pushgit pull# Ver configuración de upstreamgit branch -vv
# Ver configuración de rama actualgit status
# Configurar upstream para rama existentegit branch --set-upstream-to=origin/main mainSolucionar problemas comunes de push
Section titled “Solucionar problemas comunes de push”# Error: Updates were rejected# Solución: Pull primero, luego pushgit pull origin maingit push origin main
# Error: Non-fast-forward# Solución: Merge o rebasegit pull --rebase origin maingit push origin main
# Forzar push (¡CUIDADO!)git push --force origin main# Mejor usar:git push --force-with-lease origin mainDescargar cambios (git pull, git fetch)
Section titled “Descargar cambios (git pull, git fetch)”Mantener tu repositorio local sincronizado con el remoto es esencial en el trabajo colaborativo.
git fetch vs git pull
Section titled “git fetch vs git pull”# Descargar cambios sin fusionargit fetch origin
# Fetch de rama específicagit fetch origin main
# Fetch de todos los remotosgit fetch --all
# Ver qué cambios hay disponiblesgit log HEAD..origin/main --oneline
# Ver diferenciasgit diff HEAD origin/maingit fetch:
- Descarga cambios del remoto
- NO modifica tu working directory
- Actualiza referencias remotas
- Seguro de usar siempre
# Pull básico (fetch + merge)git pull origin main
# Pull con rebasegit pull --rebase origin main
# Pull de rama actualgit pull
# Pull con estrategia específicagit pull --no-ff origin maingit pull:
- Equivale a
git fetch+git merge - Modifica tu working directory
- Puede crear commits de merge
- Requiere working directory limpio
Flujo recomendado para sincronización
Section titled “Flujo recomendado para sincronización”Verificar estado local
Terminal window git status# Asegúrate de que no hay cambios sin confirmarFetch para ver cambios disponibles
Terminal window git fetch origingit log HEAD..origin/main --onelinePull con la estrategia apropiada
Terminal window # Para historial lineal (recomendado)git pull --rebase origin main# Para preservar contexto de mergegit pull origin mainResolver conflictos si existen
Terminal window # Si hay conflictos, Git te lo indicarágit status# Editar archivos conflictivosgit add archivo-resuelto.txtgit rebase --continue # Si usaste --rebasegit commit # Si usaste merge normal
Ejemplo práctico completo
Section titled “Ejemplo práctico completo”Vamos a crear un flujo completo desde cero:
Escenario 1: Repositorio nuevo en GitHub
Section titled “Escenario 1: Repositorio nuevo en GitHub”Crear repositorio en GitHub
- Ir a github.com → New repository
- Nombre: “mi-proyecto-web”
- Descripción: “Mi primer proyecto con Git y GitHub”
- Público, sin inicializar
Crear proyecto local
Terminal window mkdir mi-proyecto-webcd mi-proyecto-webgit init# Crear archivos inicialesecho "# Mi Proyecto Web" > README.mdecho "console.log('Hola mundo');" > app.js# Primer commitgit add .git commit -m "feat: estructura inicial del proyecto"Conectar con GitHub
Terminal window git remote add origin https://github.com/tu-usuario/mi-proyecto-web.gitgit branch -M maingit push -u origin mainContinuar desarrollo
Terminal window # Hacer cambiosecho "body { font-family: Arial; }" > styles.cssgit add styles.cssgit commit -m "feat: agregar estilos básicos"# Subir cambiosgit push
Escenario 2: Clonar proyecto existente
Section titled “Escenario 2: Clonar proyecto existente”Clonar repositorio
Terminal window git clone https://github.com/usuario/proyecto-existente.gitcd proyecto-existenteExplorar el proyecto
Terminal window # Ver estructurals -la# Ver historialgit log --oneline# Ver remotos configuradosgit remote -v# Ver ramas disponiblesgit branch -aHacer contribuciones
Terminal window # Crear nueva funcionalidadecho "Nueva funcionalidad" > nueva-feature.jsgit add nueva-feature.jsgit commit -m "feat: agregar nueva funcionalidad"# Sincronizar antes de pushgit pull --rebasegit push
Trabajar con múltiples colaboradores
Section titled “Trabajar con múltiples colaboradores”Flujo de trabajo recomendado
Section titled “Flujo de trabajo recomendado”# 1. Siempre pull antes de empezar a trabajargit pull origin main
# 2. Crear rama para nueva funcionalidadgit checkout -b mi-funcionalidad
# 3. Desarrollar y hacer commitsgit add .git commit -m "feat: implementar mi funcionalidad"
# 4. Sincronizar con main antes de pushgit checkout maingit pull origin maingit checkout mi-funcionalidadgit rebase main
# 5. Push de la ramagit push origin mi-funcionalidad
# 6. Crear Pull Request en GitHub# 7. Después del merge, limpiargit checkout maingit pull origin maingit branch -d mi-funcionalidadComandos útiles para colaboración
Section titled “Comandos útiles para colaboración”# Ver quién modificó cada líneagit blame archivo.txt
# Ver cambios de otros colaboradoresgit log --author="Nombre Colaborador"
# Ver estadísticas de contribucionesgit shortlog -sn
# Ver archivos modificados por otrosgit diff --name-only HEAD~1 HEAD
# Crear patch para compartir cambiosgit format-patch HEAD~1
# Aplicar patch recibidogit apply cambios.patchConfiguración avanzada de remotos
Section titled “Configuración avanzada de remotos”Configurar diferentes URLs para fetch y push
Section titled “Configurar diferentes URLs para fetch y push”# Configurar URL diferente para push (útil para forks)git remote set-url --push origin git@github.com:mi-usuario/mi-fork.git
# Ver configuracióngit remote -v# origin https://github.com/original/repo.git (fetch)# origin git@github.com:mi-usuario/mi-fork.git (push)
# Agregar múltiples URLs de pushgit remote set-url --add --push origin git@gitlab.com:mi-usuario/repo.gitConfigurar pull automático
Section titled “Configurar pull automático”# Configurar pull para hacer rebase por defectogit config pull.rebase true
# Solo para este repositoriogit config --local pull.rebase true
# Configurar fast-forward onlygit config pull.ff only
# Ver configuración actualgit config --get pull.rebaseSolución de problemas comunes
Section titled “Solución de problemas comunes”# Error: Authentication failed# Solución 1: Verificar tokengit config --global credential.helper store# Hacer push y usar token como contraseña
# Solución 2: Cambiar a SSHgit remote set-url origin git@github.com:usuario/repo.git
# Solución 3: Verificar configuracióngit config --list | grep credential# Cuando hay conflictos en pullgit status# Editar archivos con conflictos# Buscar marcadores: <<<<<<< ======= >>>>>>>
# Después de resolvergit add archivo-resuelto.txtgit commit -m "resolve: conflictos en archivo-resuelto"
# O abortar mergegit merge --abort# Cuando local y remoto han divergidogit fetch origingit log --oneline --graph --all
# Opción 1: Mergegit pull origin main
# Opción 2: Rebase (historial más limpio)git pull --rebase origin main
# Opción 3: Reset (¡CUIDADO! Pierdes commits locales)git reset --hard origin/mainResumen
Section titled “Resumen”En este módulo has aprendido:
Repositorios remotos- ✅ Crear repositorios en GitHub
- ✅ git clone: Clonar repositorios existentes
- ✅ git remote: Conectar repositorios locales con remotos
- ✅ git push: Subir cambios al repositorio remoto
- ✅ git pull/fetch: Descargar cambios del repositorio remoto
- ✅ Sincronización: Mantener repositorios actualizados
- ✅ Colaboración: Trabajar en equipo eficientemente
- ✅ Solución de problemas: Resolver conflictos comunes
En el próximo módulo aprenderemos sobre ramas (branches), una de las características más poderosas de Git para el desarrollo paralelo y la organización del trabajo.