Control de versiones

35
2017 Control de versiones Joan Sebastián Ramírez Pérez

Transcript of Control de versiones

Page 1: Control de versiones

2017

Control de versionesJoan Sebastián Ramírez Pérez

Page 2: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 3: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 4: Control de versiones

Sistema de control de versiones

Page 5: Control de versiones

¿Qué es un sistema de control de versiones?✤ Sistema que registra los cambios realizados sobre un

archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante.

✤ Permite revertir archivos a un estado anterior, revertir el proyecto entero a un estado anterior, comparar cambios a lo largo del tiempo, ver quién modificó por última vez algo que puede estar causando un problema, quién introdujo un error y cuándo, entre otras cosas.

✤ Aplica para cualquier tipo de archivos, no necesariamente código fuente.

Page 6: Control de versiones

Repositorio

Lugar en el que se encuentran almacenados los archivos con sus respectivas versiones.

Page 7: Control de versiones

Copia de trabajo

Inicialmente es el directorio que se obtiene al hacer el check-out de un proyecto almacenado en un repositorio. La copia de trabajo contiene información para saber qué ficheros están sincronizados y cuáles no. También contiene los archivos que permiten mantener la sincronización con el repositorio.

Page 8: Control de versiones

Trunk

Contiene la última versión del proyecto que se está desarrollando, la versión común a todos los colaboradores.

Page 9: Control de versiones

Branch

Subdirectorio usado por cada colaborador para realizar sus cambios. Suele juntarse con otras versiones a través de merge.

Page 10: Control de versiones

Merge

Mecanismo usado para fusionar branches

Page 11: Control de versiones

Tag

Copias de seguridad (snapshots) del proyecto. A diferencia de los branches los tag no permiten modificar archivos.

Page 12: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 13: Control de versiones

Sistema de control de versiones locales✤ Un método usado por

muchos es copiar los archivos a otro directorio. Este enfoque es muy común porque es muy simple, pero también propenso a errores.

✤ Una de las herramientas de control de versiones más popular fue un sistema llamado rcs, que todavía podemos encontrar en muchos de los computadores actuales.

Page 14: Control de versiones

Sistema de control de versiones centralizados (Centralized Version Control Systems o CVCSs)

✤ Un único servidor que contiene todos los archivos versionados, y varios clientes que descargan los archivos desde ese lugar central

✤ Herramientas como CVS, Subversion, y Perforce

Page 15: Control de versiones
Page 16: Control de versiones

Sistema de control de versiones distribuidos (Distributed Version Control Systems o DVCSs)✤ Los clientes no sólo

descargan la última instantánea de los archivos, también replican completamente el repositorio. Así, si un servidor muere, y estos sistemas estaban colaborando a través de él, cualquiera de los repositorios de los clientes puede copiarse en el servidor para restaurarlo.

✤ Herramientas como Git, Mercurial, Bazaar o Darcs.

Page 17: Control de versiones
Page 18: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 19: Control de versiones

GIT✤ Nació en 2005

✤ Otros sistemas tienden a almacenar los datos como cambios de cada archivo respecto a una versión base.

✤ Git modela sus datos más como un conjunto de instantáneas de un mini sistema de archivos. Cada vez que confirmas un cambio, o guardas el estado de tu proyecto en Git, él básicamente hace una foto del aspecto de todos tus archivos en ese momento, y guarda una referencia a esa instantánea. 

Page 20: Control de versiones
Page 21: Control de versiones

Estados

Git tiene tres estados principales en los que se pueden encontrar tus archivos: confirmado (committed), modificado (modified), y preparado (staged).

✤ Confirmado: significa que los datos están almacenados de manera segura en tu base de datos local.

✤ Modificado: significa que has modificado el archivo pero todavía no lo has confirmado a tu base de datos.

✤ Preparado: significa que has marcado un archivo modificado en su versión actual para que vaya en tu próxima confirmación.

Page 22: Control de versiones

Secciones✤ El directorio de Git (Git directory): es

donde Git almacena los metadatos y la base de datos de objetos para tu proyecto. Es la parte más importante de Git, y es lo que se copia cuando clonas un repositorio desde otro ordenador.

