2

次のようにレイアウトされた Subversion リポジトリがあります。

Repo
    ProjectA
        trunk
        branches
        tags
    ProjectB
        trunk
        branches
        tags

1 つのプロジェクトにのみ適用されるポストコミット フック スクリプトを作成しようとしていますが、それらがリポジトリのルートに格納されていることを知りました。

私が取得するパラメータは、リポジトリ パスとリビジョン番号の 2 つだけです。特定のプロジェクトに対してのみこのスクリプトを実行する方法はありますか?

ありがとう、

解決策: 究極の解決策は次のようになりました。

#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
    echo "do stuff"
fi
4

3 に答える 3

3

はい、svnlookを使用して、コミットされたリビジョンで変更されたファイルのリストを取得し、適切な正規表現を使用して名前を grep して、コミット後のパスにプロジェクト名が正しい場所に含まれているかどうかを判断します。コードが実行される場合は、それ以外の場合は、スクリプトの最後にジャンプして 0 を返します。

于 2011-06-18T12:09:23.693 に答える
1

Windows 2012 サーバー上の VisualSVN に関するこの質問への回答を探してここに来ました。さらに情報を収集した後、開発サーバーに PHP スクリプトをロードして特定のプロジェクトをそのサーバーにデプロイする、VisualSVN の Windows バッチ ファイルのポストコミット フックに対して思いついたソリューションを次に示します。フック コマンドは 1 行です。

svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem

rem は、フックが他のプロジェクトへのコミットに失敗したと Tortoise によって報告されるのを防ぐための「no-op」として必要でした。プロジェクトを Linux サーバーにデプロイする checkout_on_commit.php の内容は次のとおりです。

<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>
于 2015-06-23T21:51:58.417 に答える
0

Subversion には「プロジェクト」のような定義は存在しません...定義は自分で行う必要があります。これは、Subversion が「プロジェクト」ベースではなく、リポジトリの変更時にそれを実行することを意味します...

リポジトリやリビジョン番号のように取得した情報を使用して、必要な情報を抽出できます...svnlook を使用して必要な情報を抽出するだけで、適切なパラメーターを指定して svnlook を呼び出すことができます。

于 2011-06-18T12:08:46.510 に答える