1. Método de uso geral usando bazar & inotify
Isso não foi testado por mim, mas eu achei esta escrita up que faz uso de bzr
(bazaar) & inotifywait
para monitorar um diretório e uma versão controlam os arquivos nele usando o bazar.
Este script faz todo o trabalho de observar o diretório em busca de alterações:
#!/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. Gerenciando / etc
Para o caso especial de gerenciar o diretório /etc
do seu sistema, você pode usar o aplicativo etckeeper .
etckeeper is a collection of tools to let /etc be stored in a git, mercurial, darcs, or bzr repository. It hooks into apt (and other package managers including yum and pacman-g2) to automatically commit changes made to /etc during package upgrades. It tracks file metadata that revison control systems do not normally support, but that is important for /etc, such as the permissions of /etc/shadow. It's quite modular and configurable, while also being simple to use if you understand the basics of working with revision control.
Aqui está um bom tutorial para você começar a usá-lo.
3. Usando git e incron
Esta técnica faz uso de git
e incron
. Para este método, você precisa fazer o seguinte:
A. Faça um repo
% mkdir $HOME/git
% cd $HOME/git
% git init
B. Crie um script $HOME/bin/git-autocommit
#!/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. Adicione uma entrada ao incrontab
% sudo incrontab -e $HOME/srv IN_MODIFY,IN_CREATE,IN_MOVED_FROM,IN_MOVED_TO $HOME/bin/git-autocommit
4. Usando o Flashbake
Outra opção é usar uma ferramenta como o Flashbake . Flashbake é o sistema de controle de versão que Cory Doctorow (da fama BoingBoing) usa para escrever seus livros.
O Flashbake usa o git under the hood para rastrear as mudanças, mas está em algum lugar entre fazer backups automáticos e usar um sistema de controle de versão simples.
Cory wanted the version to carry prompts, snapshots of where he was at the time an automated commit occurred and what he was thinking. I quickly sketched out a Python script to pull the contextual information he wanted and started hacking together a shell script to drive git, using the Python script’s output for the commit comment when a cron job invoked the shell wrapper.