✤ El directorio de trabajo (working directory): es una copia de una versión del proyecto. Estos archivos se sacan de la base de datos comprimida en el directorio de Git, y se colocan en disco para que los puedas usar o modificar.

✤ El área de preparación (staging area): es un sencillo archivo, generalmente contenido en tu directorio de Git, que almacena información acerca de lo que va a ir en tu próxima confirmación. A veces se le denomina índice, pero se está convirtiendo en estándar el referirse a ella como el área de preparación.

Page 23: Control de versiones

Comandos✤ git config –list: comprobar las configuraciones de Git del equipo

✤ git remote: muestra que repositorios remotos están configurados.

✤ git init: inicializa el repositorio. Crea un nuevo subdirectorio llamado .git que contiene todos los archivos necesarios del repositorio.

✤ git clone [url]: obtiene copia del repositorio de la URL

✤ git add [archivo]: agrega archivo para ser controlado

✤ git commit –m 'comentario': confirma los cambios y quedan con el comentario ingresado en el historico

✤ git status: identifica qué archivos se encuentran en que estados y da información sobre el branch actual

✤ git branch [nombre]: crea una rama

Page 24: Control de versiones

Comandos✤ git diff: compara lo que hay en tu directorio de trabajo con lo que hay en tu área

de preparación.

✤ git rm [archivo]: prepara la eliminación del archivo.

✤ git mv file_from file_to: renombra el archivo

✤ git log: histórico

✤ git checkout – [archivo]: devuelve el archivo a la versión del branch

✤ git fetch [remote-name]: recuperar datos del repositorio remoto.

✤ git push [nombre-remoto][nombre-rama]: sube cambios a repositorio remoto

✤ git tag -a v[versión] -m comentario': crea el tag o etiqueta

✤ git pull: para recuperar y unir automáticamente la rama remota con tu rama actual.

Page 25: Control de versiones

Usar Git gráfico

✤ SourceTree: https://www.sourcetreeapp.com/

✤ Git-cola: https://git-cola.github.io/

✤ Gitg: https://wiki.gnome.org/Apps/Gitg/

Page 26: Control de versiones

Ignorar archivos

✤ Para estos casos se crea un archivo llamado .gitignore, en el que se listan los patrones de nombres que deseas que sean ignorados.

✤ Por ejemplo:*.[oa]*~miArchivo.extensión

La primera excluye todos los archivos terminados en .a o .o, la segunda todos los que terminan en tilde y la tercera el archivo con nombre miArchivo.extensión

Page 27: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 28: Control de versiones

Ramas o branches propuestos por Git Flow✤ Master: se usa para tener la versión productiva

✤ Develop: se usa para integrar ramas y realizar regresiones

✤ Hotfix: estas ramas se usan para realizar ajustes a bugs que se encuentran sobre master. Se replican los cambios una vez son exitosos en master a develop.

✤ Features: branches usados para la creación de nuevas funcionalidades

✤ Releases: branches usados para paquetes que serán pasados a producción

Page 29: Control de versiones

https://namethattech.files.wordpress.com/2014/11/git-flow-updated.png

Page 30: Control de versiones

https://namethattech.files.wordpress.com/2014/11/git-flow-flipped.png?w=604&h=782

Page 31: Control de versiones
Page 32: Control de versiones
Page 33: Control de versiones
Page 34: Control de versiones

Agenda

1. ¿Qué es un sistema de control de versiones?

2. Clasificación de los sistemas de control de versiones

2.1. Sistema control de versiones locales

2.2. Sistema control de versiones centralizados

2.3. Sistema control de versiones distribuido

3. GIT

4. GIT Flow

5. Bibliografía

Page 35: Control de versiones

Bibliografía✤ Pro Git book [en línea]. <

https://git-scm.com/book/es/v1/Empezando-Acerca-del-control-de-versiones> [Consulta: 04 enero 2017].

✤ A successful Git branching model [en línea]. Vincent Driessen, 5 enero 2010. <http://nvie.com/posts/a-successful-git-branching-model/> [Consulta: 04 enero 2017].

✤ Conceptos de Subversion [en línea]. <http://www.fib.upc.edu/es/serveis/guies/subversion/conceptes.html> [Consulta: 04 enero 2017].

✤ <http://slideplayer.com/slide/9544583/> [Consulta: 04 enero 2017].