Introducción a Git y GitHub

Brais Arias Rio

(profesor en prácticas)

Liceo La Paz

https://braisarias.github.io/liceointernship-git-lessons/

Licencia CC BY-SA

Quien soy?

Ingeniero informático

Consultor de software libre / SysAdmin en iCarto

Oficina de Software Libre de la AMTEGA (Xunta)

Mancomún Podcast

Asociacionismo: GPUL - KDE España

(Ahora) 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)

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.

  • git branch -M main
    Cambiamos el nombre de la rama a main
  • 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

    Realizar encuesta de feedback

    Contáctame en LinkedIn

    También me puedes escribir por correo a: braisarias en disroot punto org

    Introducción a Git y GitHub

    Brais Arias Rio

    https://braisarias.github.io/liceointernship-git-lessons/

    Presentación basada en:

    Licencia CC BY-SA