svnserveで使用される pre-commit フックが、拡張子のリストに基づいてファイルを「フィルタリング」できる方法はあるのだろうか。"%APPDATA%/subversion/config"のように、Quartus および Nios プロジェクト用の *.cdf *.sof *.elf などの独自の追加パターンを使用して、グローバル無視リストに類似したリストを用意しました。私たちの主な目的は、コミット中に不要なファイルを除外してスペースを節約することです。つまり、「svn status」によって表示されないようにすることです。
Google で多くの検索を行いましたが、満足のいく解決策が見つかりませんでした。私が現在持っているアプローチの 1 つは、Windows バッチ ファイルを作成して、Subversion クライアント側のグローバル無視リストを自動的に有効にし、独自のリストに置き換えることです。問題は明らかです。単一のクライアントでしか機能しません。このフィルタリングをグローバルに適用したい場合は、リポジトリを使用するすべてのクライアントがバッチ ファイルを実行する必要があります。誰もが Windows プラットフォームを使用しているわけではないことは言うまでもありません。
私が見つけた次のアプローチは、svn:ignoreプロパティを再帰的に変更して、各パターンをグローバルに無視できるようにすることでした。繰り返しますが、この方法にはクライアント側の操作が必要であり、維持するのは簡単ではありません。リポジトリ内の現在のディレクトリにのみ適用されます。つまり、新しいディレクトリをインポートすると、無視リストは適用されません。
Python で pre-commit フックを作成しましたが、ログ メッセージの長さとコミットされるファイルのサイズをチェックするだけです。私の理解では、pre-commit フックはトランザクションに変更を加えることは想定されていません。そうしないと、クライアント側の作業キャッシュが一貫性を欠いて使用できなくなり、理解できるからです。フックは次の 2 つのことを行います。
(exit 1) コードでチェックが失敗した場合、コミットを拒否します
コミットをACCEPTして、トランザクションがリポジトリのリビジョンになるようにします
私が最初に考えたのは、このトランザクション内のファイルをフィルタリングする必要がある場合、コミットを拒否することでした。しかし、私の同僚は、プロジェクトを再構築するためにどのファイル拡張子が必要でないか見当がつかないことに加えて、それだけ多くのファイルを自分で管理するのは面倒だと言いました。
クライアント側の操作を伴わずに、フィルタリングのプロセスを自動化する方法が必要だと今でも感じています。今私が考えているのは、次の 2 つの pre-commit フックです。
コミットを拒否し、新しく追加されたプロジェクト プロパティを変更して特定のパターンを無視します (svn:ignore のように)
コミットを受け入れ、不要なファイル トランザクションを無視し、どのファイルが無視されたかをユーザーに通知し、クライアント側の作業キャッシュをリポジトリと一致させるように管理します。
オプション 1 よりもはるかに難しいように見えますが、オプション 2 をお勧めします。
さらに、どのファイルを Quartus II および Nios プロジェクト専用のバージョンに配置する必要があるかを提案してください。つまり、これらのファイルをチェックアウトした直後にプロジェクト全体を再構築できます。私が持っている現在のリストは次のとおりです: .vhd .v .qpf .qsf .bsf