SVN制御下のPHPプロジェクト(VisualSVN)があります。
どういうわけか、現在のリビジョン番号でリポジトリ内のファイルを更新する必要があります。メインサイトが更新/チェックアウトされたときにsvnビルド番号を表示できるようにします(この部分は問題ではありません)。
pre / post-commit-hookでこれを行うことは可能ですか?
SVN制御下のPHPプロジェクト(VisualSVN)があります。
どういうわけか、現在のリビジョン番号でリポジトリ内のファイルを更新する必要があります。メインサイトが更新/チェックアウトされたときにsvnビルド番号を表示できるようにします(この部分は問題ではありません)。
pre / post-commit-hookでこれを行うことは可能ですか?
事前コミットフックではなく、ビルドソリューションが必要なようです。Apache Antのようなビルドシステムを使用すると、ライブ環境向けのソリューションを準備するときに、リポジトリから最新のリビジョン番号を取得できます。
編集:実際にあなたの質問に答えるために「これを行うためにpre / post-commit-hookで可能ですか?」はい、それは技術的に可能ですが、すでに示唆されているように、それは避けるべきです。
pre-commit-hooksとpost-commit-hooksの動作は異なります(フック、特にフックの実装に関する部分については、 SVNレッドブックのドキュメントを参照してください)。
したがって、何かを変更する機会については言及されていません。代わりに、「フックの実装」のセクションに段落があります。
フックスクリプトはほとんど何でも実行できますが、フックスクリプトの作成者が抑制を示す必要がある1つの側面があります。それは、フックスクリプトを使用してコミットトランザクションを変更しないことです。フックスクリプトを使用して、コミットされているファイルに存在するエラー、欠点、またはポリシー違反を自動的に修正したくなるかもしれませんが、そうすると問題が発生する可能性があります。Subversionは、リポジトリデータの特定のビットのクライアント側キャッシュを保持します。この方法でコミットトランザクションを変更すると、それらのキャッシュは検出できないほど古くなります。この不整合は、驚くべき予期しない動作につながる可能性があります。トランザクションを変更する代わりに、pre-commitフックでトランザクションを検証し、必要な要件を満たしていない場合はコミットを拒否する必要があります。ボーナスとして、ユーザーは注意深く、
ですから、そうすることは不可能であるか、少なくとも推奨されていると思います。
mliebeltは正しいテキストを引用しましたが、彼は悪い結論を出しました。2回でも:
2番目のステートメント
コミット後のフックがこのコミットに含まれていないファイルを書き換える場合、それは完全に有効な操作であり、何も壊れませんでした。
最初のステートメント
このソリューションは、多くの理由で明らかに悪いです。
リポジトリ(またはの作業コピー)自体には、最後のリビジョンに関する情報(svn info
、、)があり、データ内に保存すると、OccamのRarozに違反しますsvnversion
。svn log -r HEAD
外部リポジトリを使用するためにデータを「公開」する場合、データを抽出するだけです。
どのツールと使用方法は、ワークフローの展開、OS(通常のWin-boxではgawk-grep-sedされていない)、いくつかのヒントに大きく依存しています。
そしてついに
開発者にファイルを自分で更新するように要求し、pre-commitスクリプトを使用して、更新が正しくない場合にコミットを拒否するのはどうですか?おそらく、リビジョン番号の挿入は、エディターまたはビルドプロセス/デプロイスクリプトにより適切に組み込まれる責任です。