Cómo instalar y configurar Git y SSH con GitHub en Mac, GNU/Linux o Windows (GitBash)
Tags: git, github, tutorial, español
Published: 2022-01-09 06:13:16

Hola. En este post describo los pasos para instalar y configurar **Git**, así como ajustarlo para trabajar con **GitHub**.

Si usas Windows, instala Git con el instalador gráfico, asegúrate de poner el check para que igual se instale GitBash, reinicia la PC y usa el `GitBash` en lugar de la terminal para seguir la guía sin problemas (al menos con pocos).

Siempre que es posible trato de usar Brew para instalar las aplicaciones que quiero. Es útil para mantener las cosas actualizadas. En [este post escribí cómo instalar Homebrew](https://dev.to/chema/instalando-zsh-en-mac-2c6b) en el primer paso.

Si usas alguna distro debian de GNU/Linux, solo usa el comando `sudo apt-get install git` en lugar de brew.

## 1. Descargar e instalar Git
Para instalar git manualmente podemos ir al sitio oficial de [descargas](https://git-scm.com/downloads). Hay instalador para Windows, MacOS y GNU/Linux.

Instalar con Brew:
```sh
~ ❯ brew install git
```

Verifica que Git esté instalado:
```sh
~ ❯ git --version
git version 2.30.1 (Apple Git-130)
```

## 2. Configurar Git
Después de verificar que Git está instalado tenemos que configurar las variables globales:
- nombre de usuario (`user`) que aparecerá como autor de los cambios
- `email` del usuario
- `editor` que queremos usar para escribir los mensajes de los commits y demás cosas

Ingresa los siguientes comandos usando tus datos:
```sh
~ ❯ git config --global user.name "John Doe"
~ ❯ git config --global user.email johndoe@example.com
~ ❯ git config --global core.editor vim
```

Esos comandos los puedes volver a ingresar para actualizar las variables. Si en lugar de `vim` quieres usar otro editor, ingresa `nano`, `code` (visual studio code) u otro.

Verifica las variables:

```sh
~ ❯ git config user.name
John Doe

~ ❯ git config user.email
johndoe@example.com
```

También podemos listar todas las variables de la configuración:
```sh
~ ❯ git config --list
credential.helper=osxkeychain
user.name=John Doe
user.email=johndoe@example.com
core.editor=vim
```

Puedes leer más en los sitios oficiales de Git y de GitHub:
- https://git-scm.com/book/es/v2/Inicio---Sobre-el-Control-de-Versiones-Configurando-Git-por-primera-vez
- https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git

## 3. Generar llaves SSH
Para comunicarse con repositorios remotos como GitHub, GitLab o Azure podemos hacerlo de dos formas: con `https` o con `ssh`.

En este post describo el método con `SSH`.

Usar `https` es lo más fácil y actualmente es igual de seguro que `ssh`. Los leaks o filtraciones dependen de tí realmente.
Yo prefiero `ssh` por costumbre y porque no me gusta autenticarme en cada `push` o `pull`.

Si decides ir por la vía de `https` tendrás que configurar un `GitHub Personal Token` y usarlo para autenticarte. Dejo la [guía de GitHub sobre cómo hacerlo](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token).

### Verificar si ya existen las llaves SSH:
[fuente](
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys)

Ingresa este comando para listar (`ls`) los archivos, especificando que queremos ver todos los archivos (`-a`) en forma de lista vertical (`-l`) dentro de la carpeta oculta `.ssh` que se encuentra en el directorio `home` (`~/`) del usuario:
```sh
~ ❯ ls -al ~/.ssh
```

Si ya tenías las claves te aparecerá algo como esto, en cuyo caso, puedes ir al paso 4:
```bash
total 48
drwx------   7 chema  staff   224 Dec 31 13:09 .
drwxr-x---+ 34 chema  staff  1088 Jan  8 23:00 ..
-rw-------   1 chema  staff  3401 Dec 31 13:10 id_rsa
-rw-r--r--@  1 chema  staff   755 Dec 31 13:10 id_rsa.pub
```

Si no las tienes, te aparecerá algo como esto:
```sh
ls: /Users/chema/.ssh: No such file or directory
```

### Generar nuevas claves SSH:
[fuente](
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)

Si no tenemos alguna clave SSH tendremos que generar un nuevo par de clave privada y pública, las cuáles se generan juntas:

```sh
~ ❯ ssh-keygen -t rsa -b 4096 -C "johndoe@example.com"
```

Nos preguntarán el nombre del archivo que tendrá, puedes presionar `enter` si quieres usar el nombre por defecto (`id_rsa`):
```sh
Enter file in which to save the key (/Users/chema/.ssh/id_rsa):
```

Después nos pedirán especificar una contraseña y confirmarla. Ésta se pedirá cada vez que nos comuniquemos con repositorios remotos con `pull`, `push` y demás.
También se puede presionar `enter` (dos veces para confirmar) si no queremos agregar ninguna.

Si tienes mucho cuidado con quién y cómo tienen acceso a tu equipo puedes ir sin contraseña). **Cuando introduzcas la contraseña no se verá lo que escribes pero sí está escribiendo**:

```sh
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
```

## 4. Agregar claves SSH a la cuenta de GitHub
Ve a [github.com](https://github.com), **inicia sesión** o **crea una cuenta** (no olvides confirmar el email) y busca la opción `Settings` que nos llevará a la página de ajustes:
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/43i78eb33hordb3mmqub.png) 

Busca la opción de `SSH and GPG Keys` en la barra lateral izquierda:

![ssh option](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bqfg1i7mvbocq1hn4rxr.png)

Selecciona la opción para agregar la clave SSH que abrirá un formulario para que introduzcamos el nombre de nuestra clave SSH (el nombre que gustes) y para que "pegues" la llave pública, es decir, el contenido del archivo `id_rsa.pub`:

![add ssh option](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hij8aokv1rp5k15rj0hq.png)

Para ver y copiar el contenido del archivo `id_rsa.pub` tenemos dos opciones:
- podemos usar el `Finder` de Mac o el buscador que tengamos
- mostrar el contenido en consola y copiarlo

### Con el finder
Accede a la carpeta de tu usuario, presiona `Shift` + `Cmd` + `.`. para mostrar archivos ocultos, busca la carpeta `.ssh` y accede. Verás unos archivos como estos:

![ssh keys in finder](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/djjuhx8n3mh1iryh7pnv.png)

Abre el archivo `id_rsa.pub` con el editor de texto de tu preferencia, copia todo el contenido y pégalo en el formulario de **GitHub**.

### Con la terminal
Escribe lo siguiente para usar el comando `cat` (concatenar) el cuál mostrará el contenido en la consola:
```sh
~ ❯ cat ~/.ssh/id_rsa.pub
```

Finalmente copia el texto en consola y pégalo en el formulario de **GitHub**.


## 5. Clonar un repositorio con SSH
Bien, eso fue todo. Ahora intenta clonar algún repositorio para verificar que las cosas hayan salido bien. Puedes clonar este repo si gustas.

La primera vez nos advertirán que se guardará la huella (fingerprint) del host remoto como conocido y tendremos que ingresar "yes" para continuar.
 
```sh
~ ❯ git clone git@github.com:ChemaCLi/git-tricks-and-tutorials.git
```