Control de versiones con Git

45
Control de Versiones con Git Daniel Salas Denegri

Transcript of Control de versiones con Git

Control de Versiones con GitDaniel Salas Denegri

Control de Versiones¿Qué es eso y por qué me debería importar?

El Problematesis.doc 1 Ene: creación del archivo

tesis.doc 12 Abr: modificaciones, eliminar contenido

30 Abr: corrección de algunos errorestesis.doc

tesis.doc 21 Ago: ajustes de formato

El Problematesis.doc 1 Ene: creación del archivo

tesis.doc 12 Abr: modificaciones, eliminar contenido

30 Abr: corrección de algunos errorestesis.doc

tesis.doc 21 Ago: ajustes de formato

2 Nov: necesito un texto eliminado anteriormente No tengo

copias pasadas

El Problemalogo.png 1 Ene: primer logo entregado

logo.png 12 Abr: primer cambio

30 Abr: segundo y tercer cambio

logo_nuevo.png

logo2.png

logo_ultimo.png

logo.png logo2.png

logo_ultimo.png

logo.png logo2.png

El Problemalogo.png 1 Ene: primer logo entregado

logo.png 12 Abr: primer cambio

30 Abr: segundo y tercer cambio

logo_nuevo.png

1 año después: Necesito modificar el logo

logo2.png

?¿Cuál es la última versión

logo_ultimo.png

logo.png logo2.png

logo_ultimo.png

logo.png logo2.png

Solucióntesis.doc

(v1)1 Ene: creación del archivo

tesis.doc(v2)

12 Abr: modificaciones, eliminar contenido

30 Abr: corrección de algunos errorestesis.doc(v3)tesis.doc

(v4)21 Ago: ajustes de formato

Sistemas de Control de Versiones (VCS) Es un sistema que registra los cambios

sobre un conjunto de archivos a lo largo del tiempo, de modo que puedan recuperarse.

Estos sistemas utilizan un almacenamiento especial (Repositorio) para cada archivo y cada modificación hecha por sus autores.

Ventajas del VCS Revertir archivos a un estado o versión

anterior Comparar cambios a lo largo del tiempo Ver quién es responsable de las

modificaciones Medio alternativo de backup del código

fuente Permite el desarrollo colaborativo

Tipos de VCS Local

Computadora

Repositorio

Archivo A

Tipos de VCS Centralizado

Computadora 1

Archivo A

Computadora 2

Archivo A

Servidor

Repositorio

Tipos de VCS Distribuido

Computadora 1

Archivo A

Computadora 2

Archivo A

Servidor

Repositorio

Repositorio

Repositorio

VCS más utilizados

Acerca de Git Sistema de control de versiones distribuido Gratuito, Open Source, multiplataforma Desarrollado por Linus Torvalds (el mismo

que creó Linux) Destaca por su rapidez y eficacia Soporta grandes proyectos (Ej. el Kernel de

Linux) Dispone de muchas herramientas y

servicios en la nube

¿Cómo funciona Git?

Versión 1 Versión 2 Versión 3 Versión 4 Versión 5

A

B

C

A1

C1 C2

A2

B1 B2

C3

En otros VCS cada versión es una copia de todo el proyecto

B

A1

B

C2

A2

B

A1

B

C2

A2

¿Cómo funciona Git?

Versión 1 Versión 2 Versión 3 Versión 4 Versión 5

A

B

C

A1

C1 C2

A2

B1 B2

C3

En otros VCS cada versión es una copia de todo el proyecto

En Git las versiones se vinculan a modificaciones de los archivos

¿Cómo funciona Git? Una vez instalado Git utiliza una serie de comandos

para realizar sus operaciones. También existen herramientas gráficas que facilitan su uso.

Podemos crear o copiar un repositorio en cualquier directorio o carpeta. El directorio seleccionado se le conoce como directorio de trabajo (Working Directory)

Cada archivo creado en el directorio de trabajo puede ser luego incluido en el repositorio.

El repositorio se encuentra en una carpeta oculta llamada .git dentro del directorio de trabajo..pero cuidado con manipular los archivos de ese directorio!!

Arquitectura de GitH

EA

D

commit 1

commit 2

commit 3

tree A

tree B

tree C

