src: Control de Versiones Textoplanista Qué es Un “wrapper” en Python para un venerable sistema de control de versiones llamado ‘rcs(1)’ que lo aggiorna al siglo XXI, sin que pierda su simplicidad. Es decir, sistema de control de versiones simple, pero con el “look and feel” de los de ahora. ¿Para qué sirve? Control de versiones en archivos. Pero que no es complicado como git/mercurial/… Se versiona 1 archivo por vez. Está pensado para un usuario sólo. ¿Por qué me conviene? Porque es más simple que otros sistemas. * Es simple el repositorio, porque genera un archivo con los cambios por cada archivo versionado. * Es simple el programa, porque el trabajo duro lo hace ‘rcs’. * Es simple el workflow, porque está pensado para un sólo usuario, vos. No hay permisos, ni contraseñas, ni sincronización con otro repo, ni nada por el estilo. * Es simple el conjunto de comandos, porque son los comandos usuales que encontramos en git y compañía, con la misma semántica y opciones usuales. ¿Dónde lo consigo? El repo del proyecto queda en https://gitlab.com/esr/src, pero me parece que es más fácil y directo hacer wget 'https://gitlab.com/esr/src/-/raw/master/src' chmod +x src # Poner ahora src en algún directorio en el $PATH para poder ejecutarlo ¿Tiene algún requisito? Tiene dos requisitos fundamentales * ‘python’: versión 2 o 3, no importa. Es el lenguaje en el que está programado ‘src’. * ‘rcs’ o ‘sccs’: sistemas de control de versiones de hace muchos muchos años, cuando a los archivos había que tejerlos a mano. ‘rcs’ ya está instalado en Texto-Plano, y es el que se prefiere. ¿Cómo se usa? Forma general de los comandos src comando [switches] [revisión] [archivos] Esto quiere decir que a un comando le puede seguir una serie de opciones, posiblemente un identificador de revisión(es) y finalmente los archivos. Inicializar proyecto No hay tal cosa. Directamente se commitea archivo por archivo (digamos que hay un repo por cada archivo en el directorio). El hecho de commitear genera el archivo que lleva la historia, si es que no existe. El archivo se genera en un directorio oculto “.src” que va a quedar en el mismo directorio del archivo versionado. Commit de un archivo src commit -m <"mensaje del commit"> archivo-a-commitear La historia de commits comienza en 1 y se autoincrementa. Cada commit guarda el comentario y la fecha del commit. Se pueden asignar “tags” (nombres) a un commit en particular. Y qué más? Otros comandos útiles son * ‘tag’ para todo lo relacionado a tags (crear, borrar, listar) * ‘branch’ para todo lo relacionado a ramas (branches) * ‘log’ para ver el log de un archivo versionado * ‘diff’ para ver las diferencias entre diferentes revisiones de un archivo Hay muchos más. Para más información ejecutar src help commands | less Todo muy lindo, pero el resto del mundo usa git Bueno, ‘src’ provee la posibilidad de importar/exportar de/a otros dvcs como git con los comandos ‘fast-import’ y ‘fast-export’ respectivamente. Leer la documentación del programa sobre cómo usar ésto. ¿Y hay ayuda de esto? La buena noticia es que el programa incluye en sí mismo su propia documentación. Además hay documentación adicional en el repositorio del proyecto. La mala es que está todo en inglés. Sé que para muchos eso es un “pelotazo en contra”. UPDATE 2022-01-05: ¿Quise hacer un branch y no anduvo nada, qué pasa? Revisando en la documentación, y en el código de src, me desayuno que el rcs(1) de OpenBSD no es igual al que hay en distribuciones Linux. Esto es, el mecanismo de branching es diferente en OpenBSD, y por tanto los comandos para realizarlo son diferentes. Con lo cual, src no funcionaría completamente en Texto-Plano (por el momento). Una pena :(