GNU/Linux >> Linux の 問題 >  >> Linux

ファイル変更時の自動バージョン管理 (変更/作成/削除)

1. bazaar と inotify を使用した汎用メソッド

これは私がテストしていませんが、 bzr を利用するこの記事を見つけました (バザー) &inotifywait ディレクトリを監視し、bazaar を使用してディレクトリ内のファイルをバージョン管理します。

このスクリプトは、ディレクトリの変更を監視するすべての作業を行います:

#!/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. /etc の管理

システムの /etc を管理する特別な場合 ディレクトリ、アプリ etckeeper を使用できます。

<ブロック引用>

etckeeper は、/etc を git、mercurial、darcs、または bzr リポジトリに格納できるようにするためのツールのコレクションです。 apt (および yum や pacman-g2 を含む他のパッケージ マネージャー) にフックして、パッケージのアップグレード中に /etc に加えられた変更を自動的にコミットします。これは、リビジョン管理システムが通常サポートしていないが、/etc/shadow のアクセス許可など、/etc にとって重要なファイル メタデータを追跡します。これは非常にモジュラーで構成可能ですが、リビジョン管理の基本を理解していれば簡単に使用できます。

これを始めるのに役立つチュートリアルがあります。

3. git と incron の使用

このテクニックは git を利用します と incron .この方法では、次のことを行う必要があります:

A. レポを作る

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

B. $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. incrontab にエントリを追加

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

4.フラッシュベイクの使用

もう 1 つのオプションは、Flashbake などのツールを使用することです。 Flashbake は、Cory Doctorow (BoingBoing で有名) が本を書くために使用するバージョン管理システムです。

Flashbake は内部で git を使用して変更を追跡しますが、自動バックアップを行うことと、単純なバージョン管理システムを自分で使用することの間のどこかです。

<ブロック引用>

Cory は、プロンプト、自動コミットが発生したときのスナップショット、および彼が考えていたことのバージョンを保持することを望んでいました。必要なコンテキスト情報を引き出す Python スクリプトをすばやくスケッチし、git を駆動するシェル スクリプトのハッキングを開始しました。これは、cron ジョブがシェル ラッパーを呼び出したときのコミット コメントに Python スクリプトの出力を使用します。

リソース

  • アップロード時の自動ファイル修正

すぐにZFSが思い浮かびます。スナップショットを作成できます - スナップショットを自動的に作成するプロジェクトがいくつかあります。


inotify で正しい方向に進んでいると思います .この記事では、あなたと同様のケースでの基本的な使用法について詳しく説明します。直接使用するか、fschange などのカーネルレベルのユーティリティをコンパイルすることをお勧めします。これはちょっと面倒ですが、変更の検出を git commit にバインドできます。 または類似。

これらのソリューションにはどちらも、やや不完全なサードパーティのソリューションに依存しているという問題があります。手を汚してもかまわないのであれば、NodeJS はまさにこの目的のために優れたクロスプラットフォーム機能 (fs.watch) を提供します。 NodeJS でのファイルの変更を監視するための基本的なチュートリアルは、ここにあります。数十行以下で、ファイルのディレクトリを監視し、(child_process を介して) シェルアウトして git commit を実行する何かを書くことができます。 または同様のもの (または、独自のアプローチが好きな場合は、バージョン ファイル インデックスを手動でインクリメントすることもできます)。

fs.watch inotify によってサポートされています Linux で使用できますが、はるかに直感的に使用できます。このプロジェクトやこのプロジェクトのように、さまざまなレベルの利便性でファイル監視機能をラップする NodeJS プロジェクトが他にもあります。


Linux
  1. Linuxでスワップファイルを作成する方法

  2. ファイルをインプレースで変更する方法は?

  3. `cut`でファイルを変更しますか?

  1. Vim:+ xビットでファイルを作成しますか?

  2. ファイルの変更または変更として何がカウントされますか?

  3. シェルスクリプトで一時ファイルを作成するにはどうすればよいですか?

  1. Linuxで暗号化されたファイルボルトを作成する

  2. 誰がChmodを実行できるかを変更しますか?

  3. 所有者にファイルの作成と読み取りを許可しますが、変更または削除は許可しません