PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
Introducción a GIT
1. Universidad de Oviedo
Arquitectura del Software
Universidad de Oviedo
Arquitectura del Software
Escuela de Ingeniería Informática
Seminario: GIT
2014
Jose Emilio Labra Gayo
2. Universidad de Oviedo
Arquitectura del Software
Sistemas de control de versiones
Centralizados
Un repositorio centralizado de todo el código
Ejemplos: CVS, Subversion,...
Escuela de Ingeniería Informática
Distribuidos
Cada usuario tiene su propio repositorio
Ejemplos: mercurial, git, ...
3. Universidad de Oviedo
Arquitectura del Software
Git
Diseñado por Linus Torvalds (Linux), 2005
Objetivos:
Aplicaciones con gran nº de archivos de código
Eficiencia
Escuela de Ingeniería Informática
Trabajo distribuido
Cada desarrollador tiene su propio repositorio
Copia local de todo el historial de cambios
Es posible realizar commit's incluso sin conexión
Desarrollo no lineal (ramificaciones)
4. Universidad de Oviedo
Arquitectura del Software
Componentes locales
3 componentes locales:
Directorio de trabajo local
Índice: área de ensayo (stage). A veces también caché.
Historial: Almacena versiones ó commits
Escuela de Ingeniería Informática
HEAD (versión más reciente)
add
commit
rm
Directorio
trabajo
local
Índice
stage
area
HEAD
Historial
Commits
5. Universidad de Oviedo
Arquitectura del Software
Ramas
Ramas
feature-2 feature-1
Git facilita gestión de ramas
develop
hotfix-1 master
tags
0.1
master = rama inicial
Escuela de Ingeniería Informática
Operaciones:
Crear ramas (branch)
Cambiar a ramas (checkout)
Combinar (merge)
Etiquetar (tag)
Múltiples estilos de
ramificación
0.2
1.0
6. Universidad de Oviedo
Arquitectura del Software
Repositorios remotos
Se pueden conectar con repositorios remotos
origin = inicial
push
add
commit
Escuela de Ingeniería Informática
rm
Directorio
trabajo
local
Índice
stage
area
Máquina
Local
HEAD
Historial
Commits
clone
fetch
pull
Repositorio
remoto
origin
7. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
init
clone
config
add
commit
status
log
diff
8. Universidad de Oviedo
Arquitectura del Software
init - Crear repositorios
git init
Transforma el directorio actual en repositorio Git
Se crea directorio .git
Variantes:
Escuela de Ingeniería Informática
git init <directorio>
Crea un repositorio vacío en el directorio especificado
git init --bare <directorio>
Inicializa repositorio Git pero omite directorio de trabajo
NOTA: Normalmente, esta instrucción sólo se realiza una vez
9. Universidad de Oviedo
Arquitectura del Software
clone - Clonar repositorios
git clone <repo>
Clonar el repositorio <repo> en la máquina local
<repo> puede estar en una máquina remota
Ejemplo:
Escuela de Ingeniería Informática
git clone https://github.com/Arquisoft/ObservaTerra0.git
NOTA: Al igual que init, esta instrucción sólo se realiza una vez
10. Universidad de Oviedo
Arquitectura del Software
config - Configurar git
git config --global user.name <name>
Declara el nombre de usuario
Otras opciones de configuración:
user.email, merge.tool, core.editor, ...
Escuela de Ingeniería Informática
Ficheros de configuración:
<repo>/.git/config
~/.git/config
-- Específicos de repositorio
-- Globales
11. Universidad de Oviedo
Arquitectura del Software
add - Añadir al índice
git add <fichero>
git add <dir>
Añade fichero o directorio al índice
Escuela de Ingeniería Informática
Variantes
git add --all = Añade/borra ficheros
El índice ó área de ensayo almacena copias de los
ficheros antes de ser incluidos en el historial
12. Universidad de Oviedo
Arquitectura del Software
commit - Añadir al historial
git commit
git commit -m "mensaje"
Añade los ficheros del índice al historial
Escuela de Ingeniería Informática
Crea una nueva instantánea "snapshot" del proyecto
Cada instantánea tiene un identificador SHA1
Puede recuperarse posteriormente
Pueden asignarse etiquetas para facilitar su gestión
NOTA: Conviene excluir de control de versiones algunos ficheros
Ejemplos: binarios (*.class), temporales, configuración (.settings),
privados (claves de Bases de datos...), etc.
Se incluyen en fichero: .gitignore
13. Universidad de Oviedo
Arquitectura del Software
status - Observar índice
git status
Muestra ficheros staged, unstaged y untracked
Escuela de Ingeniería Informática
staged
= en índice pero no en historial
unstaged = modificados pero no añadidos a índice
untracked = en directorio de trabajo
14. Universidad de Oviedo
Arquitectura del Software
log - Observar historial
git log
Muestra historial de cambios
Escuela de Ingeniería Informática
Variantes
git
git
git
git
git
log
log
log
log
log
--oneline
--stat
-p
--autor="expr"
--grep="expr"
Resumen en 1 línea
Estadísticas
Camino completo con diff
Commits de un autor
Busca commits
git log --graph --decorate --online
Muestra grafo de cambios
15. Universidad de Oviedo
Arquitectura del Software
diff - Mostrar diferencias
git diff
Dir. trabajo vs índice
git diff --cached
git diff
git diff --cached
Índice vs commit
Escuela de Ingeniería Informática
git diff HEAD
Dir. trabajo vs commit
Algunas pciones:
--color-words
--stat
Directorio
trabajo
Índice
HEAD
git diff HEAD
16. Universidad de Oviedo
Arquitectura del Software
Escuela de Ingeniería Informática
Comandos para deshacer cambios
checkout
revert
reset
clean
17. Universidad de Oviedo
Arquitectura del Software
checkout - Cambiar
Cambia directorio de trabajo
git checkout <c>
Cambiar a commit <c>
Escuela de Ingeniería Informática
Se pasa a estado "detached HEAD"
git checkout <c> <f>
Recupera fichero <f> de commit <c>
NOTA:
checkout también se utiliza para cambiar a
diferentes ramas
18. Universidad de Oviedo
Arquitectura del Software
revert - Recuperar
git revert <c>
Recupera commit <c>
Añade la versión recuperada al historial
Operación "segura"
Escuela de Ingeniería Informática
permite rastrear cambios en historial
19. Universidad de Oviedo
Arquitectura del Software
reset - Deshacer
Deshacer cambios
Operación no segura
Escuela de Ingeniería Informática
git reset
git reset --hard
git reset <c>
Deshace cambios en índice
Deshace cambios en índice y
directorio trabajo
Deshacer cambios y recuperar
commit <c>
NOTA: Es peligroso hacer reset en repositorios ya publicados
Es mejor utilizar revert
20. Universidad de Oviedo
Arquitectura del Software
clean - Limpiar
Borrar ficheros locales
git clean -f Borra ficheros untracked
Escuela de Ingeniería Informática
NOTA: Peligroso (se pueden perder cambios locales)
git clean -n Muestra qué ficheros se borrarían
21. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
branch
checkout
merge
22. Universidad de Oviedo
Arquitectura del Software
branch - Ramas
Gestión de ramas
git branch
git branch <r>
Muestra las ramas existentes
Crear la rama <r>
Escuela de Ingeniería Informática
git branch -d <r> Borrar rama <r>
Segura (no borra si no hay mezclas pendientes)
git branch -D <r> Borrar rama <r>
Insegura (borra una rama y sus commits)
git branch -m <r> Renombrar rama actual a <r>
23. Universidad de Oviedo
Arquitectura del Software
checkout - Cambiar
Cambiar a una rama
Escuela de Ingeniería Informática
git checkout <r>
Cambia a la rama existente <r>
git checkout master
Cambia a rama master
git checkout -b <r>
Crear rama <r> y cambia a ella
Equivalente a
git branch <r>
git checkout <r>
24. Universidad de Oviedo
Arquitectura del Software
merge - Combinar
Combinar dos ramas
Escuela de Ingeniería Informática
git merge <r>
Mezclar rama actual con <r>
git merge --no-ff <r> Mezclar generando commit
de mezcla (más seguro)
2 tipos de combinación
Merge fast-forward
3-way merge
25. Universidad de Oviedo
Arquitectura del Software
merge fast-forward
Cuando hay camino
lineal entre rama actual
y rama a mezclar
Antes
Rama r desarrollada
En rama master
r
Escuela de Ingeniería Informática
master
Después de
git merge master
r
master
26. Universidad de Oviedo
Arquitectura del Software
3 way merge
Cuando las ramas
divergen y no se puede
hacer fast-forward
Antes
Rama r desarrollada
En rama master
master
Escuela de Ingeniería Informática
Si aparecen conflictos:
Mostrar: git status
Editar/corregir
git add .
git commit
r
Después de
git merge r
r
master
27. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
commit --amend
rebase
reflog
28. Universidad de Oviedo
Arquitectura del Software
Commit -amend
Modificar un commit
git commit --amend
Escuela de Ingeniería Informática
Permite añadir nuevos ficheros del índice al
commit actual
NOTA: Se recomienda no hacerlo en commit's públicos
29. Universidad de Oviedo
Arquitectura del Software
rama
rama
rebase - Mover rama
master
git rebase <c> Mover rama actual a commit <c>
Permite que los cambios de una rama se basen en los
cambios de otras ramas
Escuela de Ingeniería Informática
rama
rama
git checkout rama
git rebase master
git checkout master
git merge rama
master
master
NOTA: Se recomienda no hacer rebases
sobre commits ya publicados
30. Universidad de Oviedo
Arquitectura del Software
rebase interactivo
git rebase -i
Controla qué commits se mantienen en el historial
Escuela de Ingeniería Informática
Puede utilizarse para limpiar el historial
Aparece un editor con varas instrucciones:
pick - utilizar commit tal cual
reword - modificar mensaje de commit
squash - utilizar commit pero hacer que no se vea
...
31. Universidad de Oviedo
Arquitectura del Software
reflog - movimientos en historial
git reflog
Muestra movimientos del historial
Escuela de Ingeniería Informática
git almacena información de todos los movimientos
que se producen en las diferentes ramas
git reflog muestra los cambios aunque ya no estén en
ninguna rama
32. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
remote
fetch
pull
push
33. Universidad de Oviedo
Arquitectura del Software
remote - Conectar repositorios
git remote
Ver repositorios externos
git remote add <nombre> <uri>
Crear conexión de nombre <nombre> a <uri>
Escuela de Ingeniería Informática
git remote rm <nombre>
Borrar conexión <nombre>
git rename <anterior> <nuevo>
Renombrar conexión <anterior> a <nuevo>
NOTAS: git clone crea automáticamente una conexión llamada origin
Es posible tener conexiones a más de un repositorio externo
34. Universidad de Oviedo
Arquitectura del Software
fetch - traer
Traer elementos de repositorio remoto
Permite descargar ramas externas
Operación segura: no mezcla con ficheros locales
git fetch <remote>
Escuela de Ingeniería Informática
Descargar todas las ramas del repositorio <remote>
git fetch <remote> <rama>
Descargar la rama <rama> de repositorio <remote>
NOTA: Asigna FETCH_HEAD a cabeza de rama traída
Convenio para nombrar ramas: <remoto>/<rama>
Ejemplo: origin/master
35. Universidad de Oviedo
Arquitectura del Software
pull - traer y mezclar
git pull <remoto>
Trae un repositorio remoto y lo mezcla
Equivale a:
Escuela de Ingeniería Informática
git fetch
git merge FETCH_HEAD
36. Universidad de Oviedo
Arquitectura del Software
push - enviar
git push <remoto> <rama>
Enviar commits de repositorio local a remoto
Variantes
git push <remoto> --all
Escuela de Ingeniería Informática
Enviar todas las ramas
Si hay cambios en repositorio remoto, muestra un error (non-fast-forward).
Solución:
1. Traer (pull) cambios y mezclar con repositorio local
2. Volver a enviar (push)
NOTA: También puede usarse opción: --force (no recomendado)
37. Universidad de Oviedo
Arquitectura del Software
Herramientas Git
Escuela de Ingeniería Informática
git - Línea de comandos
gitk interfaz gráfico
38. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
EGit - Entorno para Eclipse
39. Escuela de Ingeniería Informática
Universidad de Oviedo
Arquitectura del Software
SourceTree
41. Universidad de Oviedo
Arquitectura del Software
Otras herramientas
http://git-scm.com/downloads/guis
Gestión de diferencias y mezclas
Escuela de Ingeniería Informática
p4merge
kdiff
42. Universidad de Oviedo
Arquitectura del Software
Github
Herramienta de codificación social
Compañía Github Inc. creada en 2008
2013: >3 millones de usuarios, >5millones proyectos
Escuela de Ingeniería Informática
Gestión gratuita de proyectos de código abierto
Proyectos públicos por defecto y gratis
Es posible tener proyectos privados pagando
43. Universidad de Oviedo
Arquitectura del Software
Github
Facilidades como repositorio de proyectos
Gestión de issues/milestones
Wiki
Seguimiento de repositorios, usuarios, etc.
Escuela de Ingeniería Informática
Pull Requests
Solicitar combinaciones y mezclas
Revisiones de código
Permite incluir comentarios, ver diferencias, etc.
Gestión de listas de pull requests
44. Universidad de Oviedo
Arquitectura del Software
Referencias
Tutoriales
Escuela de Ingeniería Informática
http://rogerdudler.github.com/git-guide/
https://www.atlassian.com/git
http://training.github.com/materials/slides/
http://nvie.com/posts/a-successful-git-branchingmodel/
Vídeos
http://vimeo.com/49444883