SlideShare una empresa de Scribd logo
1 de 38
Descargar para leer sin conexión
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sistemas de control de versiones distribuidos
Controla las versiones de tu trabajo con GIT
Nacho Álvarez
 @neonigmacdb
 neonigma@gmail.com
29 de enero de 2018
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 1 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Índice
1 Acerca de mí
2 Definiciones
3 ¿Por qué GIT?
4 Arquitectura SCV
5 Flujo de trabajo en GIT
6 Demo
7 Gestión de conflictos
8 Tags
9 Más funcionalidades útiles
10 Algo más avanzado
11 Problemas comunes
12 Enlaces de interés
13 ¿Preguntas?
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 2 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Acerca de mí
Who?
▶ Ingeniero en Informática por la UCO
▶ Certificado Scrum Manager en 2012 y PMP En 2017
▶ Trayectoria profesional:
Soporte Servicio Informática UCO
Desarrollo Web
Desarrollo / Integración distribuciones GNU/Linux (Guadalinfo)
Android mobile + backend developer (WUL4)
Técnico especialista Área de Innovación (Redsys)
Analista Técnico en Soluciones Sectoriales (Redsys)
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 3 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Definiciones
Definiciones
▶ Control de versiones: gestión de los diversos cambios que se realizan
sobre los elementos de algún producto
▶ Una versión, revisión o edición de un producto, es el estado en el
que se encuentra dicho producto en un momento dado de su
desarrollo o modificación
▶ Los sistemas de control de versiones (SCV) vienen a automatizar
parcialmente la gestión de este control de cambios
▶ Existen SCV centralizados (repositorio único remoto) y SCV
distribuidos (cada usuario su repositorio local + remoto)
▶ Los más famosos y de más trayectoria son: SVN, GIT, Mercurial,
Bazaar, ClearCase, Perforce...
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 4 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SCV centralizados
Ventajas SCV centralizados
▶ En los sistemas distribuidos hay un mayor bloqueo del estado final
del proyecto que en los sistemas centralizados.
▶ En los sistemas centralizados las versiones vienen identificadas por un
número de versión. En lugar de eso, en los sistemas distribuidos,
cada versión tiene un identificador (hash) al que se le puede asociar
una etiqueta (tag).
▶ La curva de aprendizaje es sensiblemente menor que en los sistemas
distribuidos
▶ Requiere menor intervención del mantenedor
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 5 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
SCV distribuidos
Ventajas SCV distribuidos
▶ Necesita menos operaciones en red => mayor autonomía y una
mayor rapidez.
▶ Aunque se caiga el repositorio remoto la gente puede seguir
trabajando
▶ Alta probabilidad de reconstrucción en caso de falla debido a su
arquitectura distribuida
▶ Permite mantener repositorios centrales más limpios, el
mantenedor decide
▶ El servidor remoto requiere menos recursos que los que necesitaría
un servidor centralizado ya que gran parte del trabajo lo realizan los
repositorios locales.
▶ Al ser los sistemas distribuidos más recientes que los sistemas
centralizados, y al tener más flexibilidad por tener un repositorio
local y otro/s remotos, estos sistemas han sido diseñados para hacer
fácil el uso de ramas locales y remotas (creación, evolución y
fusión) y poder aprovechar al máximo su potencial.
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 6 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
¿Por qué GIT?
En números
▶ Enfocado a código privado (Facebook, Adobe, Opera, etc...)
▶ Más de 6 millones de usuarios registrados con 1 millón de equipos
▶ Integración del resto del ecosistema software: Bamboo (CI),
Confluence (Doc), Jira (project tracking), SourceTree (GUI)...
▶ Se cobra por número de integrantes de equipo
▶ Enfocado a código abierto (bootstrap, nodejs, jquery, Amazon...)
▶ Más de 24 millones de usuarios registrados y 67 millones de
repositorios creados
▶ Se cobra por repositorios privados
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 7 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Arquitectura SCV
Arquitectura SCV centralizado
▶ Todo el mundo actualiza un mismo repositorio central remoto
▶ La gestión de ramas y tags es más una convención que parte de la
herramienta
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 8 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Arquitectura SCV
Arquitectura SCV distribuido
▶ Todo el mundo mantiene su copia del proyecto
▶ Cada integrante del equipo trabaja en sus propias funcionalidades en
su repositorio local particular
▶ El mantenedor del repositorio acepta o no las modificaciones de los
integrantes
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 9 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Arquitectura SCV
GIT
▶ Nacido de la mente de Linus Torvalds. Versión 1.0 en 2005.
▶ Se buscaba una manera de gestionar la ingente cantidad de código del
kernel de Linux
▶ Toma el diseño de versiones anteriores de BitKeeper y Monotone
▶ Git se basa en snapshots, cada commit es una copia completa del
código comprimida en binario, lo que le imprime velocidad. Usan
compresión delta zlib para optimizar el espacio.
▶ Se ha medido git log frente a svn log, git opera 100x más rápido
▶ Se opera siempre en local (de ahí el incremento de velocidad) y
cuando se tienen listos los cambios se suben a remoto
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 10 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
Flujo de trabajo en GIT
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 11 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
El puntero HEAD
▶ HEAD es una referencia simbólica que a menudo apunta al último
commit de la rama actual
▶ A veces el HEAD apunta directamente a un objeto commit, en este
caso el estado se llama detached HEAD mode. En este estado,
incorporar un commit no reflejará cambios en rama alguna
▶ El primer precedesor de HEAD puede direccionarse vía HEAD~1,
HEAD~2 y así sucesivamente. Si cambias entre ramas, el puntero
HEAD se mueve al último commit de la rama de trabajo. Si se hace
un checkout de un commit específico, el puntero HEAD apunta a este
commit.
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 12 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
Etapas de un fichero (I)
1 Archivos sin seguimiento
2 Cambios no preparados para el commit
3 Cambios para hacer commit
# Archivos sin seguimiento:
# (use git add <archivo>... para incluir lo que se ha de ejecutar)
#
# fichero.tex
▶ Son archivos que aún no forman parte del repositorio local ni del
remoto
▶ Al añadirlos pasan a la etapa III
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 13 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
Etapas de un fichero (II)
# Cambios no preparados para el commit:
# (use git add <archivo>... para actualizar lo que se ejecutará)
# (use git checkout -- <archivo>... para descartar cambios en el
directorio de trabajo)
#
# modificado: advanced.tex
# modificado: principal.pdf
▶ Son ficheros modificados ya añadidos previamente pero que aún no
han sido marcados para comitear
▶ Al añadirlos pasan a la etapa III
▶ Si le aplicamos un checkout -- vuelven a la etapa I
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 14 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
Etapas de un fichero (III)
# Cambios para hacer commit:
# (use git reset HEAD <archivo>...para eliminar stage)
#
# modificado: workflow.tex
▶ Son ficheros ya añadidos previamente y marcados para comitear
▶ Si le aplicamos un reset HEAD vuelven a la etapa II
▶ En esta etapa es donde se puede comitear y hacer push
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 15 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Flujo de trabajo en GIT
Git branching
▶ Reglas propuestas por
Vincent Driessen
▶ Ramas master (commits
producción) y develop
(siguiente versión planificada)
▶ Ramas feature (funcionalidad
concreta). Se originan a partir
de develop y vuelven a develop
▶ Ramas release (siguiente
versión en producción). Se
originan de develop y pasan a
master o develop.
▶ Ramas hotfix (bugs en
producción). Se originan a partir
de master y vuelven a master o
develop.Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 16 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Demo
Demo
▶ Crearemos nuestro propio repositorio Git en Github
▶ Crearemos nuestra rama de trabajo y subiremos cambios
▶ Propondremos la integración de estos cambios haciendo pull request
▶ Simularemos la descarga del repositorio por parte de un compañero y
subiremos nuevos cambios
▶ Actualizaremos el repo haciendo rebase y subiremos más cambios
▶ Mostraremos cómo funciona el rebase de manera gráfica
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 17 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Gestión de conflictos
Merges en caso de conflicto
$ git checkout master
Switched to branch ’master’
$ git merge --no-ff -m ’Merged pull request #7’ mybranch
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 18 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Tags
Tags
▶ En SVN, comúnmente se congela una versión copiando y pegando el
trunk a la carpeta tags y subiendo esta nueva carpeta
▶ En Git, un tag no es más que una etiqueta en un commit concreto
▶ Con este simple acto, Git puede recuperar una versión en cualquier
momento utilizando la etiqueta del tag
▶ Dos tipos:
Lightweight tags: git tag <etiqueta>
Annotated tags: git tag -a <etiqueta> -m <mensaje>
▶ Para recuperar un tag, basta con hacer git checkout <tag>
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 19 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
pull
Utilizándolo sin ningún parámetro adicional -git pull- funciona igual que
un update en Subversion. Es decir, se trae los cambios y hace merge. Si le
pasamos el parámetro --rebase, funciona como un rebase.
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 20 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
ignore
El fichero .gitignore se suele colocar en la raíz del proyecto y el contenido
suele ser un listado de elementos que no queremos que sean reconocidos
como ficheros del repositorio.
neonigma@hyperion:~/things/taller-git$ cat .gitignore
*.aux
*.bbl
*.log
*.backup
*.toc
*.dvi
*.out
neonigma@hyperion:~/things/taller-git$ git log principal.aux
neonigma@hyperion:~/things/taller-git$
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 21 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
update-index
El comando update-index --assume-unchanged se utiliza para ficheros que
accidentalmente se han comiteado (y probablemente pusheado) y no
queremos tener en cuenta los cambios producidos en estos ficheros, ya que
lo veremos como modificados en la etapa II (listo para comitear).
$ echo "Nueva linean" >> bibliografia.bib
$ git status
# En la rama master
# Cambios no preparados para el commit:
# (use «git add <archivo>...» para actualizar lo que se ejecutará)
# (use «git checkout -- <archivo>...« para descartar cambios en le direct
#
#^^Imodificado: bibliografia.bib
#
$ git update-index --assume-unchanged bibliografia.bib
$ git status
# En la rama master
nothing to commit, working directory clean
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 22 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
revert
Este comando deshace un único commit aplicando el parche con la
diferencia como un nuevo commit. Ejemplo: git revert HEAD
Este comando no destruye la historia ni diverge las ramas. Ejemplo pack
commits: git revert feature~2..feature
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 23 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
soft reset
El comando git reset --soft <hash> mueve el puntero de la cabeza al
hash del commit que le indiquemos.
Esto provoca que los ficheros afectados entren de nueva en la etapa III
(cambios listos para hacer commit).
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 24 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
hard reset
El comando git reset --hard <hash> mueve el puntero de la cabeza al
hash del commit que le indiquemos y destruye toda la historia hasta dicho
hash.
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 25 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Más funcionalidades útiles
Demo
▶ Crearemos un tag
▶ Mostraremos cómo hacer un revert
▶ Mostraremos cómo hacer un soft reset
▶ El hard reset es el mal y no lo veremos
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 26 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
Algo más avanzado
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 27 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
stash
Se utiliza para aparcar temporalmente los cambios actuales antes de ser
comiteados. El comando se escribe únicamente git stash.
$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051... Revert added file_size
stash@{2}: WIP on master: 21d80a5... added number to log
Recuperamos los cambios con el comando git stash apply <id> o con git
stash pop (tipo pila)
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 28 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
format-patch
Se utiliza para generar parches que se entregarán a mantenedores de
repositorios que no aceptan pull requests.
Un parche se genera con el comando git format-patch --stdout <hash o
rango de hashes>. Esto genera tantos ficheros con parches como commits
se hayan introducido como parámetro.
Para aplicar los parches, se utiliza el comando git am --signoff < file.patch
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 29 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
squash
Se utiliza dentro de lo que se llama el rebase interactivo, para unir varios
commits en uno solo antes de entregarlos al repositorio remoto. El proceso
sería:
▶ Comiteamos tantas veces como queramos: git commit -m “mensaje”
▶ Si por ejemplo hemos hecho 2 commits, ejecutamos el rebase
interactivo con: git rebase -i HEAD~2
pick 4ca2acc commit file1
pick 7b36971 commit file2
# rebase 41a72e6..7b36971 onto 41a72e6
#
# commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like “squash”, but discard this commit’s log message
# x, exec = run command (the rest of the line) using shell
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 30 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
cherry-pick
▶ Permite incorporar commits individuales a tu rama de trabajo
▶ El commit procederá de otra rama cualquiera
▶ La sintaxis: git cherry-pick <hash_commit>
▶ La ventaja de esto es aprovechar funcionalidades comiteadas por otros
miembros del equipo
▶ Si la recuperación del commit trae problemas de mezclado, se puede
abortar esta recuperación con git cherry-pick --abort
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 31 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
lolcommits
▶ Te permite tomar una foto desde la Webcam de manera automática
cada vez que haces git commit
▶ Puede descargarse aquí: http://mroth.github.io/lolcommits/
▶ Tiene una lista de plugins para cambiar el vocabulario de commits,
subir automáticamente las imágenes a un servidor, tuitear, etc.
▶ Se pueden hacer gif animados con las imágenes tomadas:
http://nacho-alvarez.es/descargas/myimage.gif
▶ En Linux y Mac OS X es ultrasencillo de instalar, en Windows algo
más complejo
▶ Para habililitar lolcommits en un repositorio git, sólo hay que escribir
lolcommits --enable
▶ Si queremos ver la última imagen: lolcommits --last , si queremos
abrir la carpeta: lolcommits --browse
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 32 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
gitdown
▶ Es un script que modera la actividad de git commit basada en tu tasa
de alcohol en sangre (BAC). Utiliza la placa DrinkShield para Arduino
como testeador de aliento, y un script en Ruby como git hook.
▶ Fue construido para el evento hackNY de la primavera de 2013 por
Alex Qin y Geoffrey Litt, y ganó el hackaton
▶ Hay disponible una demo en
https://youtu.be/NnBb1wmHj5k?t=43
▶ gitdown tiene tres modos de operación:
Normal mode: Sólo te permite comitear con un BAC < 0,05 %
Krunk mode: Sólo te permite comitear con un BAC > 0,05 %
Ball(m)er mode: Sólo permite comitear con BAC entre 0,13 % y 0,15 %
▶ En los modos Krunk y Ballmer, gitdown alterará tus mensajes de
commit para hacerlos parecer más intoxicados, y publicará tu nombre,
tasa de alcoholemia actual y el mensaje de commit en el Tumblr
oficial de gitdown, con un meme adjunto.
http://gitdownhackny.tumblr.com/
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 33 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Algo más avanzado
Demo
▶ Mostraremos el uso de stash
▶ Mostraremos cómo hacer un patch
▶ Utilizaremos el genial cherry-pick
▶ Para terminar, algo de lolcommits
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 34 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Problemas comunes
He visto cosas que no creeríais...
▶ No actualizar un repositorio cuando lleva mucho tiempo sin usarse
▶ Forzar el merge con SVN y perder cambios
▶ “No subas cambios al SVN ahora, ¡que estoy subiendo yo!”
▶ “Uso pull siempre porque hacer rebase es muy pesado”
▶ Guarda tus cambios en local, in your HDD we trust!
▶ Cambiar a otra rama y pensar que se han perdido todos los cambios
▶ Los repos gigantes de Android:
https://android.googlesource.com/ y el kernel Linux:
https://git.kernel.org/cgit/
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 35 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Problemas comunes
Herramientas
▶ Intellij (Windows, Mac, Linux)
http://www.jetbrains.com/idea/
▶ Eclipse (Windows, Mac, Linux)
http://www.eclipse.org/
▶ SourceTree (Windows, Mac)
http://www.sourcetreeapp.com/
▶ SmartGit (Windows, Mac, Linux)
http://www.syntevo.com/smartgithg/
▶ Git Tower (Mac)
http://www.git-tower.com/
▶ TortoiseGit (Windows)
https://code.google.com/p/tortoisegit/
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 36 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Enlaces de interés
Enlaces de interés
▶ Git con calcetines
http://danielkummer.github.io/git-flow-cheatsheet/
https://www.atlassian.com/git/tutorial/git-basics
https://www.atlassian.com/git/workflows
▶ Successful Git Branching model
http://nvie.com/posts/a-successful-git-branching-model/
▶ Visual Git learning
http://pcottle.github.io/learnGitBranching/
▶ Github vs Bitbucket
http://www.infoworld.com/d/application-development/
bitbucket-vs-github-which-project-host-has-the-most-22706
▶ Git Android
https://android.googlesource.com/
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 37 / 38
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
¿Preguntas?
¿Preguntas?
Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 38 / 38

