Introducción a GIT

44
Arquitectura del Software Escuela de Ingeniería Informática Universidad de Oviedo Arquitectura del Software Seminario: GIT Jose Emilio Labra Gayo 2014 Universidad de Oviedo ES Españo l

description

Introducción a GIT. Seminario para la asignatura Arquitectura del Software. Escuela Ingeniería Informática. Universidad de Oviedo

Transcript of Introducción a GIT

Page 1: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Arquitectura del SoftwareSeminario: GIT

Jose Emilio Labra Gayo

2014

Universidad de Oviedo

ESEspañol

Page 2: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Sistemas de control de versionesCentralizados

Un repositorio centralizado de todo el códigoEjemplos: CVS, Subversion,...

DistribuidosCada usuario tiene su propio repositorioEjemplos: mercurial, git, ...

Page 3: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Git

Diseñado por Linus Torvalds (Linux), 2005Objetivos:

Aplicaciones con gran nº de archivos de código

EficienciaTrabajo distribuido

Cada desarrollador tiene su propio repositorioCopia local de todo el historial de cambiosEs posible realizar commit's incluso sin conexión

Desarrollo no lineal (ramificaciones)

Page 4: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Componentes locales

3 componentes locales:Directorio de trabajo localÍndice: área de ensayo (stage). A veces también caché. Historial: Almacena versiones ó commits

HEAD (versión más reciente)

HistorialCommit

s

commitadd

rm

HEADDirectorio

trabajolocal

Índicestage area

Page 5: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Ramas

Git facilita gestión de ramas

master = rama inicialOperaciones:

Crear ramas (branch)Cambiar a ramas (checkout)Combinar (merge)Etiquetar (tag)

Múltiples estilos de ramificación

masterdevelop hotfix-1feature-1feature-2

0.1

1.0

0.2

tags

Ramas

Page 6: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Repositorios remotos

Directorio trabajolocal

HistorialCommit

s

Índicestage area

Repositorio remotoorigin

push

clonefetchpull

commitadd

rm

MáquinaLocal

HEAD

Se pueden conectar con repositorios remotosorigin = inicial

Page 7: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Funcionamiento básicoinitcloneconfigaddcommitstatuslogdiff

Page 8: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

init - Crear repositorios

git init Transforma el directorio actual en repositorio GitSe crea directorio .gitVariantes: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

Page 9: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

clone - Clonar repositorios

git clone <repo> Clonar el repositorio <repo> en la máquina local<repo> puede estar en una máquina remota

Ejemplo:git clone https://github.com/Arquisoft/ObservaTerra0.git

NOTA: Al igual que init, esta instrucción sólo se realiza una vez

Page 10: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

config - Configurar gitgit config --global user.name <name>

Declara el nombre de usuarioOtras opciones de configuración:

user.email, merge.tool, core.editor, ...Ficheros de configuración:

<repo>/.git/config -- Específicos de repositorio~/.git/config -- Globales

Page 11: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

add - Añadir al índicegit add <fichero>git add <dir>

Añade fichero o directorio al índice

Variantesgit add --all = Añade/borra ficheros

El índice ó área de ensayo almacena copias de los ficheros antes de ser incluidos en el historial

Page 12: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

commit - Añadir al historialgit commitgit commit -m "mensaje"

Añade los ficheros del índice al historialCrea una nueva instantánea "snapshot" del proyectoCada instantánea tiene un identificador SHA1

Puede recuperarse posteriormentePueden 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

Page 13: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

status - Observar índicegit status

Muestra ficheros staged, unstaged y untracked

staged = en índice pero no en historialunstaged = modificados pero no añadidos a índiceuntracked = en directorio de trabajo

Page 14: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

log - Observar historialgit log

Muestra historial de cambios

Variantesgit log --oneline Resumen en 1 líneagit log --stat Estadísticasgit log -p Camino completo con diffgit log --autor="expr" Commits de un autorgit log --grep="expr" Busca commits

git log --graph --decorate --onlineMuestra grafo de cambios

Page 15: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

diff - Mostrar diferencias

git diffDir. trabajo vs índice

git diff --cachedÍndice vs commit

git diff HEADDir. trabajo vs commit

Algunas pciones:--color-words--stat

Directorio trabajo HEA

D

Índice

git diff git diff --cached

git diff HEAD

Page 16: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Deshaciendo cambiosComandos para deshacer cambios

checkoutrevertresetclean

Page 17: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

checkout - Cambiar

Cambia directorio de trabajogit checkout <c> Cambiar a commit <c>

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

Page 18: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

revert - Recuperar

git revert <c> Recupera commit <c>

Añade la versión recuperada al historialOperación "segura"

permite rastrear cambios en historial

Page 19: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

reset - Deshacer

Deshacer cambiosOperación no segura

