SlideShare una empresa de Scribd logo
1 de 41
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

16 de enero de 2014

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

1 / 41
Í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
.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

2 / 41
Acerca de mí

. Who?

▶

Trayectoria profesional: soporte UCO, desarrollador Web,
desarrollador / integrador distribuciones GNU/Linux.

▶

Actualmente: WUL4 Córdoba (mobile + backend developer)

▶

Involucrado en:

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

3 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

4 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

5 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

6 / 41
¿Por qué GIT?

. ¿Por qué GIT?

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

7 / 41
¿Por qué GIT?

. ¿Por qué GIT?

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

8 / 41
¿Por qué GIT?

. En números

▶
▶
▶
▶

▶
▶
▶

Enfocado a código privado (Facebook, Adobe, Opera, WUL4...)
Más de 1 millón de usuarios registrados
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: 0-5 (gratis), 6-10
($10 month), 11-25 ($25 month), 26-50 ($50 month)...

Enfocado a código abierto (bootstrap, nodejs, jquery, Amazon...)
Más de 5 millones de usuarios registrados y 10 millones de
repositorios creados
Se cobra por repositorios privados: 5 ($7 month), 10 ($12 month),
20 ($22 month), 50 ($50 month)
.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

9 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

10 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

11 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

12 / 41
Flujo de trabajo en GIT

. Flujo de trabajo en GIT

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

13 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

14 / 41
Flujo de trabajo en GIT

. Etapas de un fichero (I)
. Archivos sin seguimiento
.
2 Cambios no preparados para el commit
.
3 Cambios para hacer commit
1

# 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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

15 / 41
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 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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

16 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

17 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

18 / 41
Demo

. Demo

▶
▶
▶
▶
▶
▶

Crearemos nuestro propio repositorio Git en Bitbucket
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

19 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

20 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

21 / 41
Más funcionalidades útiles

. Más funcionalidades útiles

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

22 / 41
Más funcionalidades útiles

. pull
Utilizándolo sin ningún parámetro adicional -git pull origin masterfunciona 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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

23 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

24 / 41
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 directorio
modificado:

bibliografia.bib

$ git update-index --assume-unchanged bibliografia.bib
$ git status
# En la rama master
nothing to commit, working directory clean
Nacho Álvarez (WUL4)

.

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

25 / 41
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 master. Ejemplo
pack commits: git revert master~2..master
.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

26 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

27 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

28 / 41
Algo más avanzado

. Algo más avanzado

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

29 / 41
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
stash@{0}:
stash@{1}:
stash@{2}:

list
WIP on master: 049d078 added the index file
WIP on master: c264051... Revert added file_size
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

30 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

31 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

32 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

33 / 41
Algo más avanzado

. reflog
▶

Con git log vemos todos los commits realizados (historia)

▶

git reflog nos permite revisar todas las acciones realizadas

▶

Se puede utilizar para recuperar commits o ramas perdidas al utilizar
git reset

▶

Los commits reseteados están disponibles durante 30 días, y los
normales, durante 90 días
neonigma@hyperion: /things/taller-git$ git reflog
abec02f HEAD@0: merge foo: Merge made by recursive.
9bdbd83 HEAD@1: 9bdbd83: updating HEAD
2d90ece HEAD@2: merge foo: Fast-forward
9bdbd83 HEAD@3: checkout: moving from foo to master
2d90ece HEAD@4: commit: hello
9bdbd83 HEAD@5: checkout: moving from master to foo

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

34 / 41
Algo más avanzado

. submodules
▶

submodules permite linkar un repositorio dentro de otro

▶

Es una funcionalidad amada y odiada a partes iguales, por sus fuertes
ventajas y desventajas

▶

Otras alternativas pasan por usar subtree, gitslave o repo

▶

Submodules es usado por:

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

35 / 41
Algo más avanzado

. submodules
▶