Más contenido relacionado

Similar a Sistemas de control de versiones distribuidos: Controla las versiones de tu trabajo con GIT

Sistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerSistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerTensor
 
Peer to Peer
Peer to PeerPeer to Peer
Peer to PeerTensor
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a gitKeopx
 
Administracion avanzada linux
Administracion avanzada linuxAdministracion avanzada linux
Administracion avanzada linuxchiraldi
 
Git para no gitters
Git para no gittersGit para no gitters
Git para no gittersRojomorgan
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numericoLUIS COAQUIRA
 
Manual final nagios
Manual final nagiosManual final nagios
Manual final nagiosrpm-alerts
 
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...SANTIAGO PABLO ALBERTO
 
Admin linuxubuntufedora
Admin linuxubuntufedoraAdmin linuxubuntufedora
Admin linuxubuntufedoraJose Torrico
 

Similar a Sistemas de control de versiones distribuidos: Controla las versiones de tu trabajo con GIT (20)

Manual sap 14_completo_division_caribe
Manual sap 14_completo_division_caribeManual sap 14_completo_division_caribe
Manual sap 14_completo_division_caribe
 
Manual de sap2000
Manual de sap2000 Manual de sap2000
Manual de sap2000
 
Manual de aplicación del programa sap2000 v14
Manual de aplicación del programa sap2000 v14Manual de aplicación del programa sap2000 v14
Manual de aplicación del programa sap2000 v14
 
