Antes de empezar a trabajar con Git, tendremos que configurar correctamente el entorno y las conexiones con GitHub. Por un lado, habrá que establecer una serie de parámetros en Git para determinar quién es el usuario local, su mail, así como algunas preferencias.
Este artículo forma parte de nuestra serie donde te contamos todo lo que necesitas saber para adquirir las competencias necesarias para trabajar con Git
En cuanto a GitHub, se trata de un servidor remoto donde habrá repositorios con información sensible, por lo que tendremos que realizar también algunas configuraciones en los protocolos de comunicación para determinar quién se conecta a los repos y con qué permisos.
Para seguir este artículo tienes que haber instalado Git previamente, y creado una cuenta en GitHub. Te recomendamos la lectura de nuestro artículo de Instalación y herramientas para utilizar Git y GitHub antes de continuar con el de configuración de Git.
Para llevar a cabo la parte práctica del artículo tendrás que usar la terminal de macOS o Linux o git bash de Windows.
Configuración de Git
Ver configuración de Git
Antes de empezar a tocar los archivos de Git, tenemos que saber dónde tenemos la configuración para saber qué opciones estamos modificando. Para ellos acudimos al siguiente comando, que nos va a listar todas las configuraciones de Git:
git config --list
Si en algún momento durante la configuración tienes dudas de si lo estás haciendo bien o mal, te recomiendo que acudas a este comando.
Usuario y mail – git config user.name/user.email
Hay que introducir un usuario, que será el responsable de las acciones de Git. Lo recomendable es poner tu usuario y correo de GitHub.
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
Git tiene tres archivos de configuración que podremos modificar en función si queremos que se aplique a nivel sistema, usuario o repositorio:
- /etc/gitconfig contiene los valores para todos los usuarios del sistema. Se modifica con la opción
--system
. - ~/.gitconfig es el archivo específico de cada usuario. Se modifica con la opción
--global
- .git/config. En la propia carpeta del repositorio. Argumento
--local
. Si estamos dentro de un repositorio es el que toma por defecto.
Cada nivel sobreescribe los valores del nivel anterior. Así lo que configuremos a nivel repositorio tendrá prioridad sobre lo que tengamos a nivel usuario, y éste sobre el sistema. Un ejemplo de configuración del ~/.gitconfig sería:
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[user]
name = "John Doe"
email = johndoe@example.com
[credential]
helper = wincred
[core]
autocrlf = true
Fíjate que al introducir los comandos anteriores, habrán cambiado aquí los valores del apartado user.
Editor de Texto – git config core.editor
Es posible elegir el editor de texto que queremos que use Git por defecto cuando tengamos que editar algún archivo. Es lo recomendable si no queremos resolver operaciones como rebase desde la terminal.
git config --global core.editor "code --wait"
git config --global core.editor "'C:\Program Files (x86)\Sublime3\Sublime Text 3\sublime_text.exe' -w"
La opción de code --wait
es para que la terminal se quede esperando a que modifiquemos el archivo. En nuestro caso tenemos instalado Sublime Text 3, por lo que redirigimos Git a su ejecutable. A continuación corre git config --global -e
para abrir el archivo de configuración global y comprueba que está usando el editor seleccionado.
En la siguiente tabla tienes el comando necesario para el editor de código que quieras usar:
Editor | config command |
---|---|
Atom | git config --global core.editor "atom --wait" |
emacs | git config --global core.editor "emacs" |
nano | git config --global core.editor "nano -w" |
vim | git config --global core.editor "vim" |
Sublime Text (Mac) | git config --global core.editor "subl -n -w" |
Sublime Text (Win, 32-bit install) | git config --global core.editor "'c:/program files (x86)/sublime text 3/sublimetext.exe' -w" |
Sublime Text (Win, 64-bit install) | git config --global core.editor "'c:/program files/sublime text 3/sublimetext.exe' -w" |
Textmate | git config --global core.editor "mate -w" |
Autocrlf – git config core.autocrlf
Si vamos a trabajar con múltiples usuarios en un mismo repositorio, habrá que tener en cuenta algunas consideraciones, ya que es posible que nos surjan inconvenientes si hay usuarios con sistema operativo Windows y otros con sistema operativo macOS/Linux (basados en Unix).
En Windows el salto de línea se representa mediante CR (Carriage Return) + LF (Line Feed), mientras que en en sistemas macOS/Linux únicamente se agrega LF. Por tanto, el usuario de Windows tendrá que eliminar el carácter CR al subir su código al repo y añadirlo al descargarlo. Por supuesto esto es inviable y forma parte de la configuración automática de Git.
En el caso de Windows tendremos que poner la propiedad autocrlf a true. En el caso de macOS/Linux a input. Estos últimos no agregan el carácter de CR, pero si el usuario introduce manualmente CR o el editor de texto lo añade, Git tendrá que eliminar el caracter.
Windows
git config --global core.autocrlf true
macOS/Linux
git config --global core.autocrlf input
En la documentación de Git tienes todas las opciones de configuración (que no son pocas). Algunas interesantes serían la configuración de herramienta para manejar los merges, colores de la terminal o alias para ahorrarnos tiempo en la escritura de comandos.
Configuración con GitHub
Puesto que GitHub será nuestro sistema de almacenaje en la nube de los repositorios, necesitaremos establecer unas comunicaciones seguras entre los repos locales y los remotos. Para ello tenemos dos opciones:
- Autenticación mediante SSH (Secure SHell): se trata de un protocolo de seguridad de red que establece conexiones cifradas entre dos dispositivos. Se utiliza para la autenticación de servidores.
- Autenticación mediante PAT (Personal Access Token): es una alternativa de autenticación a SSH que utilizan plataformas como GitHub o Bitbucket. Se trata de tokens de acceso personal que se generan para permitir a los usuarios acceder a los repositorios. Se utilizan en lugar de las contraseñas para autenticar en nombre del titular del token.
¿Qué es SSH?
El protocolo de comunicación SSH (Secure Shell) es un protocolo de red criptográfico diseñado para permitir la comunicación segura y protegida entre dos dispositivos a través de una red. SSH proporciona una forma segura de autenticación, cifrado y privacidad en la comunicación. Algunas características clave del protocolo SSH son:
- Autenticación segura: SSH utiliza técnicas de autenticación criptográfica para verificar la identidad del cliente y del servidor. Esto ayuda a prevenir ataques de suplantación y garantiza que solo los usuarios autorizados puedan acceder a un sistema remoto.
- Cifrado de datos: SSH cifra los datos transmitidos entre el cliente y el servidor, lo que garantiza que la información confidencial no sea accesible para terceros. Utiliza algoritmos de cifrado fuertes para proteger la integridad y la confidencialidad de los datos.
- Canal seguro: SSH establece un canal seguro y encriptado a través del cual se transmite la información. Esto protege contra ataques de escucha y manipulación de datos durante la comunicación.
- Reenvío de puertos: SSH permite el reenvío seguro de puertos, lo que facilita la conexión a servicios y recursos internos en una red a través de Internet de manera segura.
- Ejecución de comandos remotos: SSH permite ejecutar comandos y programas en un sistema remoto sin necesidad de estar físicamente presente en ese dispositivo. Esto es especialmente útil para la administración remota de servidores y sistemas.
¿Por cuál me decanto? Siendo prácticos, si siempre vamos a trabajar con la misma máquina, lo mejor es configurar SSH, que es el protocolo de comunicación estándar para una gran cantidad de herramientas, y ofrece una autenticación más segura. Ahora bien, si quieres configurar la autenticación de forma sencilla, utiliza un token. Además, te resultará más práctico si trabajas con muchas máquinas a la vez, puesto que podrían compartir el mismo token, aunque no sería lo recomendable desde el punto de vista de seguridad.
Configuración de SSH
Para poder trabajar cómodamente con GitHub y sus repositorios privados, tendremos que configurar las claves SSH de tal forma que la transferencia de commits se realice en un entorno seguro y el servidor de GitHub tenga en conocimiento que el ordenador desde el que nos comunicamos es fiable. Además, será una forma de autenticarnos sin tener que estar introduciendo la contraseña cada vez que realizamos un push.
Instalación de SSH
En macOS y Linux ya viene por defecto instalado SSH, por lo que podrás utilizarlo sin problemas desde la terminal.
Sin embargo, desde Windows es posible que no lo tengas operativo, por lo que te dejo aquí una guía para descargar y configurar OpenSSH: https://learn.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse?tabs=gui#install-openssh-for-windows
Tendremos que realizar las siguientes operaciones:
- Generar en local una clave pública y privada para conectarnos al servidor de GitHub mediante el protocolo SSH.
- Le diremos a GitHub cuál es la clave pública asociada a la privada, de tal forma que podamos realizar una conexión segura al servidor de GitHub.
Primero comprobamos las claves ssh que ya tengamos en local:
ls -al ~/.ssh
Los nombres predeterminados de claves publicas suelen ser id_rsa.pub, id_ecdsa.pub e id_ed25519.pub. En caso de que nos haya salido error, es que no tenemos ninguna clave creada, y por tanto todavía no existe la carpeta ~/.ssh.
Para crear una clave SSH corremos el siguiente comando. Te pedirá una contraseña (passphrase) para que protejas la clave privada de terceros que intenten acceder a la misma. La seguridad que estamos aplicando es suficiente por lo que simplemente presiona enter.
Usa el mismo correo que tu cuenta de GitHub, se coherente y evita futuros problemas.
ssh-keygen -t ed25519 -f ~/.ssh/git_workshop -C "johndoe@example.com"
-t
es el algoritmo de SSH. ed25519 es un tipo de algoritmo para la generación de la clave, y es el que viene por defecto en la documentación de GitHub, por lo que será el que utilizaremos. También puedes usar rsa de 4096 bits (ssh-keygen -t rsa -b 4096
).-f
es el archivo donde queremos que escriba (~/.ssh/id_nombre_algoritmo
por defecto). Nos pedirá justo después un nombre si no lo habíamos especificamos con anterioridad.-C
utiliza tu correo de usuario de GitHub.
Más información sobre los argumentos de ssh-keygen.
Se han generado dos archivos. Uno con extensión .pub y otro sin extensión. El .pub es la clave pública, y será el que compartiremos con GitHub. Y el otro archivo es la clave privada, que jamás tendremos que compartir con nadie.
Vamos a comprobar que el ssh-agent está funcionando. El ssh-agent puede usar las claves para iniciar sesión en otros servidores sin que el usuario escriba una contraseña nuevamente.
eval "$(ssh-agent -s)"
Y añadimos al agent la clave ssh que acabamos de generar:
ssh-add ~/.ssh/key_file_name
Bien, ya solo queda la configuración con GitHub:
- Logate y accede a Settings -> Access -> SSH and GPG Keys
- Crea una nueva clave SSH. Ponle un título descriptivo para identificar el ordenador desde el que accedes a GitHub. Pega en el cuadro de la calve todo lo que hay en el archivo .pub.
También podemos imprimir por pantalla la clave pública y copiarla.
cat ~/.ssh/key_file_name.pub
Finalmente, comprobaremos que la conexión entre nuestro ordenador y el servidor de GitHub es correcta, y ya podemos usar SSH.
ssh -T git@github.com
Acabamos de configurar la conexión al Git de nuestro ordenador local con el servidor remoto de GitHub.
Configuración de token
PAT es una forma alternativa de autenticación utilizada en plataformas de desarrollo colaborativo, como GitHub o Bitbucket. Los PAT son tokens de acceso personal que se generan para permitir a los usuarios acceder y realizar acciones en una cuenta o repositorio específico en nombre del titular del token.
GitHub te permite crear tokens para acceder a todos los repositorios (classic) y tokens para dar permisos a repositorios específicos (fine-grained). Por sencillez, nosotros vamos a configurar el classic, aunque aquí tienes la guía para configurar también el fine-grained.
Accede a Settings -> Archieves -> Developer settings -> Personal access tokens -> Tokens (classic) -> Generate new token.
Ponle un nombre descriptivo en Note y añádele una expiración. Si sabemos lo que va a durar el proyecto, sería lo recomendable. Después de ese intervalo dejaría de funcionar.
A continuación establecemos los permisos que deseemos. En principio los de repo serían suficientes. Se recomienda siempre no dar permisos de más. Aquí tienes un mayor detalle de los permisos. Finalmente Generate token.
Ahora la próxima vez que se necesite autenticación en GitHub, como por ejemplo en un clone de un repo privado, nos va a pedir que introduzcamos el token. Eso sí, será una única vez.
En caso de no disponer de interfaz gráfica, Git nos dejará introducir el nombre de usuario de GitHub y el token como contraseña:
Ya tendríamos toda la configuración el acceso a GitHub mediante PAT… a no ser que hayamos escogido fine-grained y no tengamos permisos para interactuar con ciertos repositorios.
Permisos de usuario en GitHub
Hemos estado realizando configuraciones del Git local y de acceso a repositorios del propio usuario, pero ¿Y si queremos acceder a repos de otros usuarios? ¿Y si queremos dar acceso a algunos usuarios a nuestros repos?
Aquí tienes una tabla resumen con las acciones que tienes que llevar a cabo en cada caso
Caso | Configuración |
---|---|
Repo público de un tercero | Nada, podemos leer y lanzar pull-request sin problema |
Repo privado del que queremos acceso | El usuario administrador del repo tendrá que añadirnos como colaborador |
Tenemos un repo privado y queremos dar acceso a un usuario | Igual que el caso anterior, le añadimos como colaborador. |
Tenemos un repo privado y queremos dar acceso a un usuario pero únicamente permisos de lectura | Por defecto no es posible, salvo en organizaciones |
Para añadir colaboradores al repositorio vamos a Settings (del repo) -> Access -> Collaborators -> Add people.
Resumen de pasos a seguir
- Git instalado y cuenta en GitHub
- Usuario en Git
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
- Editor de texto
git config --global core.editor "code --wait"
git config --global core.editor "'C:\Program Files (x86)\Sublime3\Sublime Text 3\sublime_text.exe' -w"
- Autocrlf
- (Windows)
git config --global core.autocrlf true
- (macOS/Linux)
git config --global core.autocrlf input
- (Windows)
- SSH o PAT. Autenticación con GitHub
ssh-keygen -t ed25519 -f ~/.ssh/git_workshop -C "johndoe@example.com"
ssh-add ~/.ssh/key_file_name
- Permisos de usuario del repositorio en GitHub.
SIGUIENTE EPISODIO – Te recomendamos que continúes tu travesía por Git y GitHub con nuestro artículo de primeros pasos con Git: commits, logs, push/pull con GitHub y .gitignore.
Bibliografía
https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration
https://docs.github.com/es/authentication/connecting-to-github-with-ssh/about-ssh
Pingback: We Learn Data
Pingback: We Learn Data