Añadir un repositorio git como submódulo
git submodule add [-b master]
git@bitbucket.org:jialvarez/testproject.git
git commit -m “Añadimos submódulo testproject”
git push <remote> <branch>

▶
▶
▶

A partir de aquí el trabajo con el submódulo sería de manera normal,
como un repositorio git cualquiera
Tras actualizar el submódulo (add + commit + push), debemos
actualizar también la referencia del padre de la misma manera
¡¡¡¡¡¡CUIDADO!!!!!!
Si hacemos push en el proyecto padre y no en el proyecto hijo, el
siguiente que haga un clone del proyecto, no podrá descargarse todo el
código al faltarle referencias
Si no pusheamos el hijo y hacemos un par de commits, y luego
tratamos de actualizar el padre con git submodule update, dejamos al
hijo en DETACHED mode (sin ramas)
.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

36 / 41
Algo más avanzado

. submodules
▶

Descargar / actualizar repositorio conteniendo submódulos
git clone git@bitbucket.org:jialvarez/testproject.git
git submodule init
git submodule update

▶
▶

Para hacer un barrido por todos los módulos y actualizarlos:
git submodule foreach git pull origin master
Para borrar un submódulo:
Se eliminan sus líneas de configuración del fichero .gitmodules
Se eliminan sus líneas de configuración del fichero .git/config
Se ejecuta: git rm --cached <path/to/submodule>

▶

submodules es parte del core de git y está disponible para todos los
SO y bien integrado en GUIs

.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

37 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

38 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