blob A2

blob B2

blob A1

blob B1

fileA.txt

fileA.txtfileB.txt

fileA.txtfileB.txt

Arquitectura de Git El contenido de cada archivo se almacena en el

repositorio en un objeto llamado Blob. Cuando el archivo se modifica, se crea un nuevo

Blob. Si dos o más archivos tienen el mismo contenido

(pero diferente nombre) utilizarán el mismo Blob. Similar a las carpetas, el repositorio utiliza los

objetos llamados Trees o ramas. Cada Tree lleva una lista de Blobs u otros Trees,

incluyendo los nombres de archivo.

Arquitectura de Git Cada vez que hay cambios en los archivos y

son guardados en el repositorio, se crea un objeto llamado Commit.

Un Commit representa un instante del conjunto de cambios ocurridos en el tiempo.

Un Commit hace referencia a un Tree que lleva al conjunto sub objetos Tree o Blob.

El commit que coincide con los archivos de trabajo actuales lleva un marcador llamado HEAD.

Creando Repositorios git init

Se crea un directorio .git sin objetos

git clone

Se copia el repositorio de origen

Se crea un directorio .git con los objetos copiados

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

A

UntrackedUnmodifie

dModified Staged

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

A

UntrackedUnmodifie

dModified Staged

add

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

A

UntrackedUnmodifie

dModified Staged

A

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

A

UntrackedUnmodifie

dModified Staged

A

commit

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A1

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A1

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A1

add

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A A1

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A A1

commit

Estados de los archivos

Working DirectoryStaging

AreaRepositor

y

UntrackedUnmodifie

dModified Staged

A A1

A2

Repositorios Remotos

Local

archivo

Remoto

RepositorioRepositorio push

pull

commit

Branching (ramificaciones)

master branches

commits

o A medida que se van agregando commits al repositorio, se genera una ramificación o cadena, la cual podemos identificar mediante un branch.

o Un branch es un puntero o marcador que se va moviendo en cada commit para marcarlo como el más reciente.

o La ramificación principal por lo general se le asigna como nombre de branch master.

Branching (ramificaciones)

branches

commits

master

o A medida que se van agregando commits al repositorio, se genera una ramificación o cadena, la cual podemos identificar mediante un branch.

o Un branch es un puntero o marcador que se va moviendo en cada commit para marcarlo como el más reciente.

o La ramificación principal por lo general se le asigna como nombre de branch master.

Branching (ramificaciones)

branches

commits

master

o A medida que se van agregando commits al repositorio, se genera una ramificación o cadena, la cual podemos identificar mediante un branch.

o Un branch es un puntero o marcador que se va moviendo en cada commit para marcarlo como el más reciente.

o La ramificación principal por lo general se le asigna como nombre de branch master.

Branching (ramificaciones)

branches

commits

master

Es posible que durante el trabajo que realicemos necesitemos crear una ramificación alterna (por ejemplo para correcciones o pruebas que pueden o no ser luego utilizadas)

Branching (ramificaciones)

bugfix

branches

commits

master

Git nos permite crear nuevos branch para no interferir con la ramificación principal. De esta manera podemos realizar modificaciones en ambas sin que uno interfiera con otro

Branching (ramificaciones)

bugfix

branches

commits

master

Git nos permite crear nuevos branch para no interferir con la ramificación principal. De esta manera podemos realizar modificaciones en ambas sin que uno interfiera con otro

Branching (ramificaciones)

bugfix

branches

commits

master

merge

Finalmente si ambas partes ya pueden complementarse podemos combinarlas. Esa operación también se conoce como merge.

Acerca de GitHub Servicio gratuito de

almacenamiento de código fuente en la nube

Fomenta la colaboración de proyectos abiertos

Dispone planes para proyectos privados

Dispone de herramientas como seguimiento de errores, wiki, etc.

Utilizado por varios proyectos en la Web

Software Git para Windows (msysgit)

code.google.com/p/msysgit

Tortoise Gitcode.google.com/p/tortoisegit

GitHub para Windowswindows.github.com

SmartGitwww.syntevo.com/smartgit

Servicios en la Nube GitHub

github.com

Bitbucketbitbucket.org

Google Codecode.google.com

CodePlexwww.codeplex.com