Editor gesucht der nach jeder Dateiänderung SiKopie schreibt

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Hans-Wilhelm
Beiträge: 332
Registriert: 07.06.2007 20:01:12

Editor gesucht der nach jeder Dateiänderung SiKopie schreibt

Beitrag von Hans-Wilhelm » 03.12.2012 11:00:57

Ich bin zur Zeit mit bluefish unterwegs. Bluefish legt eine Sicherungskopie von einer Datei an. Ändere ich die anschliessend erneut, wird diese Sicherungskopie überschrieben. Das ist mir jetzt zum Verhängnis geworden.

Was ich suche ist ein Editor der nach jeder Dateiänderung eine neue Sicherungskopie anlegt und die nach Möglichkeit mit Datum und Uhrzeit im Dateinamen abspeichert. Bluefish kann das nicht. Welcher Editor kann das?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Editor gesucht der nach jeder Dateiänderung SiKopie schr

Beitrag von Cae » 03.12.2012 14:37:50

Du koenntest (und solltest) das Ganze unabhaengig vom Editor halten, und einfach die Daten nach jedem Schreiben sichern. Dafuer bietet sich Git in Kombination mit inotifywait (Debianinotify-tools) an:

Code: Alles auswählen

$ cd projectdir       # darin wird gearbeitet
$ git init            # Repository initialisieren
$ git add myfile      # die zu bearbeitende Datei Git gegenueber bekannt machen
$ git commit -m'init' # ... und ihren aktuellen Zustand im Repository speichern
$ while :; do inotifywait -e modify myfile; git add myfile; git commit -m"autocommit"; done
#- die Schleife blockiert die Shell nun. Datei editieren.
Die letzte Zeile blockt nun am inotifywait, bis die Datei myfile neu geschrieben wird. Direkt danach wird sie als "Repository-Kandidat" markiert und in's Repository eingepflegt.

myfile sollte *keine* Sicherungskopie sein, die evtl. haeufiger als das Original abgespeichert wird, sondern das Original selbst.

Dazu noch ein paar Git-Basics: Wenn du irgendwas vermurkst hast, schaust du mit git log (alle Git-Befehle im Projektverzeichnis!) nach, welcher Zeitpunkt wohl noch unkaputt ist. Fuer diesen kopierst du die darueber liegende commit-ID (commit 6c597dc1a66434091d7aef13c0294998c506501d) und faehrst git checkout 6c597dc1a66434091d7aef13c0294998c506501d. Anschliessend ist das Verzeichnis fuer alle getrackten Dateien wieder im alten Zustand. Dann kann man irgendwas mit den alten Daten machen, diffen [1], oder sonstwas. Danach setzt man das Arbeitsverwzeichnis mit git checkout HEAD wieder in den Hauptzustand zurueck und arbeitet weiter. Debiangitk ist auch eine nette, uebersichtliche GUI zum Betrachten von Git-Repositories.

Als Alternative kann man natuerlich Git weglassen und irgendwo Datei-basiert hinsichern:

Code: Alles auswählen

$ cd projectdir
$ mkdir versions || :
$ while :; do inotifywait -e modify myfile; cp -ab myfile "versions/$(date +%s)-myfile"; done
Dann hat man in ./versions haufenweise Dateien namens 1354541060-myfile, 1354541101-myfile, und so weiter. Der Timestamp im Sekundenformat ist besser fuer die Verwaltung, aber eher antiintuitiv. Abhilfe:

Code: Alles auswählen

$ ls versions/* | mawk -F- '$1 ~ /^13/ { printf $0 "\t"; system("date -d @" $1 " +%F.%T"); }'
Die Regex ueberprueft (simpel) auf einen folgenden Timestamp; in diesem Fall wird das erste Feld an date uebergeben, welches etwas wie 2012-12-03.14:24:20 herausformatiert [2]. Dann hat man eine Liste, wo vorne der Dateiname steht und hinten der lesbare Timestamp dazu.

Gruss Cae

[1] git difftool eignet sich gut; es benoetigt keinen checkout
[2] ja, der GNU-awk hat auch strftime(), der ist aber unportabel.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

uname
Beiträge: 12469
Registriert: 03.06.2008 09:33:02

Re: Editor gesucht der nach jeder Dateiänderung SiKopie schr

Beitrag von uname » 03.12.2012 14:43:51

Vim kennt mehere Arten von Versionskontrolle. Ok man muss den Vim mögen ;-) und das Installieren der Plugins verstehen. Ich habe es mal getestet mit den Plugins

Basis writebackup
http://www.vim.org/scripts/script.php?script_id=1828

Versionskontrolle writebackupVersionControl
http://www.vim.org/scripts/script.php?script_id=1829

Automatik writebackupAutomator
http://www.vim.org/scripts/script.php?script_id=3940

Leider habe ich es noch nicht hinbekommen, dass bei jedem Speichern der Datei direkt eine neue Version gespeichert wird. Hiermit kann man jedoch per ":W" neue Versionen speichern bzw. täglich werden neue Versionen erzeugt. Gibt aber auch bestimmt dafür ein besseres Plugin. Persönlich nutze ich die Funktionen nicht. Ich habe tägliche inkrementelle Backups für alle Dateien und halte eine Version pro Tag für ausreichend. GIT ist aber auch eine gute Alternative. Dann kann man auch seinen Editor behalten. Das mit dem "inotifywait" und der endlosen while-Schleife ist so eine Sache. Persönlich wäre mir das wohl zu unsicher.

Antworten