git reset Deshace cambios en índicegit reset --hard Deshace cambios en índice y directorio trabajogit reset <c> Deshacer cambios y recuperar commit <c>

NOTA: Es peligroso hacer reset en repositorios ya publicados

Es mejor utilizar revert

Page 20: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

clean - Limpiar

Borrar ficheros locales

git clean -f Borra ficheros untrackedNOTA: Peligroso (se pueden perder cambios locales)

git clean -n Muestra qué ficheros se borrarían

Page 21: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Ramasbranchcheckoutmerge

Page 22: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

branch - Ramas

Gestión de ramasgit branch Muestra las ramas existentesgit branch <r> Crear la rama <r>

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>

Page 23: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

checkout - Cambiar

Cambiar a una ramagit 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>

Page 24: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

merge - Combinar

Combinar dos ramasgit merge <r> Mezclar rama actual con <r>git merge --no-ff <r> Mezclar generando commit de mezcla (más seguro)

2 tipos de combinaciónMerge fast-forward3-way merge

Page 25: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

merge fast-forward

master

rAntesRama r desarrolladaEn rama master

Después degit merge master

Cuando hay camino lineal entre rama actual y rama a mezclar

master

r

Page 26: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

3 way merge

Cuando las ramas divergen y no se puede hacer fast-forward

Si aparecen conflictos:

Mostrar: git status Editar/corregirgit add .git commit

master

rAntesRama r desarrolladaEn rama master

Después degit merge r

master

r

Page 27: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Modificar historialcommit --amendrebasereflog

Page 28: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Commit -amend

Modificar un commitgit commit --amend

Permite añadir nuevos ficheros del índice al commit actual

NOTA: Se recomienda no hacerlo en commit's públicos

Page 29: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

rebase - Mover rama

git rebase <c> Mover rama actual a commit <c>

Permite que los cambios de una rama se basen en los cambios de otras ramas

master

ramarama

master

ramaramarama

master

git checkout ramagit rebase master

git checkout mastergit merge rama

NOTA: Se recomienda no hacer rebases sobre commits ya publicados

Page 30: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

rebase interactivo

git rebase -iControla qué commits se mantienen en el historial

Puede utilizarse para limpiar el historialAparece un editor con varas instrucciones:pick - utilizar commit tal cualreword - modificar mensaje de commitsquash - utilizar commit pero hacer que no se vea...

Page 31: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

reflog - movimientos en historialgit reflog

Muestra movimientos del historialgit 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

Page 32: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Repositorios remotosremotefetchpullpush

Page 33: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

remote - Conectar repositoriosgit remote

Ver repositorios externos

git remote add <nombre> <uri>Crear conexión de nombre <nombre> a <uri>

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

Page 34: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

fetch - traer

Traer elementos de repositorio remotoPermite descargar ramas externasOperación segura: no mezcla con ficheros locales

git fetch <remote>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ídaConvenio para nombrar ramas:

<remoto>/<rama>Ejemplo: origin/master

Page 35: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

pull - traer y mezclar

git pull <remoto>Trae un repositorio remoto y lo mezclaEquivale a:git fetch git merge FETCH_HEAD

Page 36: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

push - enviar

git push <remoto> <rama>Enviar commits de repositorio local a remotoVariantesgit push <remoto> --all

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 local2. Volver a enviar (push)

NOTA: También puede usarse opción: --force (no recomendado)

Page 37: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Herramientas Git

git - Línea de comandosgitk interfaz gráfico

Page 38: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

EGit - Entorno para Eclipse

Page 39: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

SourceTree

Page 40: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Tortoise Git

Se integra con explorador de Windows

Page 41: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Otras herramientas

http://git-scm.com/downloads/guis

Gestión de diferencias y mezclasp4mergekdiff

Page 42: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Github

Herramienta de codificación socialCompañía Github Inc. creada en 2008

2013: >3 millones de usuarios, >5millones proyectos

Gestión gratuita de proyectos de código abiertoProyectos públicos por defecto y gratis

Es posible tener proyectos privados pagando

Page 43: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Github

Facilidades como repositorio de proyectosGestión de issues/milestonesWikiSeguimiento de repositorios, usuarios, etc.

Pull RequestsSolicitar combinaciones y mezclasRevisiones de código

Permite incluir comentarios, ver diferencias, etc.

Gestión de listas de pull requests

Page 44: Introducción a GIT

Arquitectura del SoftwareE

scu

ela

de I

ngen

ierí

a I

nfo

rmáti

ca

Un

ivers

idad d

e

Ovi

edo

Referencias

Tutorialeshttp://rogerdudler.github.com/git-guide/https://www.atlassian.com/githttp://training.github.com/materials/slides/http://nvie.com/posts/a-successful-git-branching-model/

Vídeoshttp://vimeo.com/49444883