1. Allzweckmethode mit Basar & Inotify
Dies wurde von mir nicht getestet, aber ich habe dieses Schreiben gefunden, das bzr
(basar) & verwendet inotifywait
, um ein Verzeichnis zu überwachen und die darin enthaltenen Dateien mit basar zu kontrollieren.
Dieses Skript erledigt das Verzeichnis auf Änderungen:
#!/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 ‘’` 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 ‘’` disown $PID exit 0;
2. Verwalten von / etc
Für den speziellen Fall der Verwaltung Ihres Systemverzeichnisses /etc
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. Apt (und andere Paketmanager, einschließlich yum und pacman-g2) können automatisch Änderungen an / etc übernehmen, die während der Paketaktualisierung vorgenommen wurden. Es verfolgt Dateimetadaten, die Revisionskontrollsysteme normalerweise nicht unterstützen. Dies ist jedoch für / etc wichtig, beispielsweise die Berechtigungen von / etc / shadow. Es ist ziemlich modular und konfigurierbar, aber auch einfach zu verwenden, wenn Sie die Grundlagen der Arbeit mit der Revisionskontrolle kennen.
Hier ist ein gutes Tutorial, um den Einstieg zu erleichtern.
3. Mit git und inkrement
Diese Technik verwendet git
und incron
. Für diese Methode müssen Sie Folgendes tun:
A. Repo erstellen
% mkdir $HOME/git % cd $HOME/git % git init
B. Erstellen Sie ein $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 einen Eintrag zu Incrontab hinzu
% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit
4. Flashbake verwenden
Eine andere Option ist die Verwendung eines Tools wie Flashbake . Flashbake ist das Versionskontrollsystem, mit dem Cory Doctorow (von BoingBoing berühmt) seine Bücher schreibt.
Flashbake verwendet git unter der Haube, um Änderungen nachzuverfolgen, liegt jedoch irgendwo zwischen automatisierten Backups und einem einfachen Versionskontrollsystem.
Cory wollte, dass die Version Aufforderungen und Momentaufnahmen davon enthielt, wo er sich zu dem Zeitpunkt befand, an dem sich ein automatisches Commit befand, und was er dachte. Ich entwarf schnell ein Python-Skript, um die Kontextinformationen abzurufen, die er wollte, und fing an, ein Shell-Skript zu hacken, um git zu fahren, und benutzte die Ausgabe des Python-Skripts für den Commit-Kommentar, wenn ein Cron-Job den Shell-Wrapper aufrief.