Git avanzado

Licencia de Creative Commons mario@mariogl.com

Temario

  • Propósito y alcance
  • Arquitectura
  • Componentes fundamentales
  • Operaciones CRUD
  • Operaciónes de organización de código
  • Gestión de ramas y etiquetas
  • Resolución de conflictos
  • Integración con Maven
  • Configuración de GIT
  • Introducción a GIT en el lado servidor
  • Programas cliente para operar con GIT

Conceptos iniciales

Conceptos iniciales

  • Qué es el control de versiones

  • VCS centralizados / distribuidos

  • CLI vs GUI

  • Branching

Instalación

Instalación

 

  • Git

  • Marcar o asegurarse de que está marcado:

    • Git Bash Here

    • Use Notepad++ as Git's default editor

    • Use Git from the Windows Command Prompt

    • Checkout Windows-style, commit Unix-style etc.

    • Use MinTTY

Configuración inicial

 

git config --global http.proxy http://username:password@host:port

git config --global https.proxy http://username:password@host:port

git config --global user.name "Mario González"

git config --global user.email mario@mariogl.com

Bitbucket

 

- Cuenta en bitbucket.org (igual que la de Git)

Fundamentos de Git

Fundamentos de Git

  • Snapshots (commits)

  • Repositorio

  • Working directory

  • Stage/index/cache

  • Referencias

    • Ramas
    • HEAD
    • Tags
  • .gitignore

Commits

Preparando el commit

  • Añadir al índice con git add

  • Añadir de manera interactiva con git add -i

  • Ver el staging area con git status

  • Quitar archivos o modificaciones del staging area con git reset

  • Hacer el commit con git commit

  • Modificar el último commit con git commit --amend

El commit

  • Hash SHA-1

  • Autor / commiteador

  • Fecha

  • Mensaje

  • Padre/s

El log

  • git log para ver el histórico de commits

  • Referencias en el log

  • Ver el log compacto con git log --oneline

  • Ver un commit con git show y git ls-tree

  • Cómo referenciar a un commit

    • SHA-1

    • HEAD^

    • HEAD~

    • HEAD@{n}

El log

  • Saltar a otro commit con git checkout

  • Borrar commits con git reset

  • Ver el histórico de HEADs con git reflog

  • Apartar cambios provisionalmente con git stash

    • git stash

    • git stash list

    • git stash show stash@{n} -v

    • git stash apply [stash@{n}]

    • git stash pop [stash@{n}]

    • git stash drop [stash@{n}]

Branching

Ramas

  • Referencia

  • La rama master

  • Listar ramas

  • Crear una rama con git branch

  • Ir a una rama con git checkout

  • Borrar una rama con git branch -d

  • Mezclar dos ramas con git merge

  • Mezclar dos ramas con git rebase

  • Aplicar un commit de otra rama con cherry-pick -x

El modelo git flow

  • master

  • develop

  • feature branch

  • bugfix branch

  • release branch

  • hotfix branch

  • Instalación

Repositorios remotos

Repositorios online

Repositorios remotos

  • Clonar con git clone

  • El remote origin

  • Añadir un remote con git remote add

  • Renombrar un remote con git remote rename

  • Borrar un remote con git remote remove

  • Tracking branch

Repositorios remotos

  • Enviar cambios al repositorio remoto con git push

  • Sincronizar mi copia local del remoto con git fetch

  • Mergear cambios del remoto con git merge

  • git fetch + git merge = git pull

  • Borrar ramas del remoto

  • Marcar ramas remotas borradas con git fetch --prune

  • Ver lo que voy a enviar en el push con
    git diff origin/master master

GUI

GUI para Git

Git & Maven

Git & Maven

  • Añadir al .gitignore los directorios de builds y de dependencias (ejemplo)

  • Si hay jerarquía de repositorios: git submodule

    • git submodule add URL

    • git clone URL --recurse-submodules
      o
      git clone URL
      git submodule init
      git submodule update

Links