Ich suche eine Implementierung (unter Linux) eines Mechanismus, der Änderungen in einem Verzeichnis (rekursiv) automatisch und transparent versioniert. Dies soll eine Ergänzung (möglicherweise ein Ersatz, wenn alle angeforderten Funktionen verfügbar sind) zur Standardversionierung (SVN, Git, ...) sein.
Ein Produkt unter MS Windows, das dies tut, ist AutoVer (um eine bessere Vorstellung von den Anforderungen zu haben). Ich würde gerne so etwas haben, aber auf Linux in einer nicht-grafischen Umgebung abzielen.
Ich habe gesehen, dass es einige Versuche gibt, diese Funktionalität unter Linux zu haben. Die nächste, die ich gefunden habe, ist die automatische Versionierung unter Subversion, aber es ist nicht offensichtlich, sie in vorhandenen Umgebungen zu implementieren (Server, auf denen zum Beispiel Konfigurationsdateien lokal sind).
Vielleicht etwas, mit dem ich arbeite inotify
?
Vielen Dank im Voraus für alle Hinweise! WoJ
Antworten:
1. Allzweckmethode mit Basar & Inotify
Dies ist von mir nicht getestet, aber ich habe diese Beschreibung gefunden , die
bzr
(bazaar) &inotifywait
zur Überwachung eines Verzeichnisses und zur Versionskontrolle der darin enthaltenen Dateien mithilfe von bazaar verwendet.Dieses Skript überwacht das Verzeichnis auf Änderungen:
2. Verwalten von / etc
Für den speziellen Fall Ihres Systems verwalten
/etc
Verzeichnis, können Sie die App verwenden etckeeper .Hier ist ein gutes Tutorial , um Ihnen den Einstieg zu erleichtern.
3. Mit Git und Incron
Diese Technik nutzt
git
undincron
. Für diese Methode müssen Sie Folgendes tun:A. Mach ein Repo
B. Erstellen Sie ein
$HOME/bin/git-autocommit
SkriptC. Fügen Sie einen Eintrag zu incrontab hinzu
4. Flashbake verwenden
Eine andere Möglichkeit ist die Verwendung eines Tools wie Flashbake . Flashbake ist das Versionskontrollsystem, mit dem Cory Doctorow (von BoingBoing) seine Bücher schreibt.
Flashbake verwendet git under the hood, um Änderungen nachzuverfolgen, liegt jedoch zwischen automatisierten Sicherungen und der Verwendung eines einfachen Versionskontrollsystems.
Ressourcen
quelle
Sofort fällt mir ZFS ein . Es können Schnappschüsse erstellt werden - und es gibt einige Projekte , mit denen Schnappschüsse automatisch erstellt werden können .
quelle
Ich denke, Sie sind auf dem richtigen Weg
inotify
. Dieser Artikel beschreibt die grundlegende Verwendung in einem ähnlichen Fall wie Sie. Ich würde vorschlagen, es entweder direkt zu verwenden oder ein Dienstprogramm auf Kernel-Ebene wie fschange zu kompilieren . Dies ist etwas umständlich, aber Sie können dann die Erkennung von Änderungen an einegit commit
oder eine ähnliche Funktion binden .Diese Lösungen haben beide das Problem, sich auf etwas unvollkommene Lösungen von Drittanbietern zu verlassen. Wenn Sie nichts dagegen nicht die Hände schmutzig zu machen, NodeJS bietet eine hervorragende, plattformübergreifende Einrichtung ( fs.watch ) für diesen genauen Zweck. Ein grundlegendes Tutorial zum Überwachen von Dateien auf Änderungen in NodeJS finden Sie hier . In ein paar Dutzend Zeilen oder weniger könnten Sie etwas schreiben, das ein Verzeichnis nach Dateien überwacht , dann (über child_process ) aussortiert und einen
git commit
oder einen ähnlichen Index ausführt (oder sogar manuell inkrementiert, wenn Sie den Roll-Your-Your-Process-Index mögen). eigener Ansatz).fs.watch
wird voninotify
Linux unterstützt, ist aber viel intuitiver zu bedienen. Es gibt andere NodeJS-Projekte, die diese Dateiüberwachungsfunktionalität in verschiedenen Komfortstufen wie dieser oder dieser umschließen .quelle
inotify
. Aber danke.Inotify (2) unter Linux kann einen großen Baum nicht überwachen, Fuse-Dateisysteme (an einem separaten Speicherort bereitgestellt) können dies jedoch möglicherweise tun, indem Dateisystemanforderungen in svn- oder git-Aufrufe übersetzt oder svn / git-Metadaten direkt geändert werden.
Dies ist eine sehr interessante Idee, aber ich hatte noch keine vorhandenen Implementierungen gehört.
quelle
Ein solches Skript ist nicht schwer zu schreiben.
Meine Lieblingsversionskontrolle ist Git.
Folgendes Skript sollte es tun:
Lassen Sie dies entweder regelmäßig Ihr Verzeichnis überprüfen - oder rufen Sie Ihren Editor nach dem Speichern über ein Skript auf.
Wenn Sie dies jedoch tun, ist es möglicherweise sinnvoll, große Dateien und möglicherweise einige "nutzlose" wie Autosaves auszuschließen.
quelle
SparkleShare ( http://sparkleshare.org ) basiert auf git und implementiert eine Dropbox- ähnliche Funktionalität mit Versionskontrolle, Sie müssen jedoch einen ssh-Server einrichten (kann localhost sein).
quelle
Ich würde dir empfehlen, NILFS auszuprobieren. Siehe die über Seite und Sie werden Quicky Lage zu entscheiden , whther das ist die eine , was Sie für oder nicht suchen.
HTH
quelle
Es gibt auch einen "armen Mann", der nur Rsync und einen Cron-Job verwendet. Grundsätzlich verlassen Sie sich auf die Backup-Funktion von rsync und verwenden zwei separate Pfade sowie ein Präfix / Suffix, um die Übersicht über Ihre Dateien zu behalten.
Es sieht mehr oder weniger so aus: / usr / bin / rsync -a -A -X --backup --suffix =
date +".%Y-%m-%d_%H-%M-%S"
$ source_path $ backup_pathEndergebnis: Wenn Sie nach der ersten Ausführung eine Datei mit dem Namen test_rsync im Quellpfad ändern, wird im Sicherungspfad eine Datei mit dem Namen test_rsync.2017-02-09_11-00-01 erstellt.
Es gibt eine Reihe von Problemen damit (es funktioniert nur, wenn Sie eine anständige Menge an Dateien haben und schlägt fehl, wenn Änderungen zwischen zwei aufeinander folgenden Rsync-Durchläufen vorgenommen werden (in meinem Fall 1 Minute)), aber es reicht möglicherweise für Ihre Anforderungen aus.
Wenn wir hier über Samba-Freigaben sprechen, könnte eine Ausschlussliste in Ordnung sein, habe ich leider noch nicht verstanden.
Lassen Sie mich wissen, wenn Sie dies verbessern.
quelle
Hier ist ein Python3-Skript, mit dem VMS die automatische Dateiversionierung mithilfe eines Zeitstempels ausführt, der beim Speichern an den ursprünglichen Dateinamen angehängt wird.
Ich habe eine Reihe von Kommentaren in das Skript eingefügt und ein halbes Dutzend solcher Skripte auf meinem Ubuntu-Computer ausgeführt, wobei nur die Verzeichnisse in den verschiedenen Versionen des Skripts unterschiedlich sind, sodass ich mehrere Verzeichnisse gleichzeitig versioniere. Keine wirkliche Beeinträchtigung der Maschinenleistung.
! / usr / bin / env python3
print ("PROJECT FILES VERSIONING STARTED") print ("version_creation.py") #Legen Sie den gesamten Code in das Skript dieses Namens. print ("run as .. 'python3 version_creation.py' from command line") print ("ctrl ' c 'to stop ") print (" ") print (" Um das Programm im Hintergrund auszuführen, geben Sie unten den Befehl ein und schließen Sie das Fenster. ") print (" nohup python3 version_creation.py ") print (" .... to Prozess stoppen, Menü / Administration / Systemüberwachung starten ... und python3 beenden ") print (" ") print (" Dateien immer im Verzeichnis 'ProjectFiles' und in den Versionsdateien speichern ") print (" wird ebenfalls in diesem Verzeichnis erstellt . ") print (" ") print (" ") print (" ") print (" ")
importiere bis importiere und importiere Zeit
--- Stellen Sie das Zeitintervall ein, nach dem nach neuen Dateien gesucht werden soll (in Sekunden)
- Dieses Intervall sollte kürzer sein als das Intervall, in dem neue Dateien angezeigt werden!
t = 10
--- Setzt das Quellverzeichnis (dr1) und das Zielverzeichnis (dr2)
dr1 = "/ path / to / source_directory"
dr2 = "/ path / to / target_directory"
import glob import os
dr1 = "/ home / michael / ProjectFiles" # Beide Originale und Versionen werden in diesem Verzeichnis gespeichert
dr2 = "/ home / michael / ProjectFileVersions"
während wahr:
drucken ("leer")
print ("1 Latest_file_path =", latest_file_path)
print ("2 originalname =", originalname)
print ("filecreation =", Dateierstellung)
print ("fivesec_ago =", fivesec_ago)
print ("timedif =", timedif)
Teilen
das untenstehende wurde früher eingefügt und funktioniert, aber ich mag das obige Python-Skript viel besser ...... (benutze Python seit ca. 3 Stunden)
quelle