変更/追加されたリポジトリのファイルのみを自動的に更新したい(svnlookを使用して) 。
あなたは自分が何をしたいのかはっきりしていません。
- ある種の ...たとえば... Web サイトを実行していて、開発者が Subversion リポジトリのファイルを変更したときに、それらの変更で Web サイトを自動的に更新したいですか?
- ディレクトリを監視していて、そのディレクトリでファイルが変更された場合、それらの変更を Subversion リポジトリに保存しますか?
コミット後またはコミット前のフック スクリプトでは #2 を実行できないため、#1 を実行することをお勧めします。pre-commit/post-commit フック スクリプトは、誰かがコミットしたときにのみ実行されるため、ディレクトリ自体を変更することはできません。
したがって、リポジトリにファイルがあり、それらのファイルを使用する何らかのサーバーにディレクトリがあります。リポジトリに変更があったときに、これらのファイルを自動的に更新するプロセスが必要です。
これを処理するいくつかの方法:
- サーバーとファイルを含むマシン上。ファイルを含むディレクトリが Subversion の作業ディレクトリであることを確認してください。Subversion 1.7 を使用している場合、唯一の
.svn
ディレクトリは作業ディレクトリのルートにあるため、作業が少しすっきりして管理しやすくなります。ここで必要なのは、スケジュールされたタスク (Unix 用語での cronjob) だけです。たとえば、5 分ごとに実行されます。このタスクは、その作業ディレクトリで更新を実行するだけです。コミット後のフックは必要ありません。
- post-commit フック スクリプトからアクセスできる Subversion サーバー上の作業ディレクトリを作成できます。コミットが発生すると、ポストコミット フックがその作業ディレクトリを更新し、これらのファイルがあるサーバー上のディレクトリに対してrsyncを実行します。rsyncは変更されたファイルのみをコピーするため、ディレクトリの内容全体をコピーするよりも高速です。問題は、すべてのコミットの後、コミットを行ったユーザーがコミット後のフックがその作業ディレクトリと rsync を更新するのを待ってから、他のことを行う必要があることです。
- より良い方法は、Jenkinsのような継続的インテグレーション ツールを使用して、コミット後のフックに頼るのではなく、誰かがコミットを行うたびに必要なことを自動的に行うことです。Jenkins はすべてをログに記録し、問題があったかどうかを知らせます。
私の好みは#3で、次に#1です。post-commit フックを使用すると、単に Subversion の速度が低下し、開発者がイライラします。Jenkins は簡単にセットアップして実行できます。それらのサポートは優れており、Subversion と同様に無料のオープン ソース ツールです。
これらのファイルを含むサーバーがコミット後に自動的に更新を実行するように Jenkins をセットアップできます。実際、セットアップは非常に簡単です。ただし、通常は次のことをお勧めします。
- サーバーは directory を使用するように構成されています
C:\foo
。
- コミットを更新し、ディレクトリ
C:\bar
をsvn export
作成し、ディレクトリなしで新しいクリーンなディレクトリを作成します.svn
。
svn export finishes, you rename
C:\bar to
C:\foo`の後。サーバーは現在、新しいディレクトリを使用しています。
これには、ファイルの更新中にサーバーがディレクトリを使用しないという利点があります。、、、の 3 つのファイルがあるfilea.txt
とfileb.txt
しfilec.txt
ます。fileb.txt
とに変更が加えられfilec.txt
ます。これらの変更は一緒に行われ、同時に展開されないと悲惨な結果が発生します (解雇されます)。
更新プロセスのある時点で、fileb.txt
は新しいバージョンにfilec.txt
なり、 は古いバージョンになります。確かに、更新が完了する前にサーバーが の新しいバージョンfileb.txt
と古いバージョンの両方を使用する可能性はほとんどありませんが、それに賭けてみませんか? .filec.txt
そこで、Subversion の速度を落とさずにやりたいことをやってくれる Jenkins を見てみましょう。さらに、すべてのアクションをログに記録します。このようにして、どのファイルが変更されたか、更新が成功したかどうか、および必要に応じて変更を簡単にロールバックする機能を確認できます。さらに、サーバー プロセスに特定の変更を加えたくない場合に、Jenkins による更新を一時的に停止する方がはるかに簡単です。