2

Windows サーバーで VisualSVN サーバーを介して Subvbersion を実行しており、リポジトリをトランクと 3 つのブランチでセットアップしています。ブランチは、dev、test、prod です。コミットの実行後に作業コピーを更新するコミット後のフックを実行したいのですが、コミットが dev ブランチで行われた場合にのみ、その作業コピーを更新したいのです。

これは私が今持っているコードです...

@setlocal enableextensions enabledelayedexpansion
@echo off
SET str1=%1
IF NOT x%str1:dev=%==x%str1%  (
pushd <path to working copy>
svn update --username <svn_username> --password <svn_password>
echo update complete
)
endlocal

条件を削除すると、すべてのコミットで更新が実行されるため、条件内のコードが機能することがわかります。また、条件付きを通常のバッチ ファイルとしてテストし、「branches/dev」や「branches/test」などの文字列を送信して、これらのテストで適切に動作しました。ただし、これをコミット後のフック スクリプトとして保存すると、コミットが dev ブランチにあるかどうかに関係なく、実行されません。

編集:この質問は既に回答されているというフィードバックに基づいて、他の質問で推奨されているアプローチを試しましたが、そのアプローチも機能していません。そこで提案されたコードの私のバージョンは次のとおりです。

REM The command checks whether the committed revision changes any data under '/dev'
"%VISUALSVN_SERVER%bin\svnlook.exe" dirs-changed %1 --revision %2 | findstr /b "[Dd]ev"

REM If 'findstr' returns error code 0, it means that the commit involves the '/dev' directory.
REM So if the the returned code is 0 the command runs external batch 'post-commit-actions.bat'
If %ERRORLEVEL% EQU 0 call %~dp0post-commit-actions.bat %*

これを機能させるために、svn update を実行するために post-commit-actions.bat という名前のフック ディレクトリにファイルを作成しました。ただし、これはコミット後の実行ではありません。関連する情報を省略している場合は、お知らせください。

編集:みんなの助けに感謝します。ここでの入力により、実用的なソリューションをまとめることができました。同様の問題に対する答えを探している人にとっては、次のように機能しました。

svnlook dirs-changed %1 -r %2 | findstr /b /i "branches/dev"

IF %ERRORLEVEL% EQU 0 (
    pushd <path-to-working-copy>
    svn update --username <repo-username> --password <repo-password>
)
4

2 に答える 2

1

投稿されたように、ここに問題の解決策がありました。このコードセットは、意図した目的のために機能しました:

svnlook dirs-changed %1 -r %2 | findstr /b /i "branches/dev"

IF %ERRORLEVEL% EQU 0 (
    pushd <path-to-working-copy>
    svn update --username <repo-username> --password <repo-password>
)

このソリューションを導き出すためのすべての助けに感謝します

于 2013-10-21T13:28:46.980 に答える