Git avanzado
Git avanzado
Git avanzado
Conceptos iniciales
Qué es el control de versiones
VCS centralizados / distribuidos
CLI vs GUI
Branching
Git avanzado
Git avanzado
Instalación
Git avanzado
Configuración inicial
Git avanzado
Git avanzado
Fundamentos de Git
Snapshots (commits)
Repositorio
Working directory
Stage/cache
Git avanzado
Fundamentos de Git
Referencias
Ramas
HEAD
Tags
Git avanzado
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
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
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
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 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
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>
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