You are on page 1of 42

Taller de Metodologías

Ágiles
para la Gestión y Desarrollo
de Proyectos de Software
Uzi Mamani Fernández
Software Craftman
Agile Evangelist & Practitioner

about.me/uzigula
@uzigula
theagileroad.blogspot.com

Guino Henostroza Macedo


Consultant
ALM & Agile Practitioner

about.me/guino
@guino
guino.me
Control de
Versiones
Taller de Metodologías Ágiles - Gestión de
Uzi Mamani / Guino Henostroza 3
Proyectos
Introducción

Taller de Metodologías Ágiles - Gestión de


Uzi Mamani / Guino Henostroza 4
Proyectos
Importancia de un Control de Versiones
• Síntomas que denotan la falta de un control de
versiones efectivo:
– Se colocan versiones a los nombres de los archivos o carpetas
manualmente
– Las actualizaciones son comunicadas vía correo electrónico
(adjuntando un .zip con la nueva versión)
– Se realizan las actualizaciones directamente en el servidor de
producción
– Accidentalmente se sobre-escriben algunos archivos los
cuales no vuelven a ser recuperados
– Al realizar la presentación de un producto, este muestra
funcionalidad incompleta aun cuando esta ya había sido
implementada
Taller de Metodologías Ágiles - Gestión de Proyectos
Actividad
• Enumere una lista de problemas que haya tenido
usted o su equipo debido a la falta de un
adecuado control de versions.

Taller de Metodologías Ágiles - Gestión de Proyectos


Importancia de un Control de Versiones
• Un adecuado manejo del control de versiones permite:
– Trabajar con nombres de archivos y estructuras de directorio consistentes
para todos los miembros del equipo.
– Hacer cambios con confianza, e incluso revertir, cuando sea necesario.
– Confiar en un control de código fuente como el medio de comunicación para
su equipo.
– Desplegar fácilmente diferentes versiones de su código a servidores de
pruebas o de producción.
– Saber quien hizo un cambio, que cambió y cuando sucedió.

Taller de Metodologías Ágiles - Gestión de Proyectos


Sistema de Control de Versiones (VCS)
• Un sistema de control de versiones es una pieza de software que
ayuda a los desarrolladores en un trabajo en equipo juntos y también
archiva una historia completa de su trabajo.
• Objetivos básicos de un Sistema de Control de Versiones
1. Que las personas puedan trabajar simultáneamente, no serialmente
Maximizar la concurrencia, evitar los bloqueos.
2. Cuando las personas están trabajando al mismo tiempo, que sus cambios no hagan
conflicto con el trabajo de otros
Evitar que se sobre-escriban cambios
3. Que se registre cada versión de todo lo que ha existido – siempre
Y quien lo hizo, y cuando y porque.
Taller de Metodologías Ágiles - Gestión de Proyectos
Sistema de Control de Versiones (VCS)
• Un control de Versiones utiliza un repositorio (una
base de datos de cambios) y una copia de trabajo
(donde realizar su trabajo)
• La copia de trabajo es la copia personal de todos
los archivos en el Proyecto. Los cambios luego se
confirman en un repositorio

Taller de Metodologías Ágiles - Gestión de Proyectos


Generaciones de Sistemas de Control de Versiones

* Understanding Version-Control Systems (DRAFT) - Eric Raymond

Taller de Metodologías Ágiles - Gestión de Proyectos


Centralizado vs Distribuido
• En un control de versiones centralizado existe solo un repositorio, y en
un control de versiones distribuido existen múltiples repositorios

Centralizado (Cliente-Servidor) Distribuido

Taller de Metodologías Ágiles - Gestión de Proyectos


Control de Versiones Centralizado
• En un control de versiones centralizado,
cada usuario tiene su propia copia de
trabajo, pero sólo hay un repositorio
central. Para que otros puedan ver sus
cambios, 2 cosas deben suceder: Usted
hace ‘commit’ y Ellos actualizan

Taller de Metodologías Ágiles - Gestión de Proyectos


Control de Versiones Centralizado
• Ventajas de un VCS Centralizado
– Relativamente fácil de configurar
– Cada desarrollador sabe en cierto nivel, que hicieron los otros
– Permite al administrador controlar el flujo (quien hace que)
• Desventajas e un VCS Centralizado
– Si el servidor principal se cae, los desarrolladores no pueden guarder cambios
versionados (unico punto de fallo)
– Los ‘commits’ remotos son lentos
– Los cambios no solicitados pueden arruinar el desarrollo
– Si el disco duro de la base de datos central se corrompe, toda la historia podria
perderse Taller de Metodologías Ágiles - Gestión de Proyectos
Control de Versiones Distribuido
• En el control de versiones
distribuido, cada usuario obtiene su
propio repositorio y copia de trabajo.
Para que otros vean sus cambios, 4
cosas deben suceder: Usted hace
‘commit’, usted hace ‘push’, ellos
hacen ‘pull’, Ellos actualizan

Taller de Metodologías Ágiles - Gestión de Proyectos


Control de Versiones Distribuido
• Ventajas de un VCS Distribuido
– Usted realiza confirmaciones locales. Se dispone de la historia complete
– No necesita acceder a un servidor remoto lo que hace el trabajo mas rápido
– Puede colocar (push) sus cambios continuamente
– Bueno para proyectos con desarrolladores off-shore ya que ellos tienen sus propios repositorios
• Desventajas e un VCS Distribuido
– Puede no ser tan obvio quien hizo el cambio mas reciente
– El bloqueo de archivos no permite a distintos desarrolladores trabajar en la misma pieza de
código simultáneamente. Ayuda a evitar conflictos de merge pero hace mas lento el desarrollo.
– Permite clonar el repositorio lo que puede hacer que un código fuente sea ‘robado’ si un
programador no deseado se apodera de el.

Taller de Metodologías Ágiles - Gestión de Proyectos


Control de
Versiones
Centralizado
Taller de Metodologías Ágiles - Gestión de
Uzi Mamani / Guino Henostroza 16
Proyectos
Create (Crear)
• Crea un repositorio nuevo, vacío
• Un repositorio contiene historia
– Un Sistema de archivos tiene 2-
dimensiones: Su espacio se define por
carpetas y archivos
– Un Repositorio tiene 3-dimensiones: Es
una secuencia continua definida por
carpetas, archivos y tiempo

Taller de Metodologías Ágiles - Gestión de Proyectos


Checkout
• Crea una copia de trabajo
• Se utiliza cuando necesita hacer una nueva copia de
trabajo para un repositorio que ya existe
• Una copia de trabajo es una instantanea del repositorio,
usado por un desarrollador como un lugar para hacer
cambios.
• El repositorio es compartido por todo el equipo, pero las LOOP:
10 Make a working copy of the
personas no pueden modificarlo directamente. En lugar contents of the repository
20 Modify the working copy.
de ello cada desarrollador trabaja usando una copia de 30 Modify the repository to
incorporate those modifications
trabajo, el cual le proporciona un espacio de trabajo 40 GOTO 20
privado donde puede realizer su trabajo aislado del resto
del equipo
Taller de Metodologías Ágiles - Gestión de Proyectos
Commit (Check-in)
• Aplica las modificaciones en la copia de trabajo
hacia el repositorio creando un nuevo
conjunto de cambios (changeset)
– Todo el trabajo que se realiza en la Copia de Trabajo se
agrega a la lista de “Conjunto de Cambios Pendientes’. La
operación “Commit” toma el conjunto de cambios
pendiente y lo usa para crear una nueva versión del árbol
en el repositorio
– Las herramientas modernas realizan esto en forma
atómica
– Es usual proveer de un comentario cuando hace
‘commit”

Taller de Metodologías Ágiles - Gestión de Proyectos


Update
• Actualiza la copia de trabajo con
respecto al repositorio
– Aplica los cambios del repositorio hacia la copia
de trabajo mezclándolos con cualquier cambio
que haya hecho en la copia de trabajo si es
necesario.
– Es lo inverso de ‘commit”. Commit lleva la copia
de trabajo hacia el repositorio. Update va en la
otra direccion

Taller de Metodologías Ágiles - Gestión de Proyectos


Add
• Añade un archivo o directorio
– Utilice la operación “Add” cuando tiene un archivo o directorio en su copia de
trabajo que no esta aun bajo del control de versiones y desea agregarlo al
repositorio.
– El elemento no es agregado inmediatamente. En lugar de ello, el elemento
forma parte del conjunto de cambios pendientes, y es agregado al repositorio
cuando haga Commit

Taller de Metodologías Ágiles - Gestión de Proyectos


Edit
• Modifica un archivo
– Cuando edita un archivo usando un
editor de textos o entorno de
desarrollo el VCS notara el cambio y
hará al archivo modificado parte del
conjunto de cambios pendientes.
– Algunas herramientas de control de
versiones establecen el flag read-
only en el file system a todos los
archivos en la copia de trabajo.
Luego cuando notifica al VCS que
quiere modifcar el archivo, hace la
copia de trabajo de dicho archivo
como “writable”
Taller de Metodologías Ágiles - Gestión de Proyectos
Delete
• Elimina un archivo o directorio
– Se utiliza cuando quiere remover un archive o directorio del repositorio.
– Típicamente la eliminación del archivo en la copia de trabajo es agregada al conjunto de
cambios pendientes.
– El archivo no es realmente eliminado del repositorio. Cuando hace ‘commit’ a un conjunto de
cambios que contiene un eliminado, esta creando una nueva versión del árbol que no contiene
el archivo eliminado. La versión previa del árbol aun contiene al archivo.

Taller de Metodologías Ágiles - Gestión de Proyectos


Rename
• Renombra un archivo o directorio
• Se usa cuando quiere cambiar el nombre de un archivo o directorio. La operación es
agregada al conjunto de cambios pendiente, pero el elemento en la copia local se
renombra inmediatamente
• Algunas herramientas antiguas no soportan renombrar del todo. Otras tratan el
nombre de un archivo o directorio simplemente como uno de sus atributos, sujeto
a cambio en el tiempo

Taller de Metodologías Ágiles - Gestión de Proyectos


Move
• Mover un archivo o directorio
– Utilice la operación “Move” cuando quiera mover un archive o
directorio desde uno lugar en el árbol hacia otro. La operación es
agregada al conjunto de cambios pendientes, pero el elemento en
la copia de trabajo típicamente se mueve inmediatamente.
– Algunas herramientas tratan renombrar y mover como la misma
operación (toman la ruta entera como su nombre) otras tratan el
nombre y directorio como atributos separados

Taller de Metodologías Ágiles - Gestión de Proyectos


Status (Pending Changes)
• Lista las modificaciones que han sido realizadas a la copia de trabajo
– A medida que realiza cambios a su copia de trabajo, cada cambio es
agregado al conjunto de cambios pendientes. La operación de Status es
utilizada para ver el conjunto de cambios pendientes
– Muestra los cambios que habría que aplicarse al repositorio si hicieran
Commit.

Taller de Metodologías Ágiles - Gestión de Proyectos


Diff
• Muestra los detalles de las modificaciones que han sido hechas a la
copia de trabajo
• El Status proporciona una lista de cambios pero no detalles sobre ellos. Para ver
exactamente que cambios han sido realizados a los archivos, necesita usar la
operacion Diff.

Taller de Metodologías Ágiles - Gestión de Proyectos


Revert
• Deshace las modificaciones que hayan sido realizadas a la copia de
trabajo
– Algunas veces se realizan cambios a la copia de trabajo que no se
intentan mantener. Quizás se trato de arreglar un defecto y se
descubrió que el arreglo introdujo cinco nuevos defectos que son
peores al que se intent solucionar. O quizás solo cambie de
opinión. Con Revert se puede deshacer los cambios realizados

Taller de Metodologías Ágiles - Gestión de Proyectos


Log (History)
• Muestra la historia de los cambios al repositorio
• Su repositorio mantiene un registro de cada version que haya existido. La operacion
de Log es el modo de ver dichos cambios

Taller de Metodologías Ágiles - Gestión de Proyectos


Tag
• Asocia un nombre significativo con una versión especifica en el
repositorio
• Marca un instante especificado en la historia del repositorio con un nombre
significativo

Taller de Metodologías Ágiles - Gestión de Proyectos


Branch (Rama)
• Crea otra línea de desarrollo
• La operacion de Branch es lo que utliza
cuando quiere que su desarrollo se bifurque
en dos direcciones distintas

Taller de Metodologías Ágiles - Gestión de Proyectos


Branch (Rama)
• Ejemplo
– Hay una línea principal con
compilaciones estables de
Windows.
– Cada grupo (Internet Explorer,
Media Player, etc.) tiene su propio
branch para desarrollar nuevas
características. Estos están bajo
desarrollo y son menos estables
que la línea principal

Taller de Metodologías Ágiles - Gestión de Proyectos


Merge
• Aplica los cambios de un Branch a
otro.
– Se usa típicamente cuando ha
usado un branch para permitir
que su desarrollo diverge, luego
quiere converger de Nuevo, al
menos parcialmente.

Taller de Metodologías Ágiles - Gestión de Proyectos


Resolve
• Maneja los conflictos
resultantes de un Merge

Taller de Metodologías Ágiles - Gestión de Proyectos


Lock
• Evita que otras personas modifiquen un archivo
• Se utiliza para obtener derechos exclusivos para
modificar un archivo

Taller de Metodologías Ágiles - Gestión de Proyectos


Practica de Control de Versiones
• Usando un VCS

Falta branches -> FORK

Taller de Metodologías Ágiles - Gestión de Proyectos


Control de
Versiones
Distribuido
Taller de Metodologías Ágiles - Gestión de
Uzi Mamani / Guino Henostroza 37
Proyectos
Clone
• En un Sistema de Control de
Versiones Distribuido se tienen
múltiples instancias del repositorio
• Clone copia todos los archivos desde
el repositorio centralizado a su
sistema local. Este repositorio puede
tener su propia historia de commits.
• Estará siempre vinculado al
repositorio central ya que recuerda
desde donde fue clonado.
Taller de Metodologías Ágiles - Gestión de
Proyectos
Pull
• Copia conjuntos de cambios desde una
instancia de repositorio remoto hacia
uno local
• Es usado para sincronización entre dos
instancias de repositorio. Esta
operación sucede desde la perspectiva
de una instancia de repositorio local
que quiere copiar algunos conjuntos
de cambios desde una instancia de
repositorio remoto de la cual fue
originalmente clonada. Taller de Metodologías Ágiles - Gestión de
Proyectos
Push
• Copia conjuntos de cambios desde una
instancia de repositorio local a uno
remoto
• La operación “push” es usada para
sincronización entre dos instancias de
repositorio. Específicamente esta
operación ocurre desde la perspectiva
de una instancia de repositorio local que
quiere copiar algunos conjuntos de
cambios hacia una instancia remota (de
la cual fue originalmente clonada)
Taller de Metodologías Ágiles - Gestión de
Proyectos
Practica de Control de Versiones
• Usando un Sistema de Control de Versiones Distribuido

FALTA FORK - BRANCH Patron:


Clone
[Actualizar]
Commit
Pull
Push

Taller de Metodologías Ágiles - Gestión de


Proyectos
Referencias
Eric Sink - Version Control By Example -
http://www.ericsink.com/vcbe/index.html
Apache Subversion - http://subversion.apache.org/
Git - http://git-scm.com/

Taller de Metodologías Ágiles - Gestión de


Uzi Mamani / Guino Henostroza 42
Proyectos