Introducción A Git
Introducción A Git
Introducción A Git
Conceptos a aprender
● Entender qué es git y cómo funciona
● Instalar y configurar git
● Registrarse en GitHub y configurar una conexión por SSH.
● Crear un repositorio en GitHub
● Crear una rama nueva
● Implementar cambios y subirlos a GitHub
● Crear una Pull Request para unificar los cambios a la rama principal.
● Resolver conflictos que puedan surgir al intentar unificar dos ramas
Introducción
En el desarrollo de software una de las competencias más necesarias es poder hacer uso de
una herramienta de control de versiones. Generalmente se trabaja en equipo y es de suma
importancia poder gestionar los cambios evitando conflictos y facilitando la colaboración. Git
es el sistema de control de versiones más popular de la actualidad. Es gratuito y de código
abierto.
Cabe destacar que estos “commits” no los pueden ver otros usuarios hasta que hacemos un
“push” y los enviamos a repositorio remoto desde donde otros colaboradores pueden hacer
“pull” y obtenerlos.
¿Git o Github?
Git no depende necesariamente de GitHub. GitHub es una plataforma de hospedaje de código
que utiliza git y lo expande con funcionalidades gráficas que ayudan al trabajo colaborativo.
Por otro lado, git es la herramienta de control de software en sí. Dos desarrolladores podrían
usar git sin necesidad de GitHub o similar conectando sus repositorios usando SSH o similar
(estableciendo como ‘remoto’ a la máquina del otro colaborador), pero es mucho más sencillo
y fácil de controlar hacer uso de un servicio como GitHub.
Instalación
Antes que nada, deberíamos verificar si git ya está instalado en nuestra maquina local. Para
ello, ejecutamos el siguiente comando:
git --version
Si la consola devuelve un mensaje informando la versión de git instalada (por ejemplo 2.34.1),
significa que podemos saltearnos la instalación e ir directamente a la configuración.
Si git no está instalado en nuestro local, la forma más sencilla de instalarlo es usando los
paquetes oficiales de Ubuntu. Para eso hacemos uso del manejador de paquetes de Ubuntu
APT.
Primero nos aseguramos de que el índice de paquetes esté actualizado usando apt update:
sudo apt update
Al terminar, podemos verificar que Git está efectivamente instalado corriendo el comando:
git --version
Si la consola nos devuelve un número de versión, significa que git se instaló correctamente.
Configuración
Para configurar git hacemos uso del comando git config. Necesitamos especificar nuestro
nombre e e-mail ya que git embebe esta información en cada commit que hagamos. Podemos
lograr esto ejecutando los siguientes comandos:
Para verificar que los datos fueron cargados correctamente, podemos hacer uso del siguiente
comando:
Esto nos llevará a una sección donde tenemos que definir nuestro nombre de usuario, e-mail
y clave. Es importante que el e-mail que usemos sea uno al que tengamos acceso.
Luego de insertar todos los datos necesarios, debajo de la sección “Verify your account”
hacemos la validación de que somos humanos para finalmente hacer clic en “Create account”
Nos llegará un e-mail con el código de verificación (Con asunto “� Your GitHub launch code”)
Ingresamos el código y por ahora podemos hacer clic en el link de “Skip personalization” para
poder comenzar a trabajar con nuestra cuenta.
ssh-add ~/.ssh/id_ed25519
(Si usaste un nombre distinto para la llave, hay que reemplazar id_ed25519 por el nombre
correcto)
En GitHub, vamos a la parte superior derecha y hacemos clic en nuestro perfil para luego
expandir el menú y hacemos clic en “Settings”
Dentro de la sección “SSH and GPG keys” hacemos clic en el botón “New SSH Key”
En el campo “Title” agregamos una descripción de la llave. Por ejemplo, “PC Personal”. Esto
es importante ya que si en el futuro perdemos acceso a la computadora que tiene esta llave,
podremos fácilmente encontrar la llave y desactivarla.
Dejamos el campo “Key type” con el valor por defecto, “Authentication Key”.
ssh -T [email protected]
Si no encuentra el host
En caso de que al intentar validar la conexión SSH obtengamos como respuesta un mensaje
como este:
Host github.com
Hostname ssh.github.com
Port 443
Luego pulsamos “esq” para salir del modo de inserción y pulsamos “:wq” para salir y guardar
el archivo.
Si volvemos a probar la conexión por ssh con github, deberíamos tener acceso sin problemas.
ssh -T [email protected]
> The authenticity of host 'github.com' can't be established.
> RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
> Are you sure you want to continue connecting (yes/no)? yes
...
Hi xAcademy! You've successfully authenticated, but GitHub does not provide
shell access.
Crear un repositorio
El repositorio es donde guardamos todo lo que necesita nuestro proyecto. Tenemos dos
maneras de inicializar un repositorio, primero está la opción de hacer localmente y segundo
desde GitHub.
cd /directorio
Luego, para convertir el directorio en repositorio git usamos el comando git init
git init
Cabe destacar que la branch principal generalmente es “master”, pero por convención
actualmente se considera que “main” debería ser la branch principal. Si deseamos cambiarla,
tenemos que cambiar la configuración global de nuestro git:
Ya creado el repositorio, la carpeta oculta “.git” contiene toda la información que git necesita
para funcionar. Si queremos ver esta carpeta tenemos que usar el siguiente comando:
ls -la
Primero vamos a hacer clic en el “+” en la parte superior derecha de la pantalla y luego, en el
menú que se abre, hacemos clic en “New repository”
En el formulario que se abre, necesitamos definir un nombre de repositorio, si será público o
privado (generalmente para hacer pruebas, es recomendable usar repositorios privados), si
necesitamos un archivo README, configuración base de .gitignore y el tipo de licencia. En
nuestro caso, solo seleccionaremos “Private” y “Add a README file”.
Seremos redireccionados a la URL de nuestro nuevo repositorio. El único archivo presente
por ahora será el “README.md”, el cual podremos editar directamente desde git. Usa la
sintaxis md. Más información aquí.
Clonar repositorio
Para utilizar el repositorio que creamos en GitHub, debemos clonarlo en nuestro local. Para
obtener la ruta correcta del repositorio remoto, vamos a la pantalla de inicio del repositorio en
GitHub. Haciendo clic en el botón verde “Code” se expande un menú de clonación:
Nos interesa la pestaña que dice “SSH”. Copiamos al portapapeles la ruta.
Git se encargará de crear la carpeta del repositorio (en este caso “ejemplogit”).
Esto creará la branch “ejemplo-branch”, podemos verificar que efectivamente se creó usando
git branch
git branch
ejemplo-branch
* main
Cabe destacar que esta manera de crear una branch NO mueve automáticamente la branch
seleccionada a la que acaba de ser creada. Para hacer esto, debemos hacer git checkout,
que veremos un poco más adelante.
En nuestro caso, el nombre de la nueva branch es “xa-1”. Es buena idea identificar de forma
unívoca una branch para relacionarlo a alguna tarea o funcionalidad. Luego de escribir el
nombre que queremos para la branch, hacemos clic en “Create branch”. Es buena idea
prestar atención a la branch desde la que se crea la nueva, en este caso es “main”, es decir,
la nueva branch xa-1 será una copia de main hasta que se inserten nuevos cambios.
En el editor que aparece, podemos escribir cualquier cosa, como éste es el archivo
“README” lo lógico sería escribir algo sobre el proyecto en sí.
Luego de terminar de escribir nuestros cambios, bajamos a la parte inferior de la pantalla.
Ahí nos encontraremos con un dialogo como este:
Aquí es donde escribiremos el mensaje de nuestro commit. Cada equipo de trabajo tiene sus
propias normas sobre cómo deben ser los mensajes, pero mientras más nos explayemos y
hagamos referencia al requerimiento, mejor ya que esto provee información invaluable a
futuro. Luego de completar nuestro mensaje, hacemos clic en “commit changes” para
confirmar los cambios.
git branch
ejemplo-branch
* main
Incluso si ejecutamos el comando git branch -r para ver la lista de branches remotos, no
veremos la nueva branch “xa-1”:
git branch -r
origin/HEAD -> origin/main
origin/main
Necesitamos ejecutar dos comandos, primero obtener los cambios del repositorio remoto y
segundo cambiar la branch activa de local a la nueva branch que acabamos de obtener
git fetch
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
Unpacking objects: 100% (3/3), 697 bytes | 697.00 KiB/s, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
From github.com:xacademy/ejemplogit
* [new branch] xa-1 -> origin/xa-1
Revisando de nuevo el listado de branches, esta vez usando la opción “-a” para ver branches
locales y remotas, podremos notar que efectivamente está la branch remota “xa-1”:
git branch -a
ejemplo-branch
* main
remotes/origin/HEAD -> origin/main
remotes/origin/main
remotes/origin/xa-1
Podemos notar que git nos informa que la branch local ‘xa-1’ está conectada con la branch
remota ‘xa-1’.
git status
On branch xa-1
Your branch is up to date with 'origin/xa-1'.
nothing to commit, working tree clean
# ejemplogit
Luego de guardar el archivo, si volvemos a usar git status, nos encontraremos con una
respuesta diferente:
git status
On branch xa-1
Your branch is up to date with 'origin/xa-1'.
no changes added to commit (use "git add" and/or "git commit -a")
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: README.md
Ahora que tenemos listo nuestro commit, podemos enviarlo al repositorio remoto en GitHub.
git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 407 bytes | 407.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:xacademy/ejemplogit.git
7966e05..36d33aa xa-1 -> xa-1
Al hacer clic en “Compare & pull request” seremos redirigidos al formulario para crear una
nueva Pull Request. Por defecto, la branch a la que se hace el merge es “main”:
Si vemos el mensaje “Able to merge”, significa que no hay conflictos y podemos avanzar sin
problemas. Escribimos un título para la PR y un mensaje:
Luego de hacer clic en “Create pull request” se creará efectivamente la PR. En la pestaña
“Files changed” se puede ver las modificaciones.
Otro usuario podrá revisar nuestros cambios y aplicarlos para unificarlos a la branch main
haciendo clic en el botón “Merge pull request”
Resolver conflictos
Puede que nuestra Pull Request no resulte en el ‘camino feliz’ y encontremos que algún
archivo tiene ‘conflictos’ con la branch en la que queremos hacer el merge. Digamos que otro
compañero editó el archivo README.md en la branch main antes de que se completara la
PR:
Esto generará que en la PR, el botón de “Merge pull request” quede grisado. Si los conflictos
son simples, podremos resolverlos directamente en GitHub, pero si son demasiado
complejos, será necesario hacerlo en nuestro ambiente local.
Al hacer clic en el botón “Resolve conflicts” se abre el editor web desde donde podemos
resolver los conflictos.
Como en este caso es un archivo de texto, es simple darse cuenta de que podemos incluir
ambas modificaciones sin romper nada. En el caso de resolver conflictos de código, requiere
mucha atención ya que un desarrollador puede llamar a un método de una forma y otro de
otra distinta.
Una vez completadas las correcciones, podemos hacer clic en “Mark as resolved” y luego en
“commit merge”. Esto agregará un nuevo commit que nos permitirá completar el merge de la
PR.
Próximos pasos
Felicidades, ya tenés un concepto básico de cómo manejar git y GitHub. Pero dominar a git
requiere de mucha investigación y práctica. Los siguientes son algunos conceptos que
recomendamos investigar para tener un entendimiento más redondo de todo lo que se puede
hacer con git:
● El archivo .gitignore
● Uso del stash
● Uso de cherry pick
● Flujos de trabajo
● Git Hooks.
● Automatización de builds usando git