2

作業コピーを更新するためにコミット後のフックを実装しようとしています。ポストコミットフックが実行されていることがわかる限り(確認するためにファイルに何かを書きました)、更新コマンドは実行されませんでした。

最初はやった

cd /home/user/working/copy
svn update

しかし、それはうまくいきませんでした。それから、svn へのフル パスを指定する必要があることを読みました。

cd /home/user/working/copy
/usr/bin/svn update

それでもうまくいきませんでした。

パーミッションを 777 に変更し、空の環境でスクリプトを実行しました...そして動作します。

4

8 に答える 8

1

作業コピーはユーザーのホーム ディレクトリにあります。SVN サーバーが別のユーザー (たとえば "svnserver") として実行されている場合、コミット後のフック スクリプトは "svnserver" として実行されます。ファイルのアクセス許可設定で許可されていない限り、あるユーザーが別のユーザーのファイルを変更したり読み取ったりできないのは理にかなっています。

複数のユーザー間で作業コピーを共有しないでください。本当に必要な場合は、各ユーザーに読み取り/書き込み許可を与えるだけでは十分ではありません。また、他のユーザーがアクセスできないファイルを作成するユーザーがいないことを確認する必要があります。これを実現するには、適切なumaskを設定する svn コマンドのラッパー スクリプトを作成するか、関係するすべてのユーザーがsudoを介して 1 人の特定のユーザーとして機能できるようにする必要があります。

于 2009-03-30T11:17:39.143 に答える
1

自分で作業コピーを使用しない場合は、フックスクリプトを実行するユーザーに作業コピーをchownできます

于 2009-03-30T11:28:57.463 に答える
1

私も同じ問題に遭遇し、(公式FAQのものを含む)すべての方法を試しましたが、うまくいきませんでした

もちろん、必要に応じて毎回 chmod -R と chown -R www-data:www-data も実行します。

ほとんどの場合、更新コマンドが実行され、アクセス許可エラーはなく、他のエラー メッセージも表示されませんが、作業コピーは更新されません。

最後に、以下の手順は私にとってうまくいきます:

コミット後のフック実行で

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/] # heading tail slash
/usr/bin/svn checkout [source path]

一度、コミット後のフックを次のように更新します。

export LC_CTYPE=en_US.UTF-8
cd [/working-copy-folder/]
/usr/bin/svn update

今はうまくいっていますが、疲れすぎて根本的な原因を見つけることができません。「svn update」だけに丸一日費やした

于 2015-03-11T02:56:55.757 に答える
0

このスクリプトは、必要なファイルのみを更新するため、優れています... http://vidax.net/blog/en/2010/03/subversion-post-commit-hook/

于 2010-04-20T14:16:20.573 に答える
0

wcoenen の答えは間違いなく正しい方向に進んでいます。この問題を回避する最も簡単な方法は、SVN ユーザーをグループに追加することです。post-commit フックがユーザー someUser とグループ someUser によって所有されているとしましょう。SVN サーバーを someUser グループに追加し、ポストコミット フック スクリプトを chmod してグループ実行可能にすると、問題が解決します。

それが理にかなっていることを願っています:P

于 2009-04-01T23:50:45.573 に答える
0

私が得た最終的な解決策は、私が得たいくつかの答えを組み合わせることでした。私のサーバーでは apache が nobody として実行されていたので、作業コピーを所有者を nobody にし、グループ UserName で作成し、それを 775 に chmod しました。この方法でフックが機能し、ユーザー名にも FTP でファイルを更新する権限が与えられます。

于 2009-03-31T13:11:25.960 に答える
-3

コミットが表示される前に、ポストコミットが実際に実行されると思います。奇妙なことに、リビジョン 30 をコミットしたとします。ポストコミットでは、まだ 29 が最新のリビジョンであると見なされます。post-commit スクリプトが完了すると、30 がヘッド リビジョンとして表示されます。

私は間違っているかもしれません。これは厳密には記憶によるものです。少なくとも試してみる何か。

于 2009-03-30T12:36:04.273 に答える