Taller de Git

diapos.teknokasa.csolarosa.net/taller_git

Aprender a usar Git y colaborar en proyectos colectivos de Python

Índice

Teoría

Git

Repositorios remotos

Gitlab

Colaborar en proyectos colectivamente

Práctica

Editar en local

Editar un repositorio remoto

Teoría

¿Qué es el control de versiones?

El software de control de versiones permite trazar y manipular cambios realizados en un proyecto de software.

El primer software de control de versiones fue SCCS (1975) seguido por RCS (1982).

Estos operaban en el propio ordenador. El primer software con capacidades de red fue CVS(1986) que funcionaba sobre RCS

CVS tenía un modelo de red centralizado, los cambios se hacían en el servidor. Tras CVS aparecieron varias alternativas, principalmente Subversion (2001)

Centralizado o no

¿Qué es git?

Git es un sistema de control de versiones distribuido, rápido y escalable

Esto se traduce en que el servidor cumple el papel de coordinador e integrador de los cambios, pero no es esencial

Por ejemplo en Linux los cambios se integran a través de parches enviados por correo, pero son distribuidos al resto gracias al servidor

Gestión de Cambios I

Tradicionalmente el control de versiones de hacía aplicando deltas a un archivo original

echo "" > fichero1
echo "Contenido" > fichero2
diff fichero1 fichero2  
diff fichero1 fichero2 > diff.patch
patch fichero1 diff.patch 
diff fichero1 fichero2 

Git descarta esto por ineficiente y guarda versiones completas de archivos

Gestión de Cambios II

Git construye cada commit como una copia completa del entorno de trabajo.

git cat-file -p HEAD
tree 9ca608ee88ad280e90c7e89d35491a8fe8dc62d2
parent d4c96700cc8912b4bc6f6c3bd87f1dd02c26c121
author example <example@example.com> 1775841940 +0200
committer example <example@example.com> 1775841940 +0200

Varias actualizaciones
git cat-file -p 9ca608ee88ad280e90c7e89d35491a8fe8dc62d2
100644 blob 60b2f55386f99ab73fd33c094ee23df3eaa50dfd	.gitignore
100644 blob 4459c54addb26ba0cbf8e25e5c16ca204af42e22	.gitlab-ci.yml
100644 blob cc51e70c65d0ddc7b5505b63b3c94ab684a6830b	LICENSE
100644 blob 6f1b56bb60145f6d201641ea6a42bc989b4804d3	README.md
100644 blob b38501070b8cf9a0120db0d2372162d8326ff0ef	_index.md
040000 tree 39bf6b17414e1e34ef82df423dca943c58fba35f	archetypes
040000 tree e5a632a9e3535087525bb4893262e8b93398471e	content
100644 blob e1978bc92261ca15ce4dbb8e0ad54196ecbb4500	go.mod
100644 blob 40af216c31df8ca015f6c79300b257871b6732ee	go.sum
100644 blob c53f385cf1e5c5782bbeea6cbf209311d5e377fc	hugo.toml
040000 tree 6b47d45e7210e135f65438157ce23fb746e1709e	static

Gestión de Cambios III

Por ende en git todo fichero pasa por un flujo concreto:

  • Unstaged: El fichero existe en el directorio de trabajo, pero git no lo tiene almacenado
  • Staged: El fichero está indexado como objeto git
  • Commited: El archivo aparece en el tree de un commit

Gestión de Cambios IV

Pueden existir ficheros que queremos evitar, por ejemplo ficheros temporales

Para esto existe el fichero .gitignore

cat .gitignore
public
.hugo_build.lock

Empezando con Git

Existen dos formas de empezar con Git

Clonar un repositorio externo

git clone URL NOMBRE_REPOSITORIO

Iniciar un repositorio local y añadir repositorio remoto

mkdir mi_repo
cd mi_repo
git init

Comandos básicos I

git init 
git add
git commit
....

Comandos básicos Resumen

Comandos avanzados

git worktree nos permite añadir espacios de trabajo a nuestro repo, pudiendo trabajar en varias ramas a la vez

git rebase nos permite aplicar nuestros cambios encima de los cambios de la rama remota

git bisect nos permite encontrar en qué momento de la historia se introdujo un error

git submodule nos permite añadir repositorios de git como directorios de nuestro repositorio

Repostorios remotos

GitHub

GitLab

Framagit

Codeberg

Ventajas

Desventajas

Resumen

Colaborar en proyectos colectivamente

¿Cómo contribuir?

Conflicto o mejora (Issue)

Propuesta de cambios (Merge Request o Pull Request (PR))

Aceptación y fusión de cambios

Issues

Merge Request o Pull Request (PR)

GitLab

GitLab es una plataforma de gestión de proyectos y control de versiones que utiliza el sistema de control de versiones Git

Instancias de GitLab

Framagit.org es una instancia mantenida por Framasoft

0xacab.org es una instancia mantenida por Riseup

Gitlab.com es la instancia mantenida por Gitlab Inc

Flujos de trabajo avanzados

Pruebas del código (Issue)

Compilación y construcción del software (Merge Request (MR) o Pull Request (PR))

Despliegue automatizado

Ejemplo de los componentes usados en esta web

Compilador de web estáticas Hugo

GitLab CI / CD

GitLab Pages

GitLab CI / CD

Es herramienta que implementa las metodologías de integración, entrega e implementación continua con el objetivo de realizar actividades como el desarrollo, prueba y publicación de softwares

GitLab Pages

Es una funcionalidad del software de GitLab que permite el alojamiento de páginas estáticas gratuitamente y fácil de configurar y fácil de configurar.

Se encarga de compilar el código y publicar el resultado de páginas estáticas

Práctica I

Edición básica en local

  • Mediante la interfaz gráfica de un editor de código o cliente GUI de git (gitg, gitkraken, …)
  • En local con línea de comandos

Práctica II

Edición avanzada con repositorio remoto

  • Mediante la interfaz gráfica de GitLab
  • En local con línea de comandos