24  Github

El valor del control de versiones se hace evidente al comenzar a colaborar con otros. Contamos con la mayor parte de las herramientas necesarias para ello; lo único que resta es transferir cambios de un repositorio a otro.

Sistemas como Git posibilitan el traslado de trabajo entre cualquier par de repositorios. No obstante, en la práctica, resulta más conveniente utilizar una copia como punto central y mantenerla en la web en lugar de en la computadora portátil de alguien.

Vamos a comenzar por crear un repositorio remoto, pero para eso necesitamos configurar nuestra cuenta de Github también.

24.1 Paso 1: Crear un repositorio remoto

Lo primero que vamos a hacer es crear un repositorio remoto. Entra a tu cuenta de Github y dale click en Nuevo.

Crear repositorio nuevo

Ponle de nombre Mi_primer_repo (o el nombre que hayas usado en las secciones anteriores). Deja marcada la opción de público y no añadas un README ni una licencia.

Crear repositorio vacío

Al darle click en crear repositorio, la página nos mostrará la siguiente información que es la que usaremos para configurar nuestro local con el remoto.

Información del repositorio remoto para configurar con nuestro local

Lo que acabamos de hacer es como si en nuestra terminal hubiéramos realizado lo siguiente:

mkdir Mi_primer_repo
cd Mi_primer_repo
git init

24.2 Paso 2: Conectar local a remoto

La página principal del repositorio remoto muestra una serie de información que necesitamos usar para conectar el repositorio remoto en Github con el repositorio local de nuestra computadora. Vamos a usar el protocolo de conexión SSH, da click en donde dice SSH y a continuación en el icono de copiar.

SSH link para clonar el repositorio

Ahora, dentro de nuestra carpeta del repositorio local, abrir una terminal y correr lo siguiente:

git remote add origin git@github.com:User/Mi_primer_repo.git

Para revisar que si se haya realizado correctamente procedemos a usar lo siguiente:

git remote -v

24.3 Paso 3: Conexión mediante SSH

Primero verificamos si ya tenemos algún par de llaves:

ls -al ~/.ssh

Si ya tienen algún par de llaves configuradas las van a ver listadas, si no tiene ninguna les saldrá una leyenda como la siguiente:

ls: cannot access '/c/Users/User/.ssh': No such file or directory

24.3.1 Paso 3.1: Crear un par de llaves SSH

Para crear el par de llaves usamos el siguiente comando, la opción -t se refiere al tipo de algoritmo usado y la opción -C indica un comentario para la llave, en este caso el comentario es nuestro correo.

ssh-keygen -t ed25519 -C "email@dominio.com"

Si tu sistema operativo no lo permite, usa ssh-keygen -t rsa -b 4096 -C "your_email@example.com".

Nota: Si no cuentas con ssh-keygen instalado, primero corre el código:

sudo apt-get install ssh-keygen

Como queremos usar el archivo default, solo damos Enter. Ahora nos pedirá una contraseña, tecleala, no vas a ver nada en la pantalla. Una vez creada verás en pantalla algo como lo siguiente:

Your identification has been saved in /c/Users/user/.ssh/id_ed25519
Your public key has been saved in /c/Users/user/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:SMSPIStNyA10KPxuYu94KpZg9AYjgt9g46A4kFy3g1o user@domain
The keys randomart image is:
+--[ED25519 256]--+
|^B== o.          |
|%*= *.+          |
|+=.E =.+         |
| .=.+.o..        |
|...   . S        |
|.+ o             |
|+ =              |
|.o.o             |
|oo+.             |
+----[SHA256]-----+

Lo que dice identification ser refiere a la llave privada la cual no debes compartir nunca y la cadena de caracteres que dice fingerprint se refiere a parte de tu llave pública.

Si repetimos el comando siguiente, verán ahora ya sus dos claves pública y privada.

ls -al ~/.ssh

24.3.2 Paso 3.2 Generar una llave pública exclusiva para Github (opcional)

En caso de que ya cuentes con una llave con ese nombre, puedes crear una nueva llave con otro nombre especifico para Github:

ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/id_ed25519_github

Clave exclusiva de github

Ahora que ya tenemos las claves, debemos decirle a GitHub cuales son.

cat ~/.ssh/id_ed25519.pub

Copia la cadena de caracteres, ve a la configuración de tu perfil de GitHub y da clic en “SSH and GPG Keys”.

SSH and GPG Keys

Una vez ahí da clic en “Nueva llave SSH”.

Nueva llave SSH

Después coloca un título que te permita identificar que será la clave con la que usarás la computadora y pega tu llave pública.

Llave pública

Ahora solo falta revisar la conexión desde la terminal.

ssh -T git@github.com

Si vez un mensaje similar al siguiente, significa que quedo completa la autenticación.

Hi Name! Youve successfully authenticated, but GitHub does not provide shell access.

24.3.3 Paso 3.3 Solución a Error con la llave

A mi paso que la llave esta bien pero no tenia acceso a usar github, mostrando este mensaje:

ssh -i .ssh/id_ed25519 -T git@github.com
Hi HaydeePeruyero! You've successfully authenticated, but GitHub does not provide shell access.

Agregar configuración

Por lo que decidí configurar el archivo ~/.ssh/config.

nano ~/.ssh/config

agrega esto:

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

Guarda y cierra las modificaciones del archivo.

Verifica que los permisos estén correctos

chmod 600 ~/.ssh/id_ed25519
chmod 644 ~/.ssh/id_ed25519.pub
chmod 600 ~/.ssh/config

Agrega tu clave al ssh-agent

Esto asegura que la clave esté disponible durante tus sesiones:

ssh-add ~/.ssh/id_ed25519

Prueba conexión otra vez

ssh -T git@github.com

Debe decir:

Hi HaydeePeruyero! You've successfully authenticated, but GitHub does not provide shell access.

24.4 Paso 4: Push and pull

Una vez que ya tenemos configurado todo, solo falta enviar todo lo que tenemos en el repo local al remoto. Si se establecio la contraseña nos la va a pedir en la terminal o una ventana aparte.

git push origin main

En esa instrucción, origin se refiere al repositorio remoto y main al local (las ramas que estamos intentando poner en el mismo contenido).

La situación en la que estamos es la siguiente:

git push origin main

Para actualizar nuestro repositorio local, lo que debemos hacer es lo siguiente:

git pull origin main

Como no hemos realizado ningún cambio en el remoto, no veremos nada nuevo en el local. En el remoto también podemos añadir archivos directamente.

NoteEjercicio

Añade un archivo nuevo desde el repositorio remoto y actualiza tus cambios en el local.

Desde el repositorio remoto, podemos crear un nuevo archivo, por ejemplo nuevo_archivo.txt, escribir algo en él y guardar los cambios. GitHub realizará automáticamente un commit en el repositorio remoto.

Ahora, en nuestra copia local, verificamos el estado del repositorio:

git status

y descargamos los cambios del repositorio remoto con:

git pull origin main

(En caso de que la rama principal tenga otro nombre, reemplazar main por el nombre correspondiente.)

Git descargará e integrará automáticamente el nuevo commit en nuestro repositorio local.

Podemos comprobar que el archivo se ha añadido con:

ls

o revisar el historial con:

git log --oneline

Observaremos que ahora el commit realizado desde GitHub también aparece en el historial local.