39 / 41
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 (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

40 / 41
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-227061

▶

Git Android
https://github.com/android
https://android.googlesource.com/
.

Nacho Álvarez (WUL4)

Sistemas de control de versiones distribuidos

.

.

.

.

16 de enero de 2014

.

41 / 41

Más contenido relacionado

Similar a WUL4 Training Thursday #2 Sistemas de control de versiones distribuidos: GIT

Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...José Ignacio Álvarez Ruiz
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con gitEudris Cabrera
 
[ES] Control de versiones con subversion
[ES] Control de versiones con  subversion[ES] Control de versiones con  subversion
[ES] Control de versiones con subversionEudris Cabrera
 
Resumen investigación tesina gnu linux
Resumen investigación tesina gnu linuxResumen investigación tesina gnu linux
Resumen investigación tesina gnu linuxcrosbycarbajal
 
[ES] Sistemas de control de versiones
[ES] Sistemas de control de versiones[ES] Sistemas de control de versiones
[ES] Sistemas de control de versionesEudris Cabrera
 
Administracion de datos
Administracion de datosAdministracion de datos
Administracion de datosUsein Gonzalez
 
Administracion de-redes-gnu-linux
Administracion de-redes-gnu-linuxAdministracion de-redes-gnu-linux
Administracion de-redes-gnu-linuxchen1
 
Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Noe Cubillas
 
Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Diego Caceres
 
Git para no gitters
Git para no gittersGit para no gitters
Git para no gittersRojomorgan
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Ernesto Crespo
 

Similar a WUL4 Training Thursday #2 Sistemas de control de versiones distribuidos: GIT (20)

Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
Sistemas de control de versiones distribuidos: Controla las versiones de tu t...
 
Uf2216 04-git
Uf2216 04-gitUf2216 04-git
Uf2216 04-git
 
Control de versiones con git
Control de versiones con gitControl de versiones con git
Control de versiones con git
 
ATICA DevOps
ATICA DevOpsATICA DevOps
ATICA DevOps
 
[ES] Control de versiones con subversion
[ES] Control de versiones con  subversion[ES] Control de versiones con  subversion
[ES] Control de versiones con subversion
 
wincvs11es.pdf
wincvs11es.pdfwincvs11es.pdf
wincvs11es.pdf
 
Resumen investigación tesina gnu linux
Resumen investigación tesina gnu linuxResumen investigación tesina gnu linux
Resumen investigación tesina gnu linux
 
[ES] Sistemas de control de versiones
[ES] Sistemas de control de versiones[ES] Sistemas de control de versiones
[ES] Sistemas de control de versiones
 
Administracion de datos
Administracion de datosAdministracion de datos
Administracion de datos
 
aula-con-tcos
aula-con-tcosaula-con-tcos
aula-con-tcos
 
Administracion de-redes-gnu-linux
Administracion de-redes-gnu-linuxAdministracion de-redes-gnu-linux
Administracion de-redes-gnu-linux
 
Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011
 
Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011Libro seguridad-gnu-linux-antonio-perpinan-2011
Libro seguridad-gnu-linux-antonio-perpinan-2011
 
Plantilla fase2
Plantilla fase2Plantilla fase2
Plantilla fase2
 
Tema 1 Control de Versiones
Tema 1 Control de VersionesTema 1 Control de Versiones
Tema 1 Control de Versiones
 
¿Qué es Software Libre? - v4.0
¿Qué es Software Libre? - v4.0¿Qué es Software Libre? - v4.0
¿Qué es Software Libre? - v4.0
 
Git para no gitters
Git para no gittersGit para no gitters
Git para no gitters
 
Atix30
Atix30Atix30
Atix30
 
Git Flow y GitOps
Git Flow y GitOpsGit Flow y GitOps
Git Flow y GitOps
 
Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima Gestión de configuración distribuída para la plataforma de Canaima
Gestión de configuración distribuída para la plataforma de Canaima
 

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
 
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 (9)

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
 
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

El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 

Último (20)

El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 

WUL4 Training Thursday #2 Sistemas de control de versiones distribuidos: GIT

  • 1. . Sistemas de control de versiones distribuidos . Controla las versiones de tu trabajo con GIT Nacho Álvarez  @neonigmacdb  neonigma@gmail.com 16 de enero de 2014 . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 1 / 41
  • 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 . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 2 / 41
  • 3. Acerca de mí . Who? ▶ Trayectoria profesional: soporte UCO, desarrollador Web, desarrollador / integrador distribuciones GNU/Linux. ▶ Actualmente: WUL4 Córdoba (mobile + backend developer) ▶ Involucrado en: . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 3 / 41
  • 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 4 / 41
  • 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 5 / 41
  • 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 6 / 41
  • 7. ¿Por qué GIT? . ¿Por qué GIT? . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 7 / 41
  • 8. ¿Por qué GIT? . ¿Por qué GIT? . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 8 / 41
  • 9. ¿Por qué GIT? . En números ▶ ▶ ▶ ▶ ▶ ▶ ▶ Enfocado a código privado (Facebook, Adobe, Opera, WUL4...) Más de 1 millón de usuarios registrados 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: 0-5 (gratis), 6-10 ($10 month), 11-25 ($25 month), 26-50 ($50 month)... Enfocado a código abierto (bootstrap, nodejs, jquery, Amazon...) Más de 5 millones de usuarios registrados y 10 millones de repositorios creados Se cobra por repositorios privados: 5 ($7 month), 10 ($12 month), 20 ($22 month), 50 ($50 month) . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 9 / 41
  • 10. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 10 / 41
  • 11. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 11 / 41
  • 12. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 12 / 41
  • 13. Flujo de trabajo en GIT . Flujo de trabajo en GIT . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 13 / 41
  • 14. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 14 / 41
  • 15. Flujo de trabajo en GIT . Etapas de un fichero (I) . Archivos sin seguimiento . 2 Cambios no preparados para el commit . 3 Cambios para hacer commit 1 # 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 15 / 41
  • 16. 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 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 16 / 41
  • 17. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 17 / 41
  • 18. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 18 / 41
  • 19. Demo . Demo ▶ ▶ ▶ ▶ ▶ ▶ Crearemos nuestro propio repositorio Git en Bitbucket 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 19 / 41
  • 20. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 20 / 41
  • 21. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 21 / 41
  • 22. Más funcionalidades útiles . Más funcionalidades útiles . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 22 / 41
  • 23. Más funcionalidades útiles . pull Utilizándolo sin ningún parámetro adicional -git pull origin masterfunciona 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 23 / 41
  • 24. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 24 / 41
  • 25. 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 directorio modificado: bibliografia.bib $ git update-index --assume-unchanged bibliografia.bib $ git status # En la rama master nothing to commit, working directory clean Nacho Álvarez (WUL4) . Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 25 / 41
  • 26. 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 master. Ejemplo pack commits: git revert master~2..master . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 26 / 41
  • 27. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 27 / 41
  • 28. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 28 / 41
  • 29. Algo más avanzado . Algo más avanzado . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 29 / 41
  • 30. 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 stash@{0}: stash@{1}: stash@{2}: list WIP on master: 049d078 added the index file WIP on master: c264051... Revert added file_size 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 30 / 41
  • 31. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 31 / 41
  • 32. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 32 / 41
  • 33. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 33 / 41
  • 34. Algo más avanzado . reflog ▶ Con git log vemos todos los commits realizados (historia) ▶ git reflog nos permite revisar todas las acciones realizadas ▶ Se puede utilizar para recuperar commits o ramas perdidas al utilizar git reset ▶ Los commits reseteados están disponibles durante 30 días, y los normales, durante 90 días neonigma@hyperion: /things/taller-git$ git reflog abec02f HEAD@0: merge foo: Merge made by recursive. 9bdbd83 HEAD@1: 9bdbd83: updating HEAD 2d90ece HEAD@2: merge foo: Fast-forward 9bdbd83 HEAD@3: checkout: moving from foo to master 2d90ece HEAD@4: commit: hello 9bdbd83 HEAD@5: checkout: moving from master to foo . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 34 / 41
  • 35. Algo más avanzado . submodules ▶ submodules permite linkar un repositorio dentro de otro ▶ Es una funcionalidad amada y odiada a partes iguales, por sus fuertes ventajas y desventajas ▶ Otras alternativas pasan por usar subtree, gitslave o repo ▶ Submodules es usado por: . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 35 / 41
  • 36. Algo más avanzado . submodules ▶ Añadir un repositorio git como submódulo git submodule add [-b master] git@bitbucket.org:jialvarez/testproject.git git commit -m “Añadimos submódulo testproject” git push <remote> <branch> ▶ ▶ ▶ A partir de aquí el trabajo con el submódulo sería de manera normal, como un repositorio git cualquiera Tras actualizar el submódulo (add + commit + push), debemos actualizar también la referencia del padre de la misma manera ¡¡¡¡¡¡CUIDADO!!!!!! Si hacemos push en el proyecto padre y no en el proyecto hijo, el siguiente que haga un clone del proyecto, no podrá descargarse todo el código al faltarle referencias Si no pusheamos el hijo y hacemos un par de commits, y luego tratamos de actualizar el padre con git submodule update, dejamos al hijo en DETACHED mode (sin ramas) . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 36 / 41
  • 37. Algo más avanzado . submodules ▶ Descargar / actualizar repositorio conteniendo submódulos git clone git@bitbucket.org:jialvarez/testproject.git git submodule init git submodule update ▶ ▶ Para hacer un barrido por todos los módulos y actualizarlos: git submodule foreach git pull origin master Para borrar un submódulo: Se eliminan sus líneas de configuración del fichero .gitmodules Se eliminan sus líneas de configuración del fichero .git/config Se ejecuta: git rm --cached <path/to/submodule> ▶ submodules es parte del core de git y está disponible para todos los SO y bien integrado en GUIs . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 37 / 41
  • 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 38 / 41
  • 39. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 39 / 41
  • 40. 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 (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 40 / 41
  • 41. 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-227061 ▶ Git Android https://github.com/android https://android.googlesource.com/ . Nacho Álvarez (WUL4) Sistemas de control de versiones distribuidos . . . . 16 de enero de 2014 . 41 / 41