- Propósito: Introducir los sistemas de control de versiones, en especial, Fossil.
- Ejercicio práctico: Clonar un repositorio en Fossil, registrarse en él, sincronizarse y agregar nuevo contenido, hecho en Markdown.
- Prerequisitos:
- Lección: Markdown.
Fossil es un sistema de colaboración distribuido para gestión de código fuente. Los SCM (Software Configuration Management) o DVCS (Distributed Version Control System) resuelven el problema respecto a cómo reproduzco el estado de un sistema de cómputo y su historia (orientado a archivos). Al resolver esta inquietud, se está resolviendo una pregunta incidental que es sobre cómo colaborar, de maneras no centralizadas.
Fossil es el SCM elegido para trabajar con Grafoscopio y el Data Week por su caracter sencillo y autocontenido, lo cual quiere decir que brinda mucha funcionalidad en un único programa, con flujos de trabajo y colaboración simples, y puede ejecutarse en una variedad grande de plataformas de hardware y software, con mínimos requerimientos de recursos de hardware (poca memoria RAM, menos de 3 Mb en disco duro) y software, además tanto los datos como los metadatos (salvo las contraseñas) son repartidos entre todos los usuarios que se sincronicen al repositorio, es decir, satisface nuestra definición de infraestructuras de bolsillo.
Existen algunas pocas herramientas para Git, como Gogs, que siguen el enfoque minimalista de Fossil, si bien no toda la información parece ser autocontenida e implican los flujos de trabajo complicados propios de Git.
Referencias Extra:
- Página principal de Fossil.
- Son habituales las discusiones y comparaciones de Fossil contra los sistemas
más populares, particularmente Git, así que acá algunos enlaces (de documentos en
Inglés) que te ayudarán a tener una perspectiva informada, para defender el uso de
Fossil vs Git, o para saber cuándo usar cuál:
- Why You Should Use Fossil.
- The Fossil Web Interface: Muestra varias de las características que Fossil integra desde su interfaz web. Veremos algunas de ellas en este mismo documento.
- Preguntas y críticas.
- Fossil vs Git.
- Citas: Lo que la gente está diciendo.
- Evaluaciones.
- Documentación embebida para proyectos: Esta es la forma de documentación que empleamos para el Data Week y Grafoscopio. Explica cómo usarla y cómo acceder a la última versión de un documento, o la que habrá de enviarse al repositorio, o la de alguna fecha o commit específicos.
- Fossil User Manual: Un texto
detallado y con ejemplos sobre cómo usar Fossil en proyectos colaborativos.
Si bien corresponde a una versión antigua de Fossil, las lógicas de uso y muchas
de las interfaces siguen siendo utilizables hoy en día.
- Son habituales las discusiones y comparaciones de Fossil contra los sistemas
más populares, particularmente Git, así que acá algunos enlaces (de documentos en
Inglés) que te ayudarán a tener una perspectiva informada, para defender el uso de
Fossil vs Git, o para saber cuándo usar cuál:
- Clay Shirky: How someday Internet will one day transform the government: Una presentación, más bien simplista, sobre cómo estas tecnologías tipo Git y fossil podrían cambiar prácticas de poder, participación y democracía.
Instalación
Antes de proceder a la instalación es conveniente verificar si ya se tiene
instalado fossil (por ejemplo verificar si el comando "fossil" existe
tecleando $ which fossil
).
Usando gestores de paquetes en Gnu/Linux
Averigua con el gestor de paquetes (apt, pacman) si tu distribución de Linux tiene Fossil disponible en una versión relativamente reciente (como las que usamos para nuestros talleres) e instálada desde dicho gestor.
IMPORTANTE: En nuestra experiencia, algunas distribuciones derivadas de Debian, suelen tener paquetes muy viejos de Fossil.
Usando gestores/instaladores de software
Más información acá
Métodos de instalación alternativos
Se puede instalar desde el gestor de paquetes en Linux, Mac, Windows, pero cuando está muy desactualizado, una alternativa es instalarlo desde el código fuente.
Windows
- Entramos a la página de descargas de Fossil y allí bajamos la última versión disponible para Windows.
- Una vez hallamos descompreso el archivo descargado, nos mostrará los contenidos
del archivo zip, con un único elemento que es el archivo
fossil.exe
. - Copiamos el archivo
fossil.exe
dentro del zip descargado y lo pegamos a la carpetaC:Windows\
. - Abrimos la consola de comandos en Windows y escribimos
fossil
en ella. Debe aparecer algo como:
Gnu/Linux y Mac
Así se hace esto en Gnu/Linux y Mac, usando comandos en la terminal:
Descargar el instalador desde la página web:
cd /tmp wget http://fossil-scm.org/index.html/uv/fossil-linux-x64-2.3.tar.gz
Descomprimimos el archivo:
tar xvfz fossil-linux-x64-2.3.tar.gz
Encontraremos un binario llamado
fossil
que copiamos a donde están todos los binarios:sudo cp fossil /usr/bin
Usando Fossil
Para usar Fossil, vamos a sincronizarnos contra un repositorio, agregar archivos a este y mirar cómo ha cambiado su línea de tiempo. Hay otras cuestiones que vamos a dejar en el radar, pero que no vamos a profundizar, como el hecho de publicar repositorios propios. Sin embargo, ese tipo de funcionalidad también está provista por sistemas como Chisel.
Navegar un repositorio:
Existen determinados lugares para visitar con los cuales uno se puede hacer una idea de un repositorio de Fossil, sus contenidos y actividad. A continuación los listamos esos lugares, mostrando algunos ejemplos de los mismos en distintos repositorios.
- Portada:
- Para Grafoscopio: http://mutabit.com/repos.fossil/grafoscopio/
- Para el Data Week: http://mutabit.com/repos.fossil/dataweek
(es la misma que está acortada en http://is.gd/oddbog )
- La línea de tiempo:
- Data Week:
- Por omisión: http://mutabit.com/repos.fossil/dataweek/timeline
- Los últimos 500 "commits": http://mutabit.com/repos.fossil/dataweek/timeline?n=500&y=all&t=&ms=exact
- Data Week:
- Los contenidos (archivos o carpetas):
- Para el Data Week: http://mutabit.com/repos.fossil/dataweek/dir
- Para el Data Week: http://mutabit.com/repos.fossil/dataweek/dir
- Los "tickets" (solicitudes, peticiones, asuntos):
- De Grafoscopio: http://mutabit.com/repos.fossil/grafoscopio/rptview?rn=1
Descargar un repositorio:
ADVERTENCIA: asegurarse que los comandos se ejecutan en el directorio correcto porque se pueden crear un montón de directorios y cosas en un directorio que no se desea.
Cuando se descarga un repositorio lo que se hace es traer toda la historia del mismo de su lugar remoto a mi disco duro. Vamos a hacer esto con el repositorio del Data Week,desde la consola de comandos.
Creamos una carpeta para el repositorio del Data Week
mkdir ~/Documentos/DataWeek
Nos ubicamos en esa carpeta:
cd ~/Documentos/DataWeek
Clonamos el repositorio:
fossil clone http://mutabit.com/repos.fossil/dataweek/ dataweek.fossil
Al final de proceso deberá aparecer algo similar a:
project-id: aa9f6e73b4f326e190f15c4a830c0909619bfa42 server-id: 1f91261cb649d68c08dc75f7609975b787bc754f admin-user: Pibi (password is "acead4")
Abrimos el repositorio:
fossil open dataweek.fossil
y se deben ver los mismos contenidos del repositorio remoto en nuestro disco duro local.
Modificar el repositorio
Vamos a crear una subcarpeta dentro de la carpeta Participantes
, con nuestro nombre
o un alias.
Por convención (se puede cambiar), los nombres de las carpetas suelen empezar en mayúsculas.
Y dentro de dicha carpeta vamos a crear un archivo llamado intro.md
con cualquier
texto de caracter introductorio.
Suponemos que estamos ubicados en la raíz del repositorio, para los comandos que siguen
en este ejercicio e iremos haciendo las adaptaciones del caso y que el repositorio ya
está abierto.
Crear la carpeta propia:
mkdir Participantes/<Carpeta_propia>
donde
se cambia por lo que uno quiera poner, ejemplo "Ivan". Crear archivo intro.md dentro de esa carpeta
touch Participantes/<Carpeta_propia>/intro.md
Editar el archivo (por ejemplo usando el editor nano: para salir del editor con ctrl+x)
nano Participantes/<Carpeta_propia>/intro.md
Nota: Recuerda que Los símbolos
<
y>
no se incluyenAgregamos el archivo recién creado a nuestro repositorio local:
fossil add Participantes/<Carpeta_propia>/intro.md
--> ADDED Participantes/
/intro.md Hacemos nuestro primer commit, con un mensaje descriptivo:
fossil commit -m "<comentario corto descriptivo>."
Puede que recibamos mensajes sobre que no podemos autosincronizar. Por lo pronto no haremos caso de ellos.
Para ver lo que ocurre en el repositorio escribimos
fossil ui
, que despliega la interfaz gráfica de usuario en nuestra máquina. (Esto ocurre en menos de 3 Mb!). Debemos ver algo cómo:
Sincronización entre repositorios
Dicha sincronización es hecha a través de un servidor que sirve como coordinador. En nuestro caso, será el repositorio original del Data Week. Lo anterior quiere decir que debemos registrarnos en dicho repositorio y solicitar permisos para sincronizarnos con él.
- Entramos a la página de ingreso (login), específicamente a la página de registro . Veremos algo como esto:
Configurar usuario de fossil Esto se debe hacer si el usuario del sistema local (del pc) no es el mismo que se creó en el login del paso anterior. Fossil por defecto toma el nombre de usuario del sistema local (del PC).
Crear usuario nuevo en fossil local
fossil user new <usuario>
Ponerlo como usuario por defecto
fossil user default <usuario>
Donde <
>
).
Sincronización: dentro del repositorio hacemos: Hacer un update primero (pues probablemente hay cambios nuevos que no se tienen): fossil update
fossil sync http://<usuario>@mutabit.com/repos.fossil/dataweek/
donde
Cómo resolver las bifurcaciones involutarias (forks).
La diferencia entre "branches" y "forks":
- What is the difference between a "branch" and a "fork"?.
- Branching, Forking, Merging, and Tagging Login.
El estado del repositorio a hoy era este:
Vemos que se han integrado dos bifurcaciones, pero aún quedan tres por integrar. Cada estado del sistema está descrito por un código alfanumérico único, suma hash.
Las ramas que fueron integradas corresponden (en la imagen) a las siguientes sumas hash:
[f0ea5717e4]
(El commit de Grace) y el tronco (trunk) de ese momento, cuyo checksum
corresponde a [1b5023d5a4]
, produciendo un estado del sistema nuevo, cuyo checksum
es [dcd4e53045]
.
Vamos a integrar una nueva ramificación en el tronco principal. Para ello, ubicados en el repositorio, desde la terminal
fossil update trunk
fossil merge 0ef40cd985
Aparecerá algo como esto:
Autosync: http://offray@mutabit.com/repos.fossil/dataweek/
Round-trips: 1 Artifacts sent: 0 received: 0
Pull done, sent: 383 received: 2429 ip: 45.55.37.99
ADDED Participantes/Ivan/intro.md
"fossil undo" is available to undo changes to the working checkout.
WARNING: multiple open leaf check-ins on trunk:
(1) 2018-02-24 18:59:24 [dcd4e53045] (current)
(2) 2018-02-24 01:33:03 [5da6cdb6dc]
(3) 2018-02-24 01:32:45 [0a25a7636d]
(4) 2018-02-24 01:31:51 [0ef40cd985]
Luego hacemos un commit al repositorio:
fossil commit -m "Integrando cambios de Iván."
Y luego mezclamos ese commit con el tronco principal, que de ahora en adelante llamaremos simplemente "trunk". Veremos algo como esto:
NOTA: Si olvidas hacer el fossil update trunk
antes de hacer el merge, puedes usar fossil undo
para revertir el cambio.
Varios:
¿Cómo saber la URL del repositorio?
Tiene que ser dada por el "proveedor" del repositorio.
¿Qué quiere decir cuando aparece "Fossil internal error: repository doesn't not exist ... mapeda.fosil"?
Que se está intentando abrir un repositorio sin estar ubicado en la carpeta donde se clonó, o que se está intentando clonar en la carpeta de otro repositorio, sin haberlo cerrado previamente
Ayuda en fossil:
(confossil help COMMAND
da la lista de posibles comandos )fossil help
[Indice] [< Markdown] [Grafoscopio >]