1. Análisis y Diseño
de Software
Tema 1. Control de versiones
Carlos A. Iglesias <cif@gsi.dit.upm.es>
Departamento de Ingeniería de Sistemas Telemáticos
http://moodle.dit.upm.es
2. Leyenda
Teoría
Ejercicio práctico en el ordenador
Ampliación de conocimientos
Lectura / Vídeo / Podcast
Práctica libre / Experimentación
Control de versiones 2
3. ¿Cómo comparten código...?
● En una empresa
cientos de
programadores
programando a la
vez el mismo
programa
● Distribuidos por
oficinas en todo el
mundo
Control de versiones 3
4. ¿Cómo comparten código...?
● Programadores de
código abierto
● Distribuidos por
todo el mundo
Control de versiones 4
6. Más problemas
● ¿Qué pasa si dos
personas han
cambiado el mismo
código?¿cómo 'lo
mezclan?
● ¿Cómo te enteras de
si alguien ha
cambiado algo si
están mil personas
trabajando?
Control de versiones 6
7. Solución: control de
versiones
● Unsistema que gestiona un repositorio de
código (remoto) donde los usuarios pueden
– Descargar el código del repositorio en su
ordenador (checkout)
– Modificar el código en local, crear nuevos ficheros,
y añadirlos al repositorio (commit)
– Si al añadir código hay conflictos (con otro
usuario), el gestor combina el código si puede
– Cada vez que hacemos commit, se crea una
versión, y podemos 'recuperar' versiones anteriores
– Podemos tener varias 'ramas', p.ej. para una
versión y la siguiente, y combinarlas
Control de versiones 7
8. Sistemas de Control de
Versiones
● Centralizados
– Un repositorio central
– CVS, Subversion (SVN)
● Distribuidos
– Servidor 'con más autoridad' por convenio
– Cada 'checkout' es un repositorio
– Mercurial
– BitKeeper
– Bazaar
Control de versiones 8
9. Git
● 2005,Desarrollado por
Linus Torvald para el
kernel de Linux
● Según Linus, no es un
sistema de control de
versiones, sino un
sistema de ficheros
orientado a objeto
versionable... pero se usa
como control de versiones
Control de versiones 9
10. Git
● Cada repositorio es completo (nos
bajamos todos los ficheros)
● Nos bajamos 'clonamos' un repositorio
– Al modificar / editar / añadir el código se añade
a 'staging' / index
– Al confirmar los cambios los añadimos al
repositorio
● Git usa 'fotos' del repositorio
Control de versiones 10
12. Proceso
● Clonamos un repositorio o
iniciamos uno
– Los tenemos en el 'working
directory'
● Editamos, añadimos ficheros y
los añadimos a git (los tenemos
también en index)
● Decidimos confirmar los
cambios (commit) → pasan al
repositorio (HEAD)
Control de versiones 12
13. Github
● Es una forja para almacenar proyectos
● Tiene componente social (seguir amigos,
compartir código, etc.)
● Lo vamos a utilizar para guardar el código
proporcionado en las prácticas (en
dirección asignatura → alumnos)
Control de versiones 13
14. Resumen
● Es importante aprender a usar un sistema
de control de versiones
● Olvídate de 'numerar las versiones de un
programa' (p.java, p1.java, …) → es más
rápido usar control de versiones
● Muy bien integrado en IDEs
Control de versiones 14