aula-con-tcos
aula-con-tcosaula-con-tcos
aula-con-tcos
 
Sistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to PeerSistema de Computación Distribuida Peer to Peer
Sistema de Computación Distribuida Peer to Peer
 
Peer to Peer
Peer to PeerPeer to Peer
Peer to Peer
 
Git.manual.usuario
Git.manual.usuarioGit.manual.usuario
Git.manual.usuario
 
Manual r 1
Manual r 1Manual r 1
Manual r 1
 
Guia analisis-de-algoritmos
Guia analisis-de-algoritmosGuia analisis-de-algoritmos
Guia analisis-de-algoritmos
 
Trabajo oee mantenimiento has 200
Trabajo oee mantenimiento has 200Trabajo oee mantenimiento has 200
Trabajo oee mantenimiento has 200
 
Introducción a git
Introducción a gitIntroducción a git
Introducción a git
 
Administracion avanzada linux
Administracion avanzada linuxAdministracion avanzada linux
Administracion avanzada linux
 
Git para no gitters
Git para no gittersGit para no gitters
Git para no gitters
 
Octave calculo numerico
Octave calculo numericoOctave calculo numerico
Octave calculo numerico
 
Fase4 301402 48
Fase4 301402  48Fase4 301402  48
Fase4 301402 48
 
