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

Git avanzado

Conceptos iniciales

Git avanzado

Git avanzado

Conceptos iniciales

  • Qué es el control de versiones

  • VCS centralizados / distribuidos

  • CLI vs GUI

  • Branching

Git avanzado

Instalación

Git avanzado

Instalación

 

  • Notepad++

  • 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

  • Crear una cuenta en Bitbucket (con un email real)

Git avanzado

Configuración inicial

  • Configuración proxy:
    • git config --global http.proxy http://username:password@host:port
    • git config --global https.proxy http://username:password@host:port
  • Configuración usuario:
    • git config --global user.name "Mario González"
    • git config --global user.email mario@mariogl.com

Git avanzado

Fundamentos de Git

Git avanzado

Fundamentos de Git

  • Snapshots (commits)

  • Repositorio

  • Working directory

  • Stage/cache

Git avanzado

Fundamentos de Git

  • Referencias

    • Ramas

    • HEAD

    • Tags

  • .gitignore

Git avanzado

Commits

Git avanzado

Preparando el commit

  • Añadir nuevos archivos al índice con git add (empezar a versionar)

  • Quitar del índice (desversionar) con git rm --cached

  • Añadir modificaciones al staging area con git add

  • Ver el staging area con git status

  • Quitar archivos o modificaciones del staging area con git reset HEAD

  • Borrar archivos

  • Hacer el commit con git commit [-m]

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

  • Deshacer cambios del Working Directory con git checkout -- 

Git avanzado

Preparando el commit

Git avanzado

El commit

  • Hash SHA-1

  • Autor / commiteador

  • Fecha

  • Mensaje

  • Padre/s

Git avanzado

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

  • Cómo referenciar a un commit

    • SHA-1

    • HEAD^

    • HEAD~

    • HEAD@{n}

Git avanzado

El log

  • Saltar a otro commit o rama 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 [push]

    • git stash list

    • git stash show stash@{n} -v

    • git stash apply [stash@{n}]

    • git stash pop [stash@{n}]

    • git stash drop [stash@{n}]

Git avanzado

Branching

Git avanzado

Ramas

Git avanzado

Ramas

  • Referencia

  • La rama master

  • Listar ramas

  • Crear una rama con git branch

  • Ir a una rama con git checkout

  • Crear rama e ir a ella con git checkout -b

  • Borrar una rama con git branch -d

  • Renombrar una rama con git branch -m

  • Mezclar dos ramas con git merge (simulación)

  • Mezclar dos ramas con git rebase (simulación)

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

Git avanzado

El modelo git flow

  • master branch

  • develop branch

  • feature branch

  • bugfix branch

  • hotfix branch

  • release branch

Git avanzado

El programa git flow

  • git flow init

  • git flow tipo_rama start nombre_rama

  • git flow finish

Git avanzado

Repositorios remotos

Git avanzado

Servidores GIT - repositorios remotos

Git avanzado

Repositorios remotos

  • Clonar con git clone

  • Los remotes: 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

  • Cambiar la URL de un remote con git remote set-url

  • Tracking branch

Git avanzado

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

  • Configurar prune por defecto:
    git config [--global] fetch.prune true

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

Git avanzado

GUI

Git avanzado

GUI para Git

  • Git GUI (instalada con Git)

Git avanzado

GUI para Git

Git avanzado

GUI para Git

Git avanzado

GUI para Git

Git avanzado

GUI para Git

  • Plugin EGit para Eclipse

Git avanzado

GUI para Git

  • Team Explorer de Visual Studio

Git avanzado

Git & Maven

Git avanzado

Git & Maven

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

  • Si hay jerarquía de proyectos/módulos: submódulos Git

Git avanzado

Git & Maven - Submódulos

  • Añadir un submódulo al módulo padre:

    • git submodule add URL

  • Clonar un módulo padre con sus submódulos:

    • Método 1: git clone URL --recurse-submodules

    • Método 2:
      git clone URL
      git submodule init
      git submodule update

Git avanzado

  • Actualizar submódulos a la última versión:
    • git submodule update --remote

Git & Maven - Maven SCM plugin

  • Integra a Maven con Git

  • Cuando hacemos una release con Maven, también añade un commit y un tag al repositorio Git

  • Nos permite lanzar comandos Git en cualquier fase

  • Configuración en el pom.xml:

Git avanzado

<project ...>
...
    <scm>
        <url>https://bitbucket.org/git-madrid-4/facturas/src/master</url>
        <connection>scm:git:https://mariogl@bitbucket.org/git-madrid-4/facturas.git</connection>
        <developerConnection>scm:git:https://mariogl@bitbucket.org/git-madrid-4/facturas.git</developerConnection>
    </scm>
...
</project>

Pull Requests

Git avanzado

Pull Requests

  • En equipos grandes

  • Los miembros no pueden mergear sus ramas a develop

  • Se solicita el merge a través de la interfaz del servidor

  • Hay un encargado (o varios) de revisar las peticiones de PR, y de realizar el merge de las ramas a develop.

Git avanzado

Links

Git avanzado

Git avanzado