Ya hemos dado nuestros primeros pasos en el uso de Git, pero hasta ahora, solo hemos clonado desde un repositorio público basado en la nube. En los próximos pasos, aprenderemos cómo conectar diferentes repositorios locales y remotos y cómo autenticar esas conexiones. Para ello, utilizaremos el servicio de alojamiento de código más popular, Github.
Configurar la conexión
Para poder enviar información a un repositorio en Github o acceder a repositorios privados, debemos autenticar nuestra conexión. Esto significa que debemos tener las credenciales adecuadas para que Github conozca los permisos que tenemos. Hay dos formas principales de hacer esto.
Usuario y token
La primera forma es usar tu nombre de usuario y un token, una contraseña especializada. El primer paso para hacer esto es crear un token en tu cuenta de Github. Debes navegar por los menús a través de Configuración -> Configuración de desarrollador
-> Tokens de acceso personal. Luego podremos crear un nuevo token.
Sigue las instrucciones en pantalla para crear tu token. Asegúrate de elegir las áreas necesarias a las que deseas otorgarle privilegios. Los tokens son mejores que las contraseñas porque no solo puedes otorgar diferentes permisos, sino que también puedes darles fechas de vencimiento diferentes y cancelarlos en cualquier momento.
Una vez que hayas creado el token, ¡Recuerda copiarlo! No habrá otra oportunidad de hacerlo.
Pero no te preocupes, no necesitarás memorizarlo ni escribirlo en ningún otro lugar. Puedes configurar Git en tu terminal para que almacene el token por ti, de modo que no necesites escribirlo cada vez. Para hacerlo, utiliza el siguiente comando antes de cualquier acción que requiera verificación:
bashgit config --global credential.helper store
Clonar usando SSH
La segunda forma de conectar con Github de forma segura es mediante SSH (Secure Shell), a través de claves SSH.
- Generar una clave
En primer lugar, debemos crear un par de claves SSH pública/privada. Para hacerlo, utilizaremos nuestra terminal para ejecutar:
bashssh-keygen -t ed25519 -C "<your_email@example.com>"
Si deseas utilizar una clave SSH existente, consulta el enlace de la documentación al final de esta sección. Puedes encontrar más información y opciones sobre el uso de claves SSH en la Documentación oficial de Github Github Documentation
- Agregar a SSH
Luego, necesitaremos agregar nuestra clave SSH al agente y a Github. Para agregarla a nuestro agente SSH, escribimos lo siguiente:
bashssh-add ~/.ssh/id_ed25519
Esto hará que nuestro agente SSH tenga la clave preparada para nosotros. Esa es la parte privada de la clave. La parte pública debe ser enviada a Github a través de su página web. Juntos, el par público-privado es lo que validará nuestra conexión.
- Añadir clave pública a GitHub
Haz clic en tu foto de perfil, luego navega por:
Configuración -> Claves SSH y GPG -> Nueva clave SSH
Como se muestra en las imágenes a continuación, deberías poder acceder fácilmente al cuadro de diálogo de entrada de SSH.
Dale un título y pega el contenido de la clave pública de SSH. Para obtener la clave en sí, puedes usar el siguiente comando:
bashcat ~/.ssh/id_ed25519.pub
Tu clave debería verse así:
bashssh-ed25519 XXXXXXXXXXXXXXXXXXXXXXXXXXXX <your@email.com>
Repositorio remoto
Como probablemente hayas descubierto hasta ahora, Github es un servicio de alojamiento en la nube bastante bueno, especializado en alojar repositorios. Puedes mantener copias de tu repositorio, compartirlo con amigos, compañeros de trabajo o la comunidad en general, y también encontrar repositorios impresionantes de personas de todo el mundo que luego puedes clonar (o descargar) en tu computadora, como se muestra en la sesión anterior.
Sin embargo, si deseas cargar datos en Github, debes conectar de alguna manera un repositorio local que tengas con su contraparte en Github, es decir, un repositorio remoto
.
Como con la mayoría de las cosas, hay varias formas en las que podemos lograrlo:
- Clonar un repositorio vacío
Una forma de hacerlo es crear un nuevo repositorio en Github y clonarlo mientras aún está vacío.
Después de crearlo, simplemente necesitarás clonarlo con la URL https, si usas nombre de usuario y token de autenticación, o con la URL SSH si usas el método de autenticación de clave pública-privada.
De esta manera, tu repositorio local (el que está en tu computadora) se creara vacío y conectado al repositorio remoto desde el principio.
- Conectar un nuevo repositorio remoto a un repositorio existente
Si ya tienes un repositorio en tu máquina local, uno que hayas inicializado con git init
o de cualquier otra manera, puedes conectar cualquier repositorio remoto a él. Para hacer esto, también necesitarás tener un repositorio creado en Github, así que ve y crea uno nuevo y copia la URL (HTTPS o SSH).
En tu terminal, usarás un comando para vincular los dos repos (local y remoto) juntos:
bashgit remote add <name> <url>
Por convención, el control remoto principal de un repositorio suele tener el nombre origin
. Por lo tanto, el comando anterior se verá así:
bashgit remote add origin <repositorio>
- Múltiples repositorios remotos
Puede haber varios repositorios remotos conectados a un solo repositorio, para verificarlos todos, utiliza:
bashgit remote -v
Escenarios de uso comunes para esto es mantenerse al día con el repositorio de otra persona mientras se tienen cambios propios y subirlos también.
NOTA: Todas las relaciones entre un repositorio local tienen dos direcciones:
- Fetch/Pull (Traer datos al Local)
- Push (Enviar datos del Local al Remoto) Dependiendo de cómo se configuren las relaciones y permisos, ambas o solo una de ellas pueden estar activas. Puedes pensar en ello como una relación de "solo lectura" o "lectura-escritura".
Pull y Push
Como se mencionó anteriormente, hay 2 operaciones principales que podemos ejecutar entre nuestros repositorios local y remoto.
- Traer nuevos datos a nuestra computadora
Si alguien más cambió algo en un repositorio remoto, lo lógico sería incorporar esos cambios en nuestro trabajo local. Para hacerlo, debemos realizar una operación de pull, es decir:
bashgit pull <remote_name> <branch_name> git pull origin master
Este comando traerá los cambios del repositorio remoto y rama especificados e incorporará en nuestro repositorio local.
NOTA: Por defecto, la rama principal se llamará 'master' o 'main'. Más sobre ramas en la siguiente sección.
- Enviar nuevos datos a GitHub
Lo contrario sería incorporar nuevo código en nuestro repositorio remoto. Para hacerlo, necesitaremos permisos, ya sea que sea nuestro propio repositorio remoto o que alguien nos haya dado permiso. Es decir, no puedes cambiar cualquier repositorio.
Pero suponiendo que todo esté claro en términos de permisos, puedes usar el siguiente comando:
bashgit push <remote> <branch> git push origin master
Esto enviará todos los cambios locales al repositorio remoto y rama especificados.
IMPORTANTE: Todos los cambios que deseas enviar entre repositorios deben agregarse y confirmarse. De hecho, son las confirmaciones las que se envían entre las máquinas.
Hacer un "fork" de un repositorio
Aquí está el trato entonces. Si no podemos hacer "push" a un repositorio que no sea nuestro, ¿cómo es que la comunidad de desarrolladores es tan colaborativa y solidaria?
Ahí es donde el fork
y las pull requests
son útiles. Verás, no puedes hacer "push" a un repositorio público ajeno, pero puedes clonarlo y hacer "pull" de él. Además, también puedes "hacer un fork".
En la página de dicho repositorio, encontrarás el botón de "fork". Al hacer clic en él, GitHub creará una nueva copia exacta de este repositorio, con la pequeña diferencia de que no pertenecerá al propietario original, sino a ti. Y como es tuyo, puedes hacer con él lo que desees.
NOTA: Los cambios y confirmaciones en el repositorio original NO se actualizarán automáticamente en tu fork, debes hacerlo tú mismo.
Antes que nada, debes clonarlo. Pero asegúrate de clonar tu fork y no el original de nuevo. Una vez que lo tengas, agrega todas las mejoras que consideres necesarias, confirma y haz "push" a tu fork (tu copia en GitHub) del repositorio. Ahora solo es cuestión de llamar la atención del propietario original.
Pull Request
Encuentra el botón de "pull request" en la página de GitHub del repositorio y crea uno nuevo. De esta manera puedes crear una comparación entre tu fork y el original, para que el propietario (y los revisores) del código original puedan ver y comparar fácilmente los cambios. También debes dejar un título descriptivo y un mensaje informativo. Tu pull request significa que estás solicitando al propietario original que incorpore los cambios de tu fork al repositorio oficial.
Ellos o su equipo analizarán y decidirán si aceptan (fusionan) o rechazan (cierran) esos cambios. La colaboración es una parte inherente de la comunidad de desarrolladores, tanto que muchos proyectos tendrán documentación específica sobre cómo contribuir. Échale un vistazo y también puedes aprender algunas prácticas de programación excelentes de ellos.