GNU/Linux >> Znalost Linux >  >> Linux

Automatické verzování při změně souboru (upravit/vytvořit/smazat)

1. Obecná metoda využívající bazar &inotify

Toto není mnou testováno, ale našel jsem tento zápis, který používá bzr (bazar) &inotifywait sledovat adresář a kontrolovat verzi souborů v něm pomocí bazaru.

Tento skript provádí veškerou práci při sledování změn v adresáři:

#!/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. Správa /etc

Pro speciální případ správy /etc vašeho systému adresář, můžete použít aplikaci etckeeper.

etckeeper je sada nástrojů, které umožňují uložit /etc do úložiště git, mercurial, darcs nebo bzr. Připojí se k apt (a dalším správcům balíčků včetně yum a pacman-g2) a automaticky potvrdí změny provedené v /etc během aktualizace balíčků. Sleduje metadata souborů, která systémy kontroly revize normálně nepodporují, ale to je důležité pro /etc, jako jsou oprávnění /etc/shadow. Je poměrně modulární a konfigurovatelný a zároveň se snadno používá, pokud rozumíte základům práce s řízením revizí.

Zde je dobrý návod, jak s tím začít.

3. Pomocí git a incronu

Tato technika využívá git a incron . Pro tuto metodu musíte provést následující:

A. Vytvořte repo

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

B. Vytvořte $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. Přidejte záznam do incrontab

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

4. Pomocí Flashbake

Další možností je použít nástroj jako Flashbake. Flashbake je systém pro správu verzí, který Cory Doctorow (známý BoingBoing) používá k psaní svých knih.

Flashbake používá git pod kapotou ke sledování změn, ale je někde mezi automatickým zálohováním a vlastním používáním jednoduchého systému správy verzí.

Cory chtěl, aby verze obsahovala výzvy, snímky toho, kde se nacházel v době, kdy došlo k automatickému potvrzení, a co si myslel. Rychle načrtl skript Python, aby získal kontextové informace, které chtěl, a začal hackovat skript shellu k ovládání git pomocí výstupu skriptu Python pro komentář k odevzdání, když úloha cron vyvolala obal shellu.

Zdroje

  • Automatická revize souboru při nahrání

Okamžitě mě napadá ZFS. Umí vytvářet snímky – a existují některé projekty pro automatické vytváření snímků.


Myslím, že jste s inotify na správné cestě . Tento článek podrobně popisuje jeho základní použití v případě podobném tomu vašemu. Doporučil bych jej použít buď přímo, nebo zkompilovat nástroj na úrovni jádra, jako je fschange. To je trochu problém, ale pak byste mohli svázat detekci změn s git commit nebo podobné.

Obě tato řešení mají problém spoléhat se na poněkud nedokonalá řešení třetích stran. Pokud vám nevadí špinit si ruce, NodeJS poskytuje vynikající multiplatformní zařízení (fs.watch) přesně pro tento účel. Základní výukový program pro sledování změn souborů v NodeJS naleznete zde. V několika desítkách řádků nebo méně byste mohli napsat něco, co sleduje adresář pro soubory, a pak to vyloučí (prostřednictvím child_process) a spustí git commit nebo podobně (nebo dokonce manuálně zvýší index souboru verze, pokud se vám líbí přístup „roll-your-own“).

fs.watch je podporována inotify na linuxu, ale jeho použití je mnohem intuitivnější. Existují další projekty NodeJS, které tuto funkci sledování souborů zabalují do různých úrovní pohodlí, jako je tento nebo tento.


Linux
  1. Jak vytvořit swap v Linuxu

  2. Jak upravit soubor na místě?

  3. Provést `vyjmout` Změnit soubor na místě?

  1. Co se počítá jako úprava nebo změna souboru?

  2. Jak vytvořit dočasný soubor ve skriptu Shell?

  3. Změnit Kdo je schopen Chmod?

  1. Vytvořte odkládací soubor Linuxu

  2. Příkazy správy souborů Linux pro vytváření, kopírování, přesouvání a odstraňování souborů

  3. Změnit datum vytvoření souboru