Git avanzado
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
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
-
Azure DevOps / Team Foundation Server
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
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
Git avanzado
By mariogl
Git avanzado
Curso Git avanzado Madrid 8-9 octubre 2018
- 1,039