2

私は持っているSVNリポジトリを持っています

trunk/file1.txt
trunk/file2.txt
trunk/fileR.txt

/var/www/trunkサーバー上で、ユーザーが所有するトランク()の作業コピーチェックアウトがありますwww-data

fileR.txtユーザーを除くすべてのユーザーに対して読み取り専用です(またはwww-dataによってアクセスが制限されています)。連結して生成する必要があります:authzsvnlook authorfileR.txtfile1.txtfile2.txtcat file1.txt file2.txt > fileR.txt

trunk/file1.txt私が欲しいのは、またはのいずれかにコミットがあるたびtrunk/file2.txtに、サーバー上の作業コピーを更新し、ファイルを連結して、新しいfileR.txtものをリポジトリにコミットするスクリプトを実行する必要があるということです。

私が念頭に置いていたのは、上記のすべてを実行するコミット後のフックでしたが、前のコミットが完了するまで、SVNが新しいコミットを処理できるかどうかとその方法がわかりません。

例:つまり、変更が加えられたcommit1file1.txtが入り、pre-commitフックが実行され(存在する場合)、トランザクションがデータベースにコミットされてから、post-commitフックが実行されます。post-commitフックは、commit1からのpost-commitフックが実際に終了する前に、ファイナライズする必要があるcommit2を実際に作成します。

SVNはこれを行うことができますか?そうでない場合は、他にどのようなツール/ワークフローを提案しますか?

ありがとう

4

1 に答える 1

1

コミット後のフックを作成して、やりたいことを実行するとします...

  1. file1.txtに変更を加えます。
  2. コミット後のフックが変更を取得し、新しいファイルfileR.txtを作成します
  3. コミット後の変更により、この変更がコミットされ、コミット前のフックが起動します。
  4. そして、あなたはすぐにステップ#1に戻ります

コミット後フックが動作できるサーバー上に作業コピーを作成するという問題もあります。誰かがコミットを行うときは、サーバー上の作業コピーを更新またはチェックアウトし、変更を連結してから、コミットフックを起動せずに新しいコミットを実行する必要があります。人々がブランチを作成する可能性があることを忘れないでください。そのため、複数の作業コピーが必要になる場合があります。

そして、post-commitフックがこれらすべてを実行している間、ユーザーはpost-commitフックが完了するのを待つ必要があります。

さらに、コミットすると、作業コピーが古くなります。サーバーがコミットしたため、コミットしてから更新する必要があります。

これは本当に良い考えではないことをあなたに納得させたと思います。それ可能ですが、それは確かにお勧めできません。実際、ビルドエンジニアがこのようなことをしているのを見たら、私は彼らを解雇します。


Jenkinsをご覧になることをお勧めします。Jenkinsは継続的ビルドサーバーです。コミットが完了するたびに、 JenkinsにfileR.txtファイルを作成させることができます。このファイルは、Jenkinsサーバーから簡単にダウンロードして、一般に公開することができます。また、fileR.txtを取得して、そこにいる間に人々のためにPDFを作成することもできます。

したがって、結合されたファイルは引き続き使用可能であり、他のプロセスでダウンロードできますが、コミット後のフックが別のラウンドのフックを起動することはありません。また、fileR.txtは、その特定のJenkinsジョブにアクセスできるすべてのユーザーのみが読み取ることができます。

于 2011-12-11T03:32:34.743 に答える