Dar git
una oportunidad
No veo por qué es un problema usar una herramienta poderosa. Simplemente escriba un script bash simple que ejecute git
periódicamente (a través de cron
o systemd
temporizadores); generar automáticamente mensajes de confirmación, etc.
Como otros destacaron en los comentarios, por supuesto, es posible crear un repositorio local (consulte aquí y allá para obtener más detalles).
Si prefiere alojar su propio repositorio remoto, deberá configurar un "Repositorio básico". Ambos git init
y git clone
acepta un --bare
argumento.
Copia de seguridad Borg
También puedo recomendar la copia de seguridad de Borg. Te ofrece:
- Marcas de tiempo
borg diff
(comparar entre instantáneas)- Recorte (deshágase de las instantáneas más antiguas; digamos que desea una instantánea para el mes actual todos los días, pero de lo contrario solo una por mes)
- Cifrado (opcional)
- Compresión (opcional)
- y mucho más...
Lo bueno es que es muy flexible:es fácil de configurar pero te ofrece muchas opciones si lo deseas.
Una vez escribí una guía de inicio rápido que podría ser de ayuda.
Hay un par de formas en las que podrías hacer esto:
- Vim
- Emacs
- Git
- Bash/herramienta externa
- Git-annex (solución todo en uno)
Que se detallan aquí:
- Si quieres hacer esto en Vim:
Entonces recomendaría usar el historial de deshacer, que no solo (como sugiere su nombre) se relaciona con el acto de undo
ing una acción en el editor de Vim, pero también la que guardas también. Más aquí.
Agregar lo siguiente a su .vimrc
:
let vimDir = '$HOME/.vim'
let &runtimepath.=','.vimDir
" Keep undo history across sessions by storing it in a file
if has('persistent_undo')
let myUndoDir = expand(vimDir . '/undodir')
" Create dirs
call system('mkdir ' . vimDir)
call system('mkdir ' . myUndoDir)
let &undodir = myUndoDir
set undofile
endif
Hará que todos los cambios/deshaceres se mantengan permanentemente en el directorio undodir
bajo su vimDir
local , que por defecto es .vim
en su directorio de inicio, u otros mencionados en la salida de :version
o --version
en la línea de comandos.
Para tener aún más control sobre el historial de deshacer, también recomiendo usar Undotree para complementar la experiencia.
- Si planea hacer esto en Emacs:
Hay un paquete con nombre similar llamado Undotree, que hace cosas similares. Más información sobre el historial Deshacer aquí.
- Si prefiere un
Git
solución:
Recomendaría usar git-autocommit, que es un pequeño script de bash, con git como solo dependencias, que observa el directorio git actual (donde lo inicia) en busca de archivos nuevos o archivos modificados, y los confirma.
Dada la naturaleza de Git
mantiene todos los cambios en el archivo, y aunque no sería adecuado para un proyecto de producción/serio, es una solución útil si no le importa no tener un mensaje de confirmación/mensaje de confirmación genérico (que siempre puede editar/agregar más adelante).
Inícielo después de navegar en el directorio git deseado (que primero se crea con git init
en un directorio específico, más información en el manual oficial) así:
screen -dmS namehere git-autocommit -i 1 -V
si estás usando screen
, para tmux
:
tmux new -n namehere git-autocommit -i 1 -V
de lo contrario:
git-autocommit -i 1 -V
será suficiente si prefiere no ponerlo en segundo plano.
- Si prefiere un
Bash
solución:
Recomiendo usar inotify-tools
o más específicamente inotifywatch
que puede detectar y (como sugiere su nombre) observar un archivo/directorio en busca de cambios, que luego puede realizar en él (como guardarlo en otro lugar, etc.).
Aquí la bandera a usar con inotifywatch
:
inotifywait -r -m -q -e close_write --format %w%f yourdirectorypathhere
y aquí un ejemplo Bash
script usando lo anterior:
#!/bin/bash
inotifywait -r -m -q -e close_write --format %w%f directorytowatch | while IFS= read -r file; do
process $file
done
Donde process
puede ser lo que quieras, como tar
si desea hacer una copia de seguridad en la modificación del archivo, o con rclone
si quieres subirlo a algún lado...
- Si desea una solución todo en uno:
Recomiendo git-annex
que no solo abarcan Git
pero muchas otras herramientas externas, como inotify-tools
, bash
, tar
, rclone
, borg
etc.
Más información aquí.
Si tienes ganas de leer el wiki/foro más adelante, también puedes clonarlo localmente, para leerlo sin conexión:
git clone git://git-annex.branchable.com
para el sitio web, el foro (todo está en rebajas, por lo que es muy rápido de descargar...) y el código base (¡está en Haskell!), etc.
Otro enfoque, que cubrirá todos los archivos en un sistema de archivos dado, es usar un sistema de archivos con estructura de registro como NILFS.
Dichos sistemas de archivos agregan cambios, no reemplazan datos. Esto es efectivamente equivalente a la creación de instantáneas continuas (o más bien, la creación de puntos de control) y le permite volver a visitar el sistema de archivos en varios puntos del pasado. Es probable que los puntos de control más antiguos se recolecten como basura una vez que alcanzan una cierta edad, pero los puntos de control se pueden convertir en instantáneas permanentes y es posible automatizar eso, por ejemplo, para mantener una instantánea por hora durante el último mes, luego una por día. durante seis meses, luego uno por semana, etc.
NILFS está bien soportado en Linux y es bastante efectivo cuando se usa para /home
.