GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Behalten Sie einen Verlauf aller Änderungen an einer Textdatei

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 .


Linux
  1. Wie fügt man Text vor der ersten Zeile einer Datei ein?

  2. Text allen Dateien in einem Ordner voranstellen?

  3. Alle Terminalausgaben in einer Datei speichern?

  4. Ist es möglich herauszufinden, in welchem ​​Vim/tmux die Datei geöffnet ist?

  5. Erstellen Sie Dateien mithilfe der Befehlszeile in Linux

So fügen Sie Text am Anfang einer Datei in Linux hinzu

So entfernen Sie alle Leerzeichen aus einer Textdatei

Entfernen Sie das Git-Repository, aber behalten Sie alle Dateien

Rekursives Cat alle Dateien in einer einzigen Datei

Wie kann man eine Datei komprimieren und die .gz-Datei behalten?

Wie behalte ich meinen Bash-Verlauf sitzungsübergreifend?