1

私はsvn apacheモジュールを使用してWebサーバー上のリポジトリを管理し、tartoise svnを使用してそれとやり取りしています。

何かをコミットするたびに、サーバー上の作業コピーの更新を自動化して、サーバー上で手動でリモート デスクトップを実行し、更新を手動で実行する必要がないようにしたいと考えていました。

そのために、レポに単純なコミット後のフックを作成しました

echo %username% >> C:\debug.txt
svn update F:\wampserver64\www\netcity\maintenance\ >> C:\debug.txt

問題は、レポへの変更をコミットできなくなったことです。コミットが 100% に達した後にハングアップし、[OK] ボタンがグレー表示されます。その後、コミットされたファイルはクライアントとサーバーの両方でロックされた状態になり、両方のステーションで手動でクリーンアップと更新を行う必要があります。echo %username% はデバッグ用です。権限の問題である可能性があると思われるので、ユーザー名 svn runs as を eched しました。これは出力です:

XIBM$ 
Updating 'F:\wampserver64\www\netcity\maintenance':

XIBM$ はユーザー名でさえありません。サーバーの名前です。手動で実行すると、.bat フックは問題なく実行され、合理的な出力が返されます。

liviu.gelea 
Updating 'F:\wampserver64\www\netcity\maintenance':
At revision 19.

XIBM/users、認証されたユーザー、管理者、ゲスト、およびサーバー上を移動する事実上すべてに完全なアクセス許可を設定しようとしましたが、うまくいきませんでした。そのため、どんな助けも非常に高く評価されています。

4

2 に答える 2

2

何度も言ったように、コミット後のスクリプトでこれを行わないでください。コミット後のスクリプトが実行されている間、ユーザーはロックアウトされ、そのコミットが完了するのを待っています。この間、彼らは自分のコンピューター、Subversion、そしてあなたに腹を立てます。

代わりに、 Jenkinsなどの継続的インテグレーション エンジンを使用してこれを処理してください。Jenkins はセットアップが簡単で、ポストコミット スクリプトの手間がかかりません。

さらに、Jenkins は、すべてのコミットの完全な履歴と、サーバーへの更新に何が起こったのかを保持でき、問題が発生した場合はメールで通知できます。さらに良いことに、Promote Buildプラグインのようなものを使用して、実際にサーバーにデプロイするコミットを選択できます。

于 2013-03-18T19:47:12.990 に答える
1

svn はどのアカウントで実行されていますか? 私はいくつかのことをお勧めします

  1. 更新で を指定します--username。svn が実行されているローカル サービス アカウントをリポジトリにアクセスできるように追加したくない可能性があります。
  2. を追加し--accept theirs-fullて、競合が発生した場合に常にサーバー コピーを取得します。
  3. ダイヤルインすると、おそらく--quiet同様に必要になります
于 2013-03-18T15:07:43.387 に答える