Introducción a Git y GitHub

Brais Arias Rio

https://braisarias.github.io/taller-git-github/

Licencia CC BY-SA

Quien soy?

Estudios

  • FP superior de Administración de Sistemas Informáticos
  • Enxeñaría Técnica en Informática de Sistemas
  • Enxeñaría en Informática

Quien soy?

Trabajo

Ahora:

  • Profesor en CPR Liceo La Paz

Anteriormente:

  • Consultor de software libre / SysAdmin en iCarto
  • Oficina de Software Libre de la AMTEGA (Xunta)
  • Mancomún Podcast

Quien soy?

Asociacionismo: GPUL - KDE España

También estudio Русский язык (ruso)

Sobre Git

  • Sistema de Contol de Versiones / VCS (Version Control System)
  • Sistema de Contol de Versiones Distribuido / DVCS (Distributed Version Control System)
  • Escrito inicialmente en C por Linus Torvals
  • Usado en el desarrollo del kernel de Linux
  • Uno de los VCS más usados
  • https://git-scm.com/

Forjas / Repositorios de código

Conceptos básicos

Porque usar un VCS?

El problema

Gestión de cambios en un proyecto 1/2

  • Solución 0: no hacer ninguna gestión (versión única)
  • Solución 1: ñapa rudimentaria (copias manuales)
    Imagen ilustrativa de copias manuales

Gestión de cambios en un proyecto 2/2

  • Solución 2: VCS tradicionales: RCS, CVS, Subversion
    • Conexión con repositorio central para todo
  • Solución 3: DVCS: Bazaar, Mercurial, Git
    • Autonomía y flexibilidad
    • Commits locales

Terminología 1/2

  • Repositorio: Almacén local o remoto en donde se ecuentra un proyecto que está bajo control de versiones.
    • Va cambiando con el tiempo -> Versión
    • Se conserva un histórico de todas las versiones anteriores
  • Commit: Conjunto de cambios en un repositorio entre dos versiones
    • A veces también se le puede llamar parche (patch)

Terminología 2/2

  • Working tree - Untracked area
    • La zona donde se trabaja, antes de "git add"
  • Index - Staging area
    • Despues de "git add", pero antes de "git commit"

Diferencias entre ficheros (consola)

Diferencias entre ficheros (IDE)

VCS vs DVCS 1/2

VCS vs DVCS 2/2

Flujo de trabajo con Git 1

Flujo de trabajo con Git 2

Flujo de trabajo con Git 3

Flujo de trabajo con Git 4

Flujo de trabajo con Git 5

Flujo de trabajo con Git 6

Flujo de trabajo con Git 7

Flujo de trabajo con Git 8

Flujo de trabajo con Git 9

Comandos básicos de Git

  • git init: Inicializa el directorio para trabajar con git
  • git clone <URL>: Clona el repositorio remoto de la URL
  • git add: Agrega cambios del Working tree al Index
  • git commit: Consolida cambios del Index y creamos un nuevo commit
  • git diff: Muestra cambios entre Working Tree y el Index
  • git show <commit>: Muestra el commit commit
  • git log: Muestra la historia de commits desde HEAD

Más comandos de Git

  • git status: Muestra el estado del Working Tree y del Index
  • git rm <fichero>: Borra el fichero y prepara los cambios para el commit en el Index
  • git mv <ficheroA> <ficheroB>: Renombramos ficheroA como ficheroB y prepara los cambios para el commit
  • git push: Envía los cambios locales a un repositorio remoto
  • git pull: Trae los cambios de un repositorio remoto al local

Ejemplos

Creación de un proyecto de cero en GitHub

GitHub

Licencias de software

  • Licencias de Software Libre
  • Licencias de Software Abierto
  • Licencias de Software Propietario/Privativo

Software Libre

(4 libertades)

  1. Usar para cualquier proposito
  2. Ver el código fuente y modificarlo
  3. Distribuir copias
  4. Modificar el software y distribuir las modificaciones

Licencias

Copyleft

GPL

AGPL

EUPL

...

Copyleft suave

LGPL (Lesser General Public License)

MPL (Mozilla Public License)

...

Permisivas - sin copyleft

BSD

Apache

MIT/Expat

...

Chuleta

Inicialización repositorio

Opción 1

Repositorio vacio en local - 1/3

Iniciamos un repositorio en local y lo vinculamos con uno remoto.

  1. git init
    Se inicia repositorio local en el directorio actual
  2. git remote add <alias> <URL>
    Vinculamos con el repositorio remoto de la URL usando el alias

Opción 1

Repositorio vacio en local - 2/3

Hacemos el primer commit.

  1. echo "#Mi proyecto de GitHub" > README.md
    Creamos el fichero de README (podemos agregar más texto)
  2. git add README.md
    Marcamos el fichero README.md como cambio listo para commit
  3. git commit -m "Agregado readme"
    Confirmamos los cambios con un commit

Opción 1

Repositorio vacio en local - 3/3

Subimos los cambios al repositorio remoto.

  1. git branch -M main
    Cambiamos el nombre de la rama a main
  2. git push -u origin main
    Subimos los cambios de la rama al repositorio remoto origin estableciendo la rama remota con el nombre main

Opción 2

Repositorio remoto inicializado - 1

Creamos un repositorio en GitHub ya con README.md y .gitignore.

Opción 2

Repositorio remoto inicializado - 2

Copiamos la URL para clonar el repositorio.

Opción 2

Repositorio remoto inicializado - 3

Clonamos el repositorio remoto en local.

  1. git clone <URL>
    Clonamos el repositorio con la URL que copiamos en GitHub (creará una carpeta con el nombre del repositorio)
  2. cd <nombre repo>
    Entramos en la carpeta del proyecto

A trabajar!

Con nuestro repositorio inicializado (de cualquiera de las 2 formas) ya podemos trabajar.

Chuleta

Flujo de trabajo

Chuleta

Flujo de trabajo

Trabajamos en el directorio de nuestro proyecto

  1. git status
    Vemos el estado general de nuestro repositorio
  2. git add <fichero(s)>
    Agregamos los ficheros de los que queremos confirmar los cambios
  3. git commit -m "Mensaje de commit"
    Consolidamos los cambios
  4. git push
    Subimos los cambios al repositorio remoto

Más cosas de Git:

Ramas

Una rama (branch) es

  • Línea de trabajo paralela
  • Probar ciertos cambios a partir de un determinado punto
  • No afectan a la línea de trabajo principal
  • Podemos incorporar estos cambios otra línea con merge

Representación gráfica Rama

Nombres típicos de ramas

  • Master -> Main
  • Development
  • Feature 1
  • Feature 2
  • Issue 1
  • Issue 2

Workflows de ramas: un ejemplo

Comandos con ramas

  • git branch <nombre> [<inicio>] Crear rama
  • git branch (-d|-D) <nombre> Borrar una rama
  • git branch -m <viejo> <nuevo> Renombrar una rama
  • git branch [-r|-a] Listar ramas actuales
  • git checkout [-b] <nombre de rama> Situarse en una rama (o en un commit)
  • git [merge|rebase] <nombre de rama> Mezclar rama

Documentación y referencia

Muchas gracias

Contáctame en LinkedIn

También me puedes escribir por correo a: braisariasrio en liceolapaz punto net

Introducción a Git y GitHub

Brais Arias Rio

https://braisarias.github.io/taller-git-github/

Presentación basada en:

Licencia CC BY-SA