2

ブランチのルート以外にsvn mergeinfo プロパティを作成することは避けたいと思います。トランクブランチとその他のブランチがあります。

svn トリガーについてまったく知らないと仮定すると、ブランチのルート以外への mergeinfo プロパティの追加を防ぐ pre-commit フックを設定するには、どのような手順に従う必要がありますか?

トランクはリポジトリのベース「/trunk」にあり、すべてのブランチは「/branches/foo」にあります。

4

2 に答える 2

3

基本的に、SVN pre-commitフックを定義する必要があります。ただし、最初に、一般的なフックについて読んでください。

pre-commit.tmpl ファイルを にコピーすることから始めてpre-commit、そこにロジックを実装することをお勧めします。

次のような行について、現在実行中のトランザクションの差分を調べたいと思うでしょう: 追加: svn:mergeinfo

これが追加されたファイルに関する情報は別の行にあるため、grep よりも複雑な処理ツール (単純な perl スクリプトなど) が必要になる場合があります。

トランザクションに不要なプロパティが追加されていると判断した場合は、コミットをブロックできます。または、特に大胆な場合は、トランザクションを変更して続行することもできます。

于 2010-01-05T09:42:29.303 に答える
1

以下はうまくいくはずです。あなたのレポジトリはすでにトランクに svn:mergeinfo を持っているので、誰にも二度と追加されたくないでしょう。

ところで、私たちの実際のフックは、すべてのコミットにログ メッセージが付随することを保証し、リポジトリ ブラウザーを介して重要な最上位ディレクトリの一部が削除されるのを防ぎます。

@echo off

set logfile=%TEMP%\%2.txt

"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile%

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==UU goto checkmergetracking
)

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==_U goto checkmergetracking
)

del %logfile%
exit 0

:checkmergetracking
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile%
find "Added: svn:mergeinfo" %logfile%
if ERRORLEVEL 1 goto nomergeinfo

del %logfile%
echo "Addition of Merge Info Not Allowed" >&2
exit 1

:nomergeinfo
del %logfile%
exit 0
于 2010-10-15T17:18:12.843 に答える