2

約 1 か月前にセットアップした SVN リポジトリがあり、いくつかの苦労の後、開発サーバー上の Web サイトの作業コピーを更新するポストコミット フックが機能しました。数日間は問題なく動作していましたが、昨日、突然停止しました。

ネットワーク上のサーバーから VisualSVN サーバーを実行しています。私の知る限り、Web サーバーまたは VisualSVN サーバーをホストしているサーバーは何も変わっていません。過去数日間、VisualSVN サーバーのイベント ビューアーにイベントが表示されないため、エラーがあるかどうかを確認できず、SVN に固有のログ ファイルが見つかりません。「svn log」を実行すると、コミット以外は何も表示されません。エラーがあった場合にエラーが表示されるかどうかはわかりません。

実行中のスクリプトのスクラブ コピーを次に示します。

@ECHO OFF

setlocal enableDelayedExpansion

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

IF %ERRORLEVEL% EQU 0 (
    FOR /F "tokens=2" %%a IN ('svnlook changed %1 -r %2') DO (
    SET NEWA=%%a 
    SET "NEWB=!NEWA:trunk/=!"
    svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass>) 
)

endlocal

また、サーバー上のロックをチェックしましたが、何も見つからず、DEV サーバーでも作業コピーのクリーンアップを実行しましたが、すべて役に立ちませんでした。また、別のワークステーションからの更新を試みましたが、それが私のローカル マシンであるかどうかを確認するためであり、それでも適切に実行されませんでした。最後に、コマンドラインからスクリプトを実行しようとしましたが、実行され、作業コピーが正常に更新されました。実際には、サーバーがそれを実行していないように見えます。

この問題をデバッグするためのヘルプは大歓迎です。

更新: いくつかのデバッグ戦略を見つけた後、次のようにコマンドを含めることで、フックが実際に実行されていることを確認できました。

echo hook ran at %date% %time% >> debug.txt

予想どおり、これによりコミットがログに記録されました。また、フックが正しいトランク/ブランチをキャッチしていることを確認するために、同様のデバッグ コードも含めました。それがしたすべて。次に、サーバーの応答をログに記録するために、更新コードを次のように変更しました。

svn update \\<server-name>\<share>\dev\<working-copy-directory>\!NEWB! --username <svnuser> --password <svnpass> >> debug.txt)

これは何も返しません。私はこれについて完全に途方に暮れています。

更新 2: この問題をテストしていたときは、以前はこれを取得できませんでしたが、コマンドを単独で実行すると...

svn update \\<server>\<share>\dev\<working-copy>\ScriptContent\test.cfm --username <svnuser> --password

「svn: E020024: Error resolving case of」 を返し、指定したパスを吐き出します。

私はこの問題のいくつかの原因をグーグルで検索しようとしましたが、私が見つけた唯一のことは、バックスラッシュをスラッシュに切り替えることを示唆していますが、まったく同じエラーを返しますが、スラッシュがバックスラッシュに戻っています.

更新 3: エラーがネットワーク サービスとして実行されているサーバーに関連しており、UNC パスを介して作業コピーにアクセスしようとしているかどうかを確認するために、サービスを自分の名前で実行するように変更し、ネットワーク ドライブをマッピングして、スクリプト内のこのマップされたドライブ。このテストではエラーは発生しませんでしたが、更新は実行されませんでした。

また、考えれば考えるほど、上記の UPDATE 2 でコマンド ラインから取得したエラーは、スクリプトの実行時に発生しているものではない可能性があります。これは、クライアント側 (TortoiseSVN によって実行される) のコミット画面が示すように私にエラー。エラーは表示されません。

だから、これは私が知っていることです。

  1. スクリプトは数日間正常に機能しました
  2. スクリプトが週末にかけて突然機能しなくなった
  3. 作業コピーをホストしているサーバーまたはリポジトリを実行しているサーバーに変更は加えられていません
  4. フックはエラーを生成していません (エラーは TortoiseSVN コミット画面に表示されます)。
  5. svn update コマンドが実行されていません。

私は完全に途方に暮れています。

4

2 に答える 2

0

あなたがしたことはかなり危険です!サービス アカウントを管理者グループに追加しないでください。

私が今見る限り、根本的な原因は共有上の作業コピーへの不十分なアクセスでした

VisualSVN サーバーのサービス アカウントに共有へのアクセスを提供する必要があります。(NTFS および共有アクセス許可)。デフォルトでは、VisualSVN Server のサービスは「Network Service」アカウントで実行されます。このアカウントは、ネットワーク上で COMPUTER アカウントとして識別されます。そのため、COMPUTER アカウントに、作業コピーが配置されている共有へのアクセスを提供する必要があります。サーバーを専用アカウントで実行する場合は、記事http://www.visualsvn.com/support/topic/00024/を必ずお読みください。

于 2013-11-07T16:40:54.673 に答える