1

SVN リポジトリのユーザーが特定のファイルへの変更をチェックインできないようにしたいと考えています。これは、次の pre-commit フック スクリプトを使用して行いました。ただし、制限されたファイルの数が増えており、変更をコミットするのが非常に遅くなっています。より効率的なコーディング方法があるかどうか疑問に思っていました。チェンジリストで遊んだことがありますが、うまくいきません。

前もって感謝します

pre-commit フック スクリプト (Windows ベースの SVN リポジトリ):

setlocal
:: Inputs from Subversion
set REPOS=%1%
set TXN=%2%

:: Checks if one of the reference files
Rem Check if the commit contains reference files
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part1.txt" > nul
if %errorlevel%==0 (goto RefPart)
svnlook changed %REPOS% -t %TXN% | findstr /r /i "^.*referenceparts/part2.txt" > nul
if %errorlevel%==0 (goto RefPart)
......
.....
etc etc

exit 0

:: Blocks the commit if part are reference
: RefPart
echo. 1>&2
echo ---------------------------------------------------------------------- 1>&2
echo Your commit has been cancelled because you are trying to change a      1>&2
echo part for a reference turbine! Please make a copy of this part and      1>&2
echo save it under a different name.                                        1>&2
echo ---------------------------------------------------------------------- 1>&2
echo. 1>&2
exit 1
4

2 に答える 2

3

「参照タービン」を別のsvnリポジトリに分割し、ライブラリとしてビルドして、ライブラリとして配布します。次に、「参照タービン」ライブラリへのアクセスを必要な人にのみ許可します。

変更を許可されていない人が何百回も作成する変更不可能なソースコードをチェックするのは、電気と時間の無駄です。

デバッグセッション中に参照タービンソースをステップスルーする必要があることが懸念される場合は、ライブラリの2つのバージョンを配布することを提案します。1つはデバッグシンボルと対応するソースコードがあり、もう1つはデバッグシンボルがありません。ほとんどのIDEには、デバッグセッションに付随する人間が読めるテキストを提供するための「ソースコード」パッケージをロードするという概念があります。

于 2012-04-27T15:54:25.000 に答える
0

Windows cmd スクリプトではなく perl を使用するようにこれを書き直します。Perl はより優れた正規表現サポートを備えているため、スクリプトを使用してすべての参照ファイルを調べるよりも少し高速にすることができます。代わりに、ディレクトリとパターンでフィルター処理できます。

Strawberry perl は簡単​​に実行できます。ダウンロードして、exe と perl dll をパス上のディレクトリに配置すれば、作業は完了です。

注意してください、私はまた、Windowsスクリプトでfindstrを使用して、高速なファイル拡張子のリストをフィルタリングしていました。svnlook の変更結果をファイルに書き込み (ファイル名に revnum を追加して後で削除することを忘れないでください)、それを /G オプション付きの findstr コマンドへの入力として使用しました。まずそれを試してください。

于 2012-04-27T15:59:44.203 に答える