Dai git
una possibilità
Non vedo perché sia un problema utilizzare uno strumento potente. Basta scrivere un semplice script bash che esegua git
periodicamente (tramite cron
o systemd
timer); generare automaticamente messaggi di commit ecc.
Come altri hanno evidenziato nei commenti è - ovviamente - possibile creare un repository locale (vedi qui e là per maggiori dettagli).
Se preferisci ospitare il tuo repository remoto, dovrai configurare un "Bare Repository". Entrambi
git init
egit clone
accettare un--bare
argomento.
Backup Borg
Posso anche raccomandare il backup di borg. Ti offre:
- Timestamp
borg diff
(confronto tra istantanee)- Eliminazione (elimina le istantanee più vecchie:supponi di volere un'istantanea per il mese corrente ogni giorno, ma altrimenti solo una al mese)
- Crittografia (opzionale)
- Compressione (opzionale)
- e molto altro...
La cosa interessante è che è molto flessibile:è facile da configurare ma ti offre molte opzioni se lo desideri.
Una volta ho scritto una guida rapida che potrebbe essere di aiuto.
Ci sono un paio di modi per farlo:
- Vim
- Emacs
- Git
- Bash/Strumento esterno
- Git-annex (soluzione all-in-one)
Che sono tutti dettagliati qui:
- Se vuoi farlo in Vim:
Quindi consiglierei di utilizzare la cronologia degli annullamenti, che non solo (come suggerisce il nome) si riferisce all'atto di undo
ing un'azione nell'editor Vim, ma anche quella che salvi. Altro qui.
Aggiungendo quanto segue al tuo .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
Farà in modo che ogni modifica/annullamento venga permanentemente conservata nella directory undodir
sotto il vimDir
locale , che per impostazione predefinita è .vim
nella tua home directory, o in altre menzionate nell'output di :version
o --version
sulla riga di comando.
Per un controllo ancora maggiore sulla cronologia degli annullamenti, ti consiglio di utilizzare anche Undotree per completare l'esperienza.
- Se pensi di farlo su Emacs:
Esiste un pacchetto con nome simile chiamato Undotree, che fa cose simili. Maggiori informazioni sulla cronologia degli annullamenti qui.
- Se preferisci un
Git
soluzione:
Consiglierei di usare git-autocommit, che è un piccolo script bash, con git in quanto sono solo dipendenze, che controllano la directory git corrente (dove lo avvii) per eventuali nuovi file/o file modificati, e li commit.
Data la natura di Git
mantiene tutte le modifiche al file e, anche se non sarebbe adatto a un progetto di produzione/serio, è una soluzione utile se non ti dispiace non avere un messaggio di commit/messaggio di commit generico (che puoi sempre modificare/aggiungere in seguito).
Avvialo dopo aver navigato nella directory git desiderata (che viene prima creata con git init
su una directory specifica, maggiori informazioni sul manuale ufficiale) in questo modo:
screen -dmS namehere git-autocommit -i 1 -V
se stai usando screen
, per tmux
:
tmux new -n namehere git-autocommit -i 1 -V
altrimenti:
git-autocommit -i 1 -V
sarà sufficiente se preferisci non metterlo in secondo piano.
- Se preferisci un
Bash
soluzione:
Consiglierei di usare inotify-tools
o più specificamente inotifywatch
che può rilevare e (come suggerisce il nome) guardare un file/directory per le modifiche, che puoi quindi eseguire azioni su di esso (come salvarlo da qualche altra parte, ecc.).
Qui il flag da usare con inotifywatch
:
inotifywait -r -m -q -e close_write --format %w%f yourdirectorypathhere
e qui un esempio Bash
script utilizzando quanto sopra:
#!/bin/bash
inotifywait -r -m -q -e close_write --format %w%f directorytowatch | while IFS= read -r file; do
process $file
done
Dove process
può essere qualsiasi cosa tu voglia, come tar
se vuoi fare il backup alla modifica del file, oppure con rclone
se vuoi caricarlo da qualche parte...
- Se desideri una soluzione all-in-one:
Consiglierei git-annex
che non comprendono solo Git
ma molti altri strumenti esterni, come inotify-tools
, bash
, tar
, rclone
, borg
ecc.
Maggiori informazioni qui.
Se hai voglia di leggere il wiki/forum in un secondo momento, puoi anche clonarlo localmente con git, per la lettura offline:
git clone git://git-annex.branchable.com
per il sito web, forum (è tutto in markdown, quindi è molto veloce da scaricare...), e codebase (è in Haskell!) ecc.
Un altro approccio, che coprirà tutti i file in un dato file system, consiste nell'utilizzare un file system strutturato in log come NILFS.
Tali file system aggiungono modifiche, non sostituiscono i dati. Questo è effettivamente equivalente allo snapshot continuo (o meglio, al checkpoint) e consente di rivisitare il file system in vari punti del passato. I checkpoint più vecchi sono soggetti a raccolta dei rifiuti una volta raggiunta una certa età, ma i checkpoint possono essere trasformati in istantanee permanenti ed è possibile automatizzarlo, ad esempio per conservare un'istantanea all'ora per l'ultimo mese, quindi una al giorno per sei mesi, poi uno a settimana ecc.
NILFS è ben supportato su Linux ed è abbastanza efficace se usato per /home
.