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

Automatische Versionierung bei Dateiänderung (ändern/erstellen/löschen)

1. Allzweckmethode mit bazaar &inotify

Dies ist von mir nicht getestet, aber ich habe diesen Artikel gefunden, der bzr verwendet (Basar) &inotifywait um ein Verzeichnis zu überwachen und die darin enthaltenen Dateien mit bazaar zu kontrollieren.

Dieses Skript erledigt die ganze Arbeit, das Verzeichnis auf Änderungen zu überwachen:

#!/bin/bash

# go to checkout repository folder you want to watch
cd path/to/www/parent/www
# start watching the directory for changes recusively, ignoring .bzr dir
# comment is made out of dir/filename
# no output is shown from this, but wrinting a filename instead of /dev/null 
# would allow logging
inotifywait –exclude \.bzr -r -q -m -e CLOSE_WRITE \
    –format=”bzr commit -m ‘autocommit for %w/%f’” ./ | \
    sh  2>/dev/null 1>&2 &
# disown the pid, so the inotify thread will get free from parent process
# and will not be terminated with it
PID=`ps aux | grep inotify | grep CLOSE_WRITE | grep -v grep | awk ‘{print $2}’`
disown $PID

# this is for new files, not modifications, optional
inotifywait –exclude \.bzr -r -q -m -e CREATE \
    –format=”bzr add *; bzr commit -m ‘new file added %w/%f’” ./ | \
    sh  2>/dev/null 1>&2 &
PID=`ps aux | grep inotify | grep CREATE | grep -v grep | awk ‘{print $2}’`
disown $PID

exit 0;

2. Verwaltung von /etc

Für den Sonderfall der Verwaltung Ihres Systems /etc Verzeichnis können Sie die App etckeeper.

verwenden

etckeeper ist eine Sammlung von Tools, mit denen /etc in einem Git-, Mercurial-, Darcs- oder Bzr-Repository gespeichert werden kann. Es hängt sich in apt (und andere Paketmanager, einschließlich yum und pacman-g2) ein, um Änderungen, die während Paket-Upgrades an /etc vorgenommen werden, automatisch festzuschreiben. Es verfolgt Dateimetadaten, die Revisionskontrollsysteme normalerweise nicht unterstützen, die aber für /etc wichtig sind, wie etwa die Berechtigungen von /etc/shadow. Es ist ziemlich modular und konfigurierbar und gleichzeitig einfach zu verwenden, wenn Sie die Grundlagen der Arbeit mit der Versionskontrolle verstehen.

Hier ist ein gutes Tutorial für den Einstieg.

3. Verwendung von git und incron

Diese Technik verwendet git und incron . Für diese Methode müssen Sie Folgendes tun:

A. Erstellen Sie ein Repository

% mkdir $HOME/git
% cd $HOME/git
% git init

B. Erstellen Sie eine $HOME/bin/git-autocommit Skript

#!/bin/bash

REP_DIR="$HOME/git"       # repository directory
NOTIFY_DIR="$HOME/srv"    # directory to version

cd $REP_DIR
GIT_WORK_TREE=$NOTIFY_DIR /usr/bin/git add .
GIT_WORK_TREE=$NOTIFY_DIR /usr/bin/git commit -a -m "auto"

C. Fügen Sie incrontab einen Eintrag hinzu

% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit

4. Verwenden von Flashbake

Eine andere Möglichkeit ist die Verwendung eines Tools wie Flashbake. Flashbake ist das Versionskontrollsystem, das Cory Doctorow (berühmt für BoingBoing) verwendet, um seine Bücher zu schreiben.

Flashbake verwendet Git unter der Haube, um Änderungen nachzuverfolgen, liegt aber irgendwo zwischen dem Erstellen automatischer Backups und der Verwendung eines einfachen Versionskontrollsystems selbst.

Cory wollte, dass die Version Eingabeaufforderungen enthält, Momentaufnahmen dessen, wo er sich zum Zeitpunkt eines automatischen Commit befand und was er dachte. Ich skizzierte schnell ein Python-Skript, um die gewünschten Kontextinformationen abzurufen, und fing an, ein Shell-Skript zusammenzuhacken, um Git zu steuern, wobei ich die Ausgabe des Python-Skripts für den Commit-Kommentar verwendete, wenn ein Cron-Job den Shell-Wrapper aufrief.

Ressourcen

  • Automatische Dateiüberarbeitung beim Hochladen

Da fällt mir sofort ZFS ein. Es kann Snapshots erstellen - und es gibt einige Projekte, die Snapshots automatisch erstellen.


Ich denke, Sie sind mit inotify auf dem richtigen Weg . Dieser Artikel beschreibt die grundlegende Verwendung in einem ähnlichen Fall wie Ihrem. Ich würde vorschlagen, es entweder direkt zu verwenden oder ein Dienstprogramm auf Kernel-Ebene wie fschange zu kompilieren. Das ist etwas umständlich, aber Sie könnten dann die Erkennung von Änderungen an git commit binden oder ähnliches.

Diese Lösungen haben beide das Problem, sich auf etwas unvollkommene Lösungen von Drittanbietern zu verlassen. Wenn es Ihnen nichts ausmacht, sich die Hände schmutzig zu machen, bietet NodeJS eine hervorragende, plattformübergreifende Einrichtung (fs.watch) für genau diesen 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 auf Dateien überwacht und dann (über child_process) schält und einen git commit ausführt oder ähnliches (oder erhöht sogar manuell einen Versionsdateiindex, wenn Sie den Roll-Your-Own-Ansatz mögen).

fs.watch wird durch inotify unterstützt unter Linux, ist aber viel intuitiver zu bedienen. Es gibt andere NodeJS-Projekte, die diese Dateiüberwachungsfunktionalität in verschiedenen Komfortstufen verpacken, wie dieses oder dieses.


Linux
  1. So erstellen Sie einen Swap unter Linux

  2. So erstellen Sie eine Auslagerungsdatei unter Linux

  3. Vim:Datei mit +x Bit erstellen?

  4. Was zählt als Dateimodifikation oder -änderung?

  5. Wie erstelle ich eine temporäre Datei im Shell-Skript?

So erstellen Sie eine Datei unter Linux

So erstellen Sie eine Tar-Gz-Datei

Chown-Befehl in Linux (Dateibesitz ändern)

4 Möglichkeiten zum Erstellen einer neuen Datei unter Linux

Linux-Dateiverwaltungsbefehle zum Erstellen, Kopieren, Verschieben und Löschen von Dateien

Erstellungsdatum der Datei ändern