Subversion Reseña histórica La comunidad de software libre ha usado ampliamente Subversion, por ejemplo en proyectos como Free Pascal, FreeBSD, gcc, Django, Ruby, Mono y SourceForge. SVN (por su comando en una terminal) fue creado por CollabNet en el año 2000 con la finalidad de desarrollar un manejador de versiones de código abierto que operara como CVS, pero que arreglara muchos de los errores y que diera una funcionalidad más amplia. Para el año 2001, Subversion ya había avanzado lo suficiente como para ser anfitrión de su propio código fuente. En Noviembre de 2009 fue aceptado en el proyecto “Apache Incubator”, lo que marcó el inicio de su proceso para convertirse en un proyecto de alto nivel de Apache, hito que logró el 17 de febrero de 2010. Principales funcionalidades La mayoría de las funcionalidades contenidas en CVS. Se mantienen versiones de los directorios. Se mantienen versiones de las copias, eliminaciones y cambios de nombres. Permite agregar metadata (“properties”) a los archivos. Ésta metadata también se versiona. Los commit son realmente atómicos. La creación de “branches” y “tags” son operaciones baratas. Permite, mas no exige, el bloqueo de archivos usando “locks”. Mantiene correctamente las versiones de los enlaces simbólicos en sistemas de operación que lo soporten. Se mantiene la condición de ejecutable de los archivos a través de la propiedad “executable”. Permite la creación de un servidor personalizado La salida del cliente por línea de comandos es fácilmente parseable y a la vez legible. Brinda una resolución de conflictos interactiva. Permite la configuración de servidores esclavos en modo “Write-through proxy”. El costo de todas las operaciones es proporcional a los cambios que se hacen, y no al tamaño del repositorio, gracias al proceso de deltificación de archivos. Se permite la creación de repositorios espejo (esclavos) en modo de solo lectura. El modo de almacenamiento del servidor se puede hacer de dos modos. El modo original de almacenamiento se hacía a través de BerkeleyDB, un manejador de bases de datos relacionales propiedad de Oracle que permite miles de hilos de control manipulando bases de datos de hasta 256 terabytes en muchos sistemas, incluidos la mayoría de los tipo UNIX y Windows. A mediados de 2004 surgió un segundo sistema de almacenamiento, denominado FSFS. Aquí, se almacena toda la información de una revisión en un único archivo, de forma que todas las revisiones de un repositorio pueden ser encontradas en un directorio lleno de archivos numerados. Para una comparación completa entre estos dos métodos de almacenamiento, se puede consultar http://svnbook.red-bean.com, capítulo 5. El acceso al servidor se puede realizar directamente a través del sistema de archivos local o en red, a través de un servidor Apache, utilizando el protocolo WebDAV/Delta-V, o utilizando un protocolo personalizado en un servidor SVN a la medida. En internet se ofrece hosting gratuito para repositorios Subversion en Google Code, Source Forge, BerliOS, Freerepository, entre otros. Entre los clientes más populares de Subversion se encuentran el cliente por línea de comandos (svn), TortoiseSVN, UberSVN y VisualSVN. GIT Reseña Histórica Creado por Linus Torvalds en 2005. Está escrito en C, Bourne Shell y Perl. Su diseño se inspiró en Bitkeeper y Monotone. Es software libre bajo la licencia GNU. Aspectos Fundamentales Es un SCV distribuido, lo que significa que cada computadora va a tener un repositorio local. Esto permite que casi todas las operaciones sean locales y que no requieran internet para poder realizarlas. Guarda las versiones por imagen del proyecto completo en lugar de por archivos individuales. Mantiene la integridad de los archivos mediante una función hash (SHA-1) Las secciones que conforma un proyecto que utiliza git son el directorio de trabajo (el directorio local donde está el proyecto), el staging area (lo próximo a lo que se le va a hacer commit) y el repositorio git. Funcionalidades Permite ver el historial de todos los commit. Permite emendar un commit ya realizado. Alias: permite crear alias de todos los comandos. Stashing: permite ocultar el trabajo actual si este aun no se le ha hecho commit, para hacer una modificación sobre un commit anterior y luego volver a este. Permite colocar en un archivo (.gitignore) todos los patrones a los cuales no se les desea hacer commit. Tags: etiquetas que marcan un punto específico del proyecto. Se tiene dos tipos: annotated (crea una copia completa del commit al cual va a referenciar) y lightweight (Solo referencia un commit) Branch: nueva rama de desarrollo a partir de un commit en especifico. Git permite mezclar los branchs. Git además posee branch remotos correspondientes a los repositorios remotos. Los branch remotos vienen dados como [ubicación_repositorio_remoto]/[nombre_del_branch] y estos se mantendrán estáticos a un branch, es decir, solo referencia a un commit y no se mueve en los commits siguientes. Permite migrar desde SVN y Perforce. Aspectos Internos El núcleo del repositorio local (es el archivo .git) esta formado por: HEAD: Contiene el apuntador al branch actual. Index: archivo donde se almacena el staging área. objects/: Almacena todo el contenido de la base de datos. Todo el contenido es almacenado usando las estructuras árbol que corresponde a las entradas al directorio y los blob que corresponden a los inodos. Se mantienen apuntadores SHA-1. refs/: Almacena los apuntadores a los objetos commit de los branch. Protocolos de Transferencia: Local (repositorio en otro directorio dentro del mismo archivo, se utiliza normalmente con NFS), SSH, HTTP/S, GIT (demonio especial que viene empaquetado con Git; similar a SSH pero sin autenticación) Servicios de Hosting: GitHub, Google Code, SourceForge, BerliOS Clientes GUI: GitHub (Windows y Mac), GitBox (Mac), TortoiseGit (Windows), SmartGit (Windows, Mac, Linux), entre otros. Git es utilizado por: Linux, Google, Facebook, Android, Microsoft, Rails, Twitter, Linkedin, entre otros.