Manual final nagios
Manual final nagiosManual final nagios
Manual final nagios
 
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...
Electrónica digital: DIseño e implementacion de la plataforma Boole-Weblab-De...
 
Bbdd
BbddBbdd
Bbdd
 
Admin linuxubuntufedora
Admin linuxubuntufedoraAdmin linuxubuntufedora
Admin linuxubuntufedora
 
Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550Curso de microcontroladores pic18 f4550
Curso de microcontroladores pic18 f4550
 

Más de José Ignacio Álvarez Ruiz

Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)José Ignacio Álvarez Ruiz
 
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDKSysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDKJosé Ignacio Álvarez Ruiz
 
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidSysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidJosé Ignacio Álvarez Ruiz
 
Sysmana 2017 monitorización de logs con el stack elk
Sysmana 2017   monitorización de logs con el stack elkSysmana 2017   monitorización de logs con el stack elk
Sysmana 2017 monitorización de logs con el stack elkJosé Ignacio Álvarez Ruiz
 
Sysmana 2017 metodologías gestión ágil de proyectos
Sysmana 2017   metodologías gestión ágil de proyectosSysmana 2017   metodologías gestión ágil de proyectos
Sysmana 2017 metodologías gestión ágil de proyectosJosé Ignacio Álvarez Ruiz
 
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCCharla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCJosé Ignacio Álvarez Ruiz
 
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...José Ignacio Álvarez Ruiz
 
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)José Ignacio Álvarez Ruiz
 

Más de José Ignacio Álvarez Ruiz (10)

Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
Servicios Web con Python + web.py (Homenaje a Aaron Swartz)
 
The blockchain disruption
The blockchain disruptionThe blockchain disruption
The blockchain disruption
 
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDKSysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
Sysmana 2016 - Desarrollo seguro de aplicaciones C/C++ en Android con NDK
 
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y AndroidSysmana 2015 - Comunicación NFC entre Raspberry pi y Android
Sysmana 2015 - Comunicación NFC entre Raspberry pi y Android
 
Sysmana 2017 monitorización de logs con el stack elk
Sysmana 2017   monitorización de logs con el stack elkSysmana 2017   monitorización de logs con el stack elk
Sysmana 2017 monitorización de logs con el stack elk
 
Sysmana 2017 metodologías gestión ágil de proyectos
Sysmana 2017   metodologías gestión ágil de proyectosSysmana 2017   metodologías gestión ágil de proyectos
Sysmana 2017 metodologías gestión ágil de proyectos
 
Comunicación NFC entre Raspberry Pi y Android
Comunicación NFC entre Raspberry Pi y AndroidComunicación NFC entre Raspberry Pi y Android
Comunicación NFC entre Raspberry Pi y Android
 
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFCCharla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
Charla nuevas tecnologías Android: realidad aumentada, geolocalización, NFC
 
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
Realidad aumentada en Android: reconocimiento de imágenes y geolocalización u...
 
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
Analisis distribuciones GNU/Linux Mayo 2010 (revisado)
 

Último

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21mariacbr99
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfaxelv9257
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosJhonJairoRodriguezCe
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.FlorenciaCattelani
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
Retornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaRetornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaJuanPabloVictorianoS
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxgustavovasquezv56
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxJorgeParada26
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...axelv9257
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...solanocortezluisalfr
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIhmpuellon
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxFederico Castellari
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...JohnRamos830530
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativanicho110
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfYanitza28
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfYanitza28
 

Último (17)

Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdfpresentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
presentacion_desamblado_de_una_computadora_base_a_las_normas_de_seguridad.pdf
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Retornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armoníaRetornamos a la escuela y nos organizamos para convivir en armonía
Retornamos a la escuela y nos organizamos para convivir en armonía
 
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptxinfor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
infor expo AVANCES TECNOLOGICOS DEL SIGLO 21.pptx
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...presentación del desensamble y ensamble del equipo de computo en base a las n...
presentación del desensamble y ensamble del equipo de computo en base a las n...
 
Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...Generaciones de las Computadoras..pdf...
Generaciones de las Computadoras..pdf...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
Editorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdfEditorial. Grupo de 12B. La Salle Margarita.pdf
Editorial. Grupo de 12B. La Salle Margarita.pdf
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
Editorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdfEditorial. Grupo de 12B de La Salle Margarita.pdf
Editorial. Grupo de 12B de La Salle Margarita.pdf
 

Sistemas de control de versiones distribuidos: Controla las versiones de tu trabajo con GIT

  • 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sistemas de control de versiones distribuidos Controla las versiones de tu trabajo con GIT Nacho Álvarez  @neonigmacdb  neonigma@gmail.com 29 de enero de 2018 Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 1 / 38
  • 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Índice 1 Acerca de mí 2 Definiciones 3 ¿Por qué GIT? 4 Arquitectura SCV 5 Flujo de trabajo en GIT 6 Demo 7 Gestión de conflictos 8 Tags 9 Más funcionalidades útiles 10 Algo más avanzado 11 Problemas comunes 12 Enlaces de interés 13 ¿Preguntas? Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 2 / 38
  • 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Acerca de mí Who? ▶ Ingeniero en Informática por la UCO ▶ Certificado Scrum Manager en 2012 y PMP En 2017 ▶ Trayectoria profesional: Soporte Servicio Informática UCO Desarrollo Web Desarrollo / Integración distribuciones GNU/Linux (Guadalinfo) Android mobile + backend developer (WUL4) Técnico especialista Área de Innovación (Redsys) Analista Técnico en Soluciones Sectoriales (Redsys) Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 3 / 38
  • 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Definiciones Definiciones ▶ Control de versiones: gestión de los diversos cambios que se realizan sobre los elementos de algún producto ▶ Una versión, revisión o edición de un producto, es el estado en el que se encuentra dicho producto en un momento dado de su desarrollo o modificación ▶ Los sistemas de control de versiones (SCV) vienen a automatizar parcialmente la gestión de este control de cambios ▶ Existen SCV centralizados (repositorio único remoto) y SCV distribuidos (cada usuario su repositorio local + remoto) ▶ Los más famosos y de más trayectoria son: SVN, GIT, Mercurial, Bazaar, ClearCase, Perforce... Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 4 / 38
  • 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SCV centralizados Ventajas SCV centralizados ▶ En los sistemas distribuidos hay un mayor bloqueo del estado final del proyecto que en los sistemas centralizados. ▶ En los sistemas centralizados las versiones vienen identificadas por un número de versión. En lugar de eso, en los sistemas distribuidos, cada versión tiene un identificador (hash) al que se le puede asociar una etiqueta (tag). ▶ La curva de aprendizaje es sensiblemente menor que en los sistemas distribuidos ▶ Requiere menor intervención del mantenedor Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 5 / 38
  • 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SCV distribuidos Ventajas SCV distribuidos ▶ Necesita menos operaciones en red => mayor autonomía y una mayor rapidez. ▶ Aunque se caiga el repositorio remoto la gente puede seguir trabajando ▶ Alta probabilidad de reconstrucción en caso de falla debido a su arquitectura distribuida ▶ Permite mantener repositorios centrales más limpios, el mantenedor decide ▶ El servidor remoto requiere menos recursos que los que necesitaría un servidor centralizado ya que gran parte del trabajo lo realizan los repositorios locales. ▶ Al ser los sistemas distribuidos más recientes que los sistemas centralizados, y al tener más flexibilidad por tener un repositorio local y otro/s remotos, estos sistemas han sido diseñados para hacer fácil el uso de ramas locales y remotas (creación, evolución y fusión) y poder aprovechar al máximo su potencial. Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 6 / 38
  • 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ¿Por qué GIT? En números ▶ Enfocado a código privado (Facebook, Adobe, Opera, etc...) ▶ Más de 6 millones de usuarios registrados con 1 millón de equipos ▶ Integración del resto del ecosistema software: Bamboo (CI), Confluence (Doc), Jira (project tracking), SourceTree (GUI)... ▶ Se cobra por número de integrantes de equipo ▶ Enfocado a código abierto (bootstrap, nodejs, jquery, Amazon...) ▶ Más de 24 millones de usuarios registrados y 67 millones de repositorios creados ▶ Se cobra por repositorios privados Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 7 / 38
  • 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura SCV Arquitectura SCV centralizado ▶ Todo el mundo actualiza un mismo repositorio central remoto ▶ La gestión de ramas y tags es más una convención que parte de la herramienta Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 8 / 38
  • 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura SCV Arquitectura SCV distribuido ▶ Todo el mundo mantiene su copia del proyecto ▶ Cada integrante del equipo trabaja en sus propias funcionalidades en su repositorio local particular ▶ El mantenedor del repositorio acepta o no las modificaciones de los integrantes Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 9 / 38
  • 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arquitectura SCV GIT ▶ Nacido de la mente de Linus Torvalds. Versión 1.0 en 2005. ▶ Se buscaba una manera de gestionar la ingente cantidad de código del kernel de Linux ▶ Toma el diseño de versiones anteriores de BitKeeper y Monotone ▶ Git se basa en snapshots, cada commit es una copia completa del código comprimida en binario, lo que le imprime velocidad. Usan compresión delta zlib para optimizar el espacio. ▶ Se ha medido git log frente a svn log, git opera 100x más rápido ▶ Se opera siempre en local (de ahí el incremento de velocidad) y cuando se tienen listos los cambios se suben a remoto Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 10 / 38
  • 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT Flujo de trabajo en GIT Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 11 / 38
  • 12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT El puntero HEAD ▶ HEAD es una referencia simbólica que a menudo apunta al último commit de la rama actual ▶ A veces el HEAD apunta directamente a un objeto commit, en este caso el estado se llama detached HEAD mode. En este estado, incorporar un commit no reflejará cambios en rama alguna ▶ El primer precedesor de HEAD puede direccionarse vía HEAD~1, HEAD~2 y así sucesivamente. Si cambias entre ramas, el puntero HEAD se mueve al último commit de la rama de trabajo. Si se hace un checkout de un commit específico, el puntero HEAD apunta a este commit. Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 12 / 38
  • 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT Etapas de un fichero (I) 1 Archivos sin seguimiento 2 Cambios no preparados para el commit 3 Cambios para hacer commit # Archivos sin seguimiento: # (use git add <archivo>... para incluir lo que se ha de ejecutar) # # fichero.tex ▶ Son archivos que aún no forman parte del repositorio local ni del remoto ▶ Al añadirlos pasan a la etapa III Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 13 / 38
  • 14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT Etapas de un fichero (II) # Cambios no preparados para el commit: # (use git add <archivo>... para actualizar lo que se ejecutará) # (use git checkout -- <archivo>... para descartar cambios en el directorio de trabajo) # # modificado: advanced.tex # modificado: principal.pdf ▶ Son ficheros modificados ya añadidos previamente pero que aún no han sido marcados para comitear ▶ Al añadirlos pasan a la etapa III ▶ Si le aplicamos un checkout -- vuelven a la etapa I Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 14 / 38
  • 15. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT Etapas de un fichero (III) # Cambios para hacer commit: # (use git reset HEAD <archivo>...para eliminar stage) # # modificado: workflow.tex ▶ Son ficheros ya añadidos previamente y marcados para comitear ▶ Si le aplicamos un reset HEAD vuelven a la etapa II ▶ En esta etapa es donde se puede comitear y hacer push Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 15 / 38
  • 16. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Flujo de trabajo en GIT Git branching ▶ Reglas propuestas por Vincent Driessen ▶ Ramas master (commits producción) y develop (siguiente versión planificada) ▶ Ramas feature (funcionalidad concreta). Se originan a partir de develop y vuelven a develop ▶ Ramas release (siguiente versión en producción). Se originan de develop y pasan a master o develop. ▶ Ramas hotfix (bugs en producción). Se originan a partir de master y vuelven a master o develop.Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 16 / 38
  • 17. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Demo Demo ▶ Crearemos nuestro propio repositorio Git en Github ▶ Crearemos nuestra rama de trabajo y subiremos cambios ▶ Propondremos la integración de estos cambios haciendo pull request ▶ Simularemos la descarga del repositorio por parte de un compañero y subiremos nuevos cambios ▶ Actualizaremos el repo haciendo rebase y subiremos más cambios ▶ Mostraremos cómo funciona el rebase de manera gráfica Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 17 / 38
  • 18. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gestión de conflictos Merges en caso de conflicto $ git checkout master Switched to branch ’master’ $ git merge --no-ff -m ’Merged pull request #7’ mybranch Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 18 / 38
  • 19. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tags Tags ▶ En SVN, comúnmente se congela una versión copiando y pegando el trunk a la carpeta tags y subiendo esta nueva carpeta ▶ En Git, un tag no es más que una etiqueta en un commit concreto ▶ Con este simple acto, Git puede recuperar una versión en cualquier momento utilizando la etiqueta del tag ▶ Dos tipos: Lightweight tags: git tag <etiqueta> Annotated tags: git tag -a <etiqueta> -m <mensaje> ▶ Para recuperar un tag, basta con hacer git checkout <tag> Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 19 / 38
  • 20. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles pull Utilizándolo sin ningún parámetro adicional -git pull- funciona igual que un update en Subversion. Es decir, se trae los cambios y hace merge. Si le pasamos el parámetro --rebase, funciona como un rebase. Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 20 / 38
  • 21. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles ignore El fichero .gitignore se suele colocar en la raíz del proyecto y el contenido suele ser un listado de elementos que no queremos que sean reconocidos como ficheros del repositorio. neonigma@hyperion:~/things/taller-git$ cat .gitignore *.aux *.bbl *.log *.backup *.toc *.dvi *.out neonigma@hyperion:~/things/taller-git$ git log principal.aux neonigma@hyperion:~/things/taller-git$ Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 21 / 38
  • 22. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles update-index El comando update-index --assume-unchanged se utiliza para ficheros que accidentalmente se han comiteado (y probablemente pusheado) y no queremos tener en cuenta los cambios producidos en estos ficheros, ya que lo veremos como modificados en la etapa II (listo para comitear). $ echo "Nueva linean" >> bibliografia.bib $ git status # En la rama master # Cambios no preparados para el commit: # (use «git add <archivo>...» para actualizar lo que se ejecutará) # (use «git checkout -- <archivo>...« para descartar cambios en le direct # #^^Imodificado: bibliografia.bib # $ git update-index --assume-unchanged bibliografia.bib $ git status # En la rama master nothing to commit, working directory clean Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 22 / 38
  • 23. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles revert Este comando deshace un único commit aplicando el parche con la diferencia como un nuevo commit. Ejemplo: git revert HEAD Este comando no destruye la historia ni diverge las ramas. Ejemplo pack commits: git revert feature~2..feature Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 23 / 38
  • 24. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles soft reset El comando git reset --soft <hash> mueve el puntero de la cabeza al hash del commit que le indiquemos. Esto provoca que los ficheros afectados entren de nueva en la etapa III (cambios listos para hacer commit). Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 24 / 38
  • 25. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles hard reset El comando git reset --hard <hash> mueve el puntero de la cabeza al hash del commit que le indiquemos y destruye toda la historia hasta dicho hash. Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 25 / 38
  • 26. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Más funcionalidades útiles Demo ▶ Crearemos un tag ▶ Mostraremos cómo hacer un revert ▶ Mostraremos cómo hacer un soft reset ▶ El hard reset es el mal y no lo veremos Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 26 / 38
  • 27. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado Algo más avanzado Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 27 / 38
  • 28. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado stash Se utiliza para aparcar temporalmente los cambios actuales antes de ser comiteados. El comando se escribe únicamente git stash. $ git stash list stash@{0}: WIP on master: 049d078 added the index file stash@{1}: WIP on master: c264051... Revert added file_size stash@{2}: WIP on master: 21d80a5... added number to log Recuperamos los cambios con el comando git stash apply <id> o con git stash pop (tipo pila) Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 28 / 38
  • 29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado format-patch Se utiliza para generar parches que se entregarán a mantenedores de repositorios que no aceptan pull requests. Un parche se genera con el comando git format-patch --stdout <hash o rango de hashes>. Esto genera tantos ficheros con parches como commits se hayan introducido como parámetro. Para aplicar los parches, se utiliza el comando git am --signoff < file.patch Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 29 / 38
  • 30. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado squash Se utiliza dentro de lo que se llama el rebase interactivo, para unir varios commits en uno solo antes de entregarlos al repositorio remoto. El proceso sería: ▶ Comiteamos tantas veces como queramos: git commit -m “mensaje” ▶ Si por ejemplo hemos hecho 2 commits, ejecutamos el rebase interactivo con: git rebase -i HEAD~2 pick 4ca2acc commit file1 pick 7b36971 commit file2 # rebase 41a72e6..7b36971 onto 41a72e6 # # commands: # p, pick = use commit # r, reword = use commit, but edit the commit message # e, edit = use commit, but stop for amending # s, squash = use commit, but meld into previous commit # f, fixup = like “squash”, but discard this commit’s log message # x, exec = run command (the rest of the line) using shell Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 30 / 38
  • 31. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado cherry-pick ▶ Permite incorporar commits individuales a tu rama de trabajo ▶ El commit procederá de otra rama cualquiera ▶ La sintaxis: git cherry-pick <hash_commit> ▶ La ventaja de esto es aprovechar funcionalidades comiteadas por otros miembros del equipo ▶ Si la recuperación del commit trae problemas de mezclado, se puede abortar esta recuperación con git cherry-pick --abort Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 31 / 38
  • 32. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado lolcommits ▶ Te permite tomar una foto desde la Webcam de manera automática cada vez que haces git commit ▶ Puede descargarse aquí: http://mroth.github.io/lolcommits/ ▶ Tiene una lista de plugins para cambiar el vocabulario de commits, subir automáticamente las imágenes a un servidor, tuitear, etc. ▶ Se pueden hacer gif animados con las imágenes tomadas: http://nacho-alvarez.es/descargas/myimage.gif ▶ En Linux y Mac OS X es ultrasencillo de instalar, en Windows algo más complejo ▶ Para habililitar lolcommits en un repositorio git, sólo hay que escribir lolcommits --enable ▶ Si queremos ver la última imagen: lolcommits --last , si queremos abrir la carpeta: lolcommits --browse Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 32 / 38
  • 33. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado gitdown ▶ Es un script que modera la actividad de git commit basada en tu tasa de alcohol en sangre (BAC). Utiliza la placa DrinkShield para Arduino como testeador de aliento, y un script en Ruby como git hook. ▶ Fue construido para el evento hackNY de la primavera de 2013 por Alex Qin y Geoffrey Litt, y ganó el hackaton ▶ Hay disponible una demo en https://youtu.be/NnBb1wmHj5k?t=43 ▶ gitdown tiene tres modos de operación: Normal mode: Sólo te permite comitear con un BAC < 0,05 % Krunk mode: Sólo te permite comitear con un BAC > 0,05 % Ball(m)er mode: Sólo permite comitear con BAC entre 0,13 % y 0,15 % ▶ En los modos Krunk y Ballmer, gitdown alterará tus mensajes de commit para hacerlos parecer más intoxicados, y publicará tu nombre, tasa de alcoholemia actual y el mensaje de commit en el Tumblr oficial de gitdown, con un meme adjunto. http://gitdownhackny.tumblr.com/ Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 33 / 38
  • 34. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algo más avanzado Demo ▶ Mostraremos el uso de stash ▶ Mostraremos cómo hacer un patch ▶ Utilizaremos el genial cherry-pick ▶ Para terminar, algo de lolcommits Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 34 / 38
  • 35. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problemas comunes He visto cosas que no creeríais... ▶ No actualizar un repositorio cuando lleva mucho tiempo sin usarse ▶ Forzar el merge con SVN y perder cambios ▶ “No subas cambios al SVN ahora, ¡que estoy subiendo yo!” ▶ “Uso pull siempre porque hacer rebase es muy pesado” ▶ Guarda tus cambios en local, in your HDD we trust! ▶ Cambiar a otra rama y pensar que se han perdido todos los cambios ▶ Los repos gigantes de Android: https://android.googlesource.com/ y el kernel Linux: https://git.kernel.org/cgit/ Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 35 / 38
  • 36. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Problemas comunes Herramientas ▶ Intellij (Windows, Mac, Linux) http://www.jetbrains.com/idea/ ▶ Eclipse (Windows, Mac, Linux) http://www.eclipse.org/ ▶ SourceTree (Windows, Mac) http://www.sourcetreeapp.com/ ▶ SmartGit (Windows, Mac, Linux) http://www.syntevo.com/smartgithg/ ▶ Git Tower (Mac) http://www.git-tower.com/ ▶ TortoiseGit (Windows) https://code.google.com/p/tortoisegit/ Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 36 / 38
  • 37. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Enlaces de interés Enlaces de interés ▶ Git con calcetines http://danielkummer.github.io/git-flow-cheatsheet/ https://www.atlassian.com/git/tutorial/git-basics https://www.atlassian.com/git/workflows ▶ Successful Git Branching model http://nvie.com/posts/a-successful-git-branching-model/ ▶ Visual Git learning http://pcottle.github.io/learnGitBranching/ ▶ Github vs Bitbucket http://www.infoworld.com/d/application-development/ bitbucket-vs-github-which-project-host-has-the-most-22706 ▶ Git Android https://android.googlesource.com/ Nacho Álvarez (Redsys) Sistemas de control de versiones distribuidos 29 de enero de 2018 37 / 38