Gestión de Configuración

Alan Boglioli

Federico Brest

Hernan Noli

Malena Casas

Matías Martinez

Pablo Diaz

SourceForge es una central de desarrollos de software que controla y gestiona varios proyectos de software libre y actúa como un repositorio de código fuente.

SourceForge.net es hospedado por VA Software y corre en
una versión del software SourceForge.

Source Forge gestiona a través de proyectos repositorios SVN, Hg (mercurial) y Git.

Cada usuario puede crear sus proyectos y repositorios de forma gratuita.

Estos proyectos suelen ser open source (código libre y abierto), en los cuales podemos participar, descargar el código, mejorar el código, enviar informes de errores, solicitar cambios, étc.

Creación de nuevo proyecto

Protocolos utilizados

SSH

HTTPS

SSH

  • Es necesario crear las llaves públicas y privadas en nuestra PC
  • La llave pública debe ser copiada al repositorio
  • Gracias a estas llaves no será necesario ingresar usuario y contraseña al momento de hacer un push al repositorio

HTTPS

  • Más sencillo de utilizar por el hecho de que no involucra llaves públicas y privadas.
  • Cada vez que se desse realizar un push al repositorio es necesario ingresar usuario y contraseña de SourceForge, en este caso.
  • Gratuita y de código libre. Sistema de control de versiones multiplataforma.
  • Herramienta para el control de código fuente distribuído. Se enfoca en controlar el versionado del código y archivos.
  • Permite que múltiples usuarios puedan trabajar de una forma automatizada  y cómoda en el mismo proyecto, haciendo uso de distintas ramas de desarrollo, permitiendo versionar el código y generar etiquetas de acuerdo al estado del proyecto y el código fuente.
  • Mantiene un historial de todo el proyecto, desde sus inicios hasta el estado actual.
  • Maneja eficientemente proyectos de cualquier tamaño, y ofrece una sencilla e intuitiva interfaz.
  • No sólo se utiliza con código fuente, sino que soporta cualquier tipo de archivo, como documentos, imágenes, binarios, étc.
  • Escrita en su mayoría en Python. En C se han escrito algunas partes que requieren gran velocidad, como diff.
  • Las principales metas de desarrollo de Mercurial incluyen un gran rendimiento y escalabilidad; desarrollo completamente distribuido, sin necesidad de un servidor; gestión robusta de archivos tanto de texto como binarios; y capacidades avanzadas de ramificación e integración, todo ello manteniendo sencillez conceptual.
  • Incluye una interfaz web integrada.
  • Creador y desarrollador principal: Matt Mackall.
  • El código fuente se encuentra disponible bajo los términos de la licencia GNU GPL versión 2.
  • Mercurial es una herramienta pensada para usarse en línea de comandos.
  • A pesar de poseer múltiples interfaces gráficas que trabajan sobre las aplicaciones de la línea comandos, se es mucho más productivo si se aprende a utilizar correctamente la consola o terminal.

Documentación

Sistema de Control de Versiones

Tiene una estructura similar a un sistema de archivos. La diferencia está en que se puede acceder a distintas versiones de los archivos y operar con estas versiones. Es decir: Es un sistema de ficheros con versionado.

Flujo de trabajo (workflow)

  • Debido a la flexibilidad para colaborar en proyectos que proveen este tipo de herramientas, existen múltiples flujos de trabajo.
  • Cada equipo implementará el que le resulte más conveniente.
  • Cada desarrollador es tanto un nodo como un repositorio: cada desarrollador puede tanto contribuir a otros repositorios, como servir de repositorio público sobre el que otros desarrolladores pueden basar su trabajo y contribuir a él

Ramas (branches)

  • Permite realizar un trabajo paralelo sin afectar a la rama principal.
  • En mercurial, las ramas principales suelen llamarse default, y suelen ser las más importantes, las que derivan el código que va a producción.
  • Existe también la posibilidad de crear ramas de ramas o de mezclarlas entre ellas, complicando así el grafo generado.

  • Hay que tener en cuenta que, durante la mezcla de código, es posible que el algoritmo de mezclado falle, así que es buena idea combinar estas técnicas con robustas baterías de pruebas.

Hooks

Los repositorios pueden lanzar acciones automáticas cuando se producen ciertos eventos. Por ejemplo, podrían enviarnos un e-mail cuando una rama se mezcla con la rama principal, o comprobar que el código cumple ciertos criterios de calidad.

Múltiples repositorios (mirrors)

  • Existe la opción de tener repositorios remotos réplica. Esto significa que podemos sincronizar nuestros cambios contra una de estas réplicas y ésta se sincronizará tarde o temprano con otra de las réplicas.

  • La sincronización entre repositorios puede ser manual o automática, y puede dar lugar a un flujo de trabajo distinto según se necesite. 

Commit

  • Se refiere a la idea de consignar un conjunto de cambios "tentativos" de forma permanente.
  • Es obligatorio que tengan un mensaje para que sea más fácil para los demás desarrolladores conocer los cambios, ya que explicitar esto de forma textual es más entendible para el ser humano.

Línea de comandos

$ hg [comando] [parámetros]
$ hg help

Ejecutar hg

Ayuda

Comandos

Uso en conjunto con SourceForge

Comando para clonar el repositorio

Se crea una nueva carpeta. Se clonó un repositorio vacío.

Archivo de configuración

Creación de un nuevo archivo

Agregar el archivo al repositorio

$ hg add .

Generar commit de archivos agregados

$ hg commit -m "Mensaje..."

Ver ramas del repositorio

$ hg branches

Subir archivos al repositorio central

$ hg push

Bajar cambios del repositorio central

$ hg pull

Visualizar repositorio en SourceForge

Ramas

Último commit que modificó el archivo

Archivos mostrados en forma de directorio

Etiquetas

Ver logs de commits en línea de comandos

$ hg log

Otro programador clona el repositorio y modifica el archivo

$ hg clone [url-de-repositorio] [nombre-de-la-carpeta]

Realiza cambios

Visualiza cambios con diff

Agrega cambios y los envía al repositorio central para que el otro programador pueda verlos

Primer programador recibe cambios, modifica y agrega un archivo

$ hg merge # Mezclar cambios

Nuevo archivo y nueva funcionalidad

Sube cambios

Segundo programador

Repositorio en SourceForge resultante

Es una interfaz gráfica y una seria de aplicaciones para el sistema distribuído de control de versiones Mercurial.

Incluye extensiones para Gnome/Nautilus para GNU/Linux y herramientas de línea de comandos.

  • Software de Integración continua open source escrito en Java.
  • Basado en el proyecto Hudson y es, dependiendo de la visión, un fork del proyecto o simplemente un cambio de nombre.
  • Jenkins proporciona integración continua para el desarrollo de software.
  • Es un sistema corriendo en un servidor que es un contenedor de servlets, como Apache Tomcat. Soporta herramientas de control de versiones como CVS,Subversion, Git, Mercurial, Perforce y Clearcase y puede ejecutar proyectos basados en Apache Ant y Apache Maven, así como scripts de shell y programas batch de Windows.
  • Liberado bajo licencia MIT, Jenkins es software libre.
  • Jenkins dispone de la funcionalidad de extenderse mediante Plugins.
  • Existen multitud de plugins que permiten cambiar el comportamiento de Jenkins o añadir nueva funcionalidad.

Copy of Presentación de Ingeniería de Software

By Alan Boglioli

Copy of Presentación de Ingeniería de Software

  • 214