<<

Introducción a SCM Por: Iván Alejandro Ávalos Díaz. ¿Qué es Fossil SCM?

● Fossil es un sistema de gestión de configuración del (SCM) y control de versiones (VCS) distribuido.

● Fossil es un software que está diseñado para controlar y dar seguimiento al desarrollo de un proyecto de software, así como mantener un registro de su historia.

● Existen muchos sistemas similares hoy en día; sin embargo, Fossil se esfuerza por distinguirse a sí mismo de los demás al ser extremadamente fácil de configurar y operar.

● Incluye interfaz web con bug tracking, , foro, notas, documentación, administración, configuración, etc.. La interfaz puede correr localmente, sin necesidad de internet.

● Proporciona una interfaz CLI bastante intuitiva y no non-sense.

Un poco de historia

● Creado en 2006 por D. Richard Hipp, con el propósito de servir para el desarrollo de SQLite, el cual se llevaba a cabo con CVS.

● CVS era bueno, pero tenía algunos problemas. , y fueron considerados, pero no soportaban HTTP, no eran ligeros, ni ofrecían suficientes funcionalidades.

● La primera versión de Fossil fue lanzada en 2007, luego de varios prototipos en TCL que no daban el ancho por la naturaleza de alto nivel del lenguaje. Se optó por .

● Hoy en día, tanto Fossil como SQLite son desarrollados en Fossil. Por varias razones, no ha alcanzado tanta popularidad; sin embargo, esto no significa que no sea bueno.

Algunos datos

● Escrito en C y TH1, es ligero (~5 MB) y multi-plataforma.

● Software libre (licencia BSD de 2 cláusulas).

● Creado por D. Richard Hipp (el creador de SQLite).

● Utiliza SQLite como medio de almacenamiento.

● El historial de cambios es un blockchain.

● Compresión delta para transferencia y almacenamiento de datos.

● Flujo de trabajo semi-automático, mediante «autosync» (opcional).

Fossil vs Git

Git Fossil Solo ofrece control de versiones. Control de versiones y muchas cosas más. Requiere varias dependencias y corre No requiere dependencias y corre de mejor en sistemas POSIX. forma nativa en casi cualquier sistema. Facilita el desarrollo estilo bazar. Diseñado para desarrollo estilo catedral. Se enfoca en ramas específicas. Se enfoca en el árbol de cambios entero. Te recuerda lo que debiste haber hecho. Te recuerda lo que sí hiciste. Primero haz , luego resuelve los Primero verifica que todo esté bien, problemas. luego haz commit.

¡Git no es malo!

● Se adapta mejor a proyectos que requieren gran escala, fue diseñado por y su pandilla para el desarrollo de .

● Ofrece mucha flexibilidad, ya que solo incluye una cantidad base de funcionalidad que puede ser complementada con más software. Fue diseñado para ser utilizado en conjunto con correo electrónico.

● Permite modificar el historial de cambios (esto puede no ser bueno), a diferencia de Fossil.

● Existe un enorme ecosistema alrededor de Git: plataformas como GitHub, GitLab, , Sourcehut, , Travis CI, etc., que extienden su funcionalidad y utilidad.

● Utiliza conceptos diferentes a Fossil, resuelve diferentes problemas. La mejor opción depende en gran medida del proyecto y sus requerimientos.

…pero tampoco el mejor

● Por ejemplo, su interfaz CLI es tan fea y abrumadora, que hasta se han llegado a hacer bromas sobre su complejidad. https://git-man-page- generator.lokaltog.net/

Los conceptos

Composición de un proyecto

● Un proyecto consiste en un source tree: una serie de versiones o check-ins, que representan los cambios del proyecto.

● Un repositorio es un archivo que contiene una base de datos con el historial de cambios del proyecto.

● Cada desarrollador trabaja en un repositorio local, y sincroniza los cambios con otros desarrolladores.

Artefactos o artifacts

● Una versión particular de un archivo en ● Así se ven los artifact ID: particular, es conocido como artifact. 6089f0b563a9db0a6d90682fe47fd7161ff867c8

● Cada artefacto se identifica por un 59712614a1b3ccfd84078a37fa5b606e28434326 identificador único, que es el SHA-1 o SHA-256 del contenido del archivo. 19dbf73078be9779edd6a0156195e610f81c94f9 B4104959a67175f02d6b415480be22a239f1f077 ● Un repositorio es una colección desordenada de artefactos. Nuevos 997c9d6ae03ad114b2b57f04e9eeef17dcb82788 artefactos pueden ser añadidos, pero los existentes no pueden ser removidos.

Conceptos clave

● Un check-in es un conjunto de archivos ordenados en una jerarquía. ● Un repositorio mantiene un registro de check-ins históricos. ● Los repositorios comparten cambios utilizando push, pull, sync y clone. ● Una versión particular de un archivo particular es un artifact que se identifica por un artifact ID. ● Los artefactos registrados por Fossil son inmutables.

Flujo de trabajo

● Fossil tiene dos modos de operación: autosync (default) y manual-.

● El modo autosync mantiene tus cambios sincronizados automáticamente, similar a CVS o Subversion.

● El modo manual-merge es parecido a Git y Mercurial. Requiere compartir y recibir cambios manualmente.

● Se puede cambiar entre autosync y manual- merge de forma local en cualquier momento.

Con autosync

1. Crea un nuevo repositorio (new) o clona uno existente (clone). 2. Establece uno o más source trees (open). 3. Edita el código. Añade nuevos archivos (add), elimina archivos (rm), etc. Prueba tus cambios. 4. Crea un nuevo check-in (commit). Fossil hará push automáticamente. 5. Cuando otros desarrolladores hagan cambios, puedes integrar esos cambios en tu source tree local (update). 6. Si un cambio que integraste genera conflictos con tu código, puedes revertirlo fácilmente (undo). 7. Repite todo lo anterior hasta que hayas creado software chingón.

Con manual-merge

1. Crea un nuevo repositorio (new) o clona uno existente (clone). Desactiva el autosync (setting autosync off). 2. Establece uno o más source trees (open). 3. Edita el código. Añade nuevos archivos (add), elimina archivos (rm), etc. Prueba tus cambios. 4. Crea un check-in (commit). Tus cambios se guardarán localmente. 5. Comparte tus cambios a un servidor donde otros desarrolladores puedan acceder (push). 6. Cuando los desarrolladores hagan cambios, descarga los cambios a tu repositorio local (pull). 7. Una vez que tus cambios estén en tu repositorio local, intégralos a tu source tree (update). Si los cambios que integraste no funcionan, o no te agradan, puedes revertirlos (undo). 8. Si dos o más personas hicieron commit sobre el mismo check-in, esto resultará en un fork, que puedes resolver mediante un merge, seguido por un commit. 9. Repite todo lo anterior hasta que hayas creado software chingón.

El servidor

Mientras otros SCM hacen esto difícil, con Fossil es pan comido. Tienes cuatro opciones: ● Servidor stand-alone. Corre fossil server o fossil ui desde la línea de comandos. ● CGI. Instala un script CGI de dos líneas en un servidor como Apache. ● SCGI. Inicia un servidor SCGI utilizando fossil server --scgi, para manejar los requests mediante un servidor como . ● Inetd o Stunnel. Configura programas como inetd, xinetd o stunnel para delegar los requests HTTP directamente al comando fossil http.

La interfaz web (un vistazo)

Página principal

Menú de hamburguesa

Línea de tiempo (mostrando una práctica de desarrollo pésima)

Vista de un check-in

Vista de un check-in

Navegador de archivos

Vista de un artifact

Inicio de sesión

Branches

Panel de administración

Estadísticas del repositorio

Reportes de actividad

Más recursos

Links

● Configura Fossil en 5 minutos: https://fossil-scm.org/home/doc/trunk/www/fiveminutes.wiki ● Página y repositorio de Fossil: https://fossil-scm.org/ ● Guía introductoria: https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki ● Lista de comandos y páginas: https://fossil-scm.org/home/help ● Branching, forking, merging y tagging: https://fossil-scm.org/home/doc/trunk/www/branching.wiki ● Fossil Versus Git: https://fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki ● ¿Por qué deberías usar Fossil? https://fossil-scm.org/home/doc/trunk/www/quickstart.wiki

Referencias

● https://fossil-scm.org/home/doc/trunk/www/index.wiki

● https://fossil-scm.org/home/doc/trunk/www/history.md

● https://fossil-scm.org/home/doc/trunk/www/fossil-v-git.wiki

● https://fossil-scm.org/home/doc/trunk/www/concepts.wiki

Licencia

El uso de esta obra está sujeto a los términos de la Licencia Creative Commons Atribución-NoComercial 4.0 Internacional. https://creativecommons.org/licenses/by-nc/4.0/