Geben Sie git
eine Chance
Ich verstehe nicht, warum es ein Problem sein sollte, ein leistungsstarkes Tool zu verwenden. Schreiben Sie einfach ein einfaches Bash-Skript, das git
ausführt periodisch (über cron
oder systemd
Timer); Commit-Meldungen automatisch generieren usw.
Wie andere in den Kommentaren hervorgehoben haben, ist es natürlich möglich, ein lokales Repository zu erstellen (siehe hier und dort für weitere Details).
Wenn Sie es vorziehen, Ihr eigenes Remote-Repository zu hosten, müssen Sie ein „Bare Repository“ einrichten. Beide git init
und git clone
akzeptiere einen --bare
Argument.
Borg-Sicherung
Ich kann auch borg backup empfehlen. Es bietet Ihnen:
- Zeitstempel
borg diff
(Vergleich zwischen Schnappschüssen)- Pruning (Ältere Snapshots entfernen - sagen wir, Sie möchten jeden Tag einen Snapshot für den aktuellen Monat, ansonsten aber nur einen pro Monat)
- Verschlüsselung (optional)
- Komprimierung (optional)
- und vieles mehr...
Das Coole ist, dass es sehr flexibel ist - es ist einfach einzurichten, bietet Ihnen aber viele Optionen, wenn Sie dies wünschen.
Ich habe mal eine Kurzanleitung geschrieben, die vielleicht hilfreich sein könnte.
Dafür gibt es mehrere Möglichkeiten:
- Wim
- Emacs
- Git
- Bash/Externes Tool
- Git-Anhang (All-in-One-Lösung)
Welche sind alle hier detailliert:
- Wenn Sie dies in Vim tun möchten:
Dann würde ich empfehlen, den Undo-Verlauf zu verwenden, der sich nicht nur (wie der Name schon sagt) auf die Handlung von undo
bezieht eine Aktion im Vim-Editor erstellen, sondern auch die, die Sie speichern. Mehr hier.
Folgendes zu Ihrem .vimrc
hinzufügen :
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
Wird dafür sorgen, dass alle Änderungen/Rückgängigmachungen dauerhaft im Verzeichnis undodir
gespeichert werden unter Ihrem lokalen vimDir
, was standardmäßig entweder .vim
ist in Ihrem Home-Verzeichnis oder andere, die in der Ausgabe von :version
erwähnt werden oder --version
auf der Kommandozeile.
Für noch mehr Kontrolle über Ihren Undo-Verlauf würde ich empfehlen, auch Undotree zu verwenden, um das Erlebnis zu ergänzen.
- Wenn Sie vorhaben, dies auf Emacs zu tun:
Es gibt ein ähnlich benanntes Paket namens Undotree, das ähnliche Dinge tut. Weitere Informationen zum Undo-Verlauf finden Sie hier.
- Wenn Sie einen
Git
bevorzugen Lösung:
Ich würde empfehlen, git-autocommit zu verwenden, ein kleines Bash-Skript, bei dem es sich bei git nur um Abhängigkeiten handelt, die das aktuelle git-Verzeichnis (wo Sie es starten) auf neue Dateien/oder geänderte Dateien überwachen und diese festschreiben. P>
Angesichts der Natur von Git
Es behält alle Änderungen an der Datei bei, und obwohl es nicht für ein Produktions-/ernsthaftes Projekt geeignet wäre, ist es eine nützliche Lösung, wenn es Ihnen nichts ausmacht, keine Commit-Nachricht/allgemeine Commit-Nachricht zu haben (die Sie jederzeit bearbeiten/hinzufügen können später).
Starten Sie es, nachdem Sie in das gewünschte Git-Verzeichnis navigiert sind (das zuerst mit git init
erstellt wird in einem bestimmten Verzeichnis, weitere Informationen im offiziellen Handbuch) wie folgt:
screen -dmS namehere git-autocommit -i 1 -V
wenn Sie screen
verwenden , für tmux
:
tmux new -n namehere git-autocommit -i 1 -V
ansonsten:
git-autocommit -i 1 -V
reicht aus, wenn Sie es vorziehen, es nicht im Hintergrund zu haben.
- Wenn Sie einen
Bash
bevorzugen Lösung:
Ich würde empfehlen, inotify-tools
zu verwenden oder genauer gesagt inotifywatch
das eine Datei/ein Verzeichnis erkennen und (wie der Name schon sagt) auf Änderungen überwachen kann, die Sie dann bearbeiten können (z. B. an einem anderen Ort speichern usw.).
Hier das Flag, das mit inotifywatch
verwendet werden soll :
inotifywait -r -m -q -e close_write --format %w%f yourdirectorypathhere
und hier ein Beispiel Bash
Skript mit dem obigen:
#!/bin/bash
inotifywait -r -m -q -e close_write --format %w%f directorytowatch | while IFS= read -r file; do
process $file
done
Wobei process
kann alles sein, was Sie wollen, wie tar
wenn Sie eine Sicherungskopie bei Dateiänderungen erstellen möchten, oder mit rclone
wenn du es irgendwo hochladen willst...
- Wenn Sie eine All-in-One-Lösung wünschen:
Ich würde git-annex
empfehlen die nicht nur Git
umfassen aber viele andere externe Tools, wie inotify-tools
, bash
, tar
, rclone
, borg
usw.
Mehr Infos hier.
Wenn Sie später Lust haben, das Wiki/Forum zu lesen, können Sie es auch lokal für das Offline-Lesen klonen:
git clone git://git-annex.branchable.com
für die Website, das Forum (es ist alles in Markdown, also sehr schnell herunterzuladen...) und die Codebasis (es ist in Haskell!) usw.
Ein anderer Ansatz, der alle Dateien in einem bestimmten Dateisystem abdeckt, ist die Verwendung eines protokollstrukturierten Dateisystems wie NILFS.
Solche Dateisysteme hängen Änderungen an, sie ersetzen keine Daten. Dies ist praktisch gleichbedeutend mit kontinuierlichem Snapshot (oder vielmehr Checkpointing) und ermöglicht es Ihnen, das Dateisystem an verschiedenen Stellen in der Vergangenheit erneut zu besuchen. Ältere Checkpoints können ab einem bestimmten Alter bereinigt werden, aber Checkpoints können in permanente Snapshots umgewandelt werden, und es ist möglich, dies zu automatisieren, z. B. um einen Snapshot pro Stunde für den letzten Monat und dann einen pro Tag aufzubewahren für sechs Monate, dann eine pro Woche usw.
NILFS wird unter Linux gut unterstützt und ist sehr effektiv, wenn es für /home
verwendet wird .