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
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
¿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
¿Cómo comparten código...?
●   Programadores de
    código abierto
●    Distribuidos por
    todo el mundo




                        Control de versiones   4
¿Se mandan el código?




           Control de versiones   5
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
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
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
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
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
Proceso




    Control de versiones   11
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
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
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

Tema 1 Control de Versiones

  • 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 enel 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
  • 5.
    ¿Se mandan elcódigo? Control de versiones 5
  • 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 Controlde 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
  • 11.
    Proceso Control de versiones 11
  • 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