1

1 つのリポジトリと 1 つの作業コピーがあります。

リポジトリの post-commit フックで、SVN 更新のコマンドを実行する 1 つのファイルを実行するコマンドを作成しました。

私のリポジトリは/var/www/svnrepos/help/

私の作業コピーは/var/www/autopostcommit/help/

コミット後のファイルは/var/www/svnrepos/help/hooks/

ポストコミットで、次のコマンドを書きました

    sudo /usr/local/bin/svn-post-commit-update 1>&2

svn-post-commit-update/usr/local/bin にあるファイルに、次のコマンドを書きました。

    cd /var/www/autopostcommit/help/
    svn update --non-interactive --trust-server-cert \
               --username satish@108.166.92.199 --password mypassword

パスワードなしなど、更新用の他のバージョンのコマンドも試しました。

SVNコミットで次のエラーが表示されます

   Error: sudo: no tty present and no askpass program specified

どうすればこのエラーを回避できますか?

4

3 に答える 3

1

パスワードを要求するように構成sudoしましたが、これはコミット後のフックでは実行できません。修正は簡単なようsudoです。ケースでパスワードを要求されないように再構成します。

とにかく、慎重な人々はコミット後のフックを実行したくありませんroot

于 2012-10-29T16:39:21.977 に答える
0

正しいユーザーとしてスクリプトを実行するには、別の方法を見つける必要があります。たぶん、スクリプトを setuid にすることはあなたのためのオプションですか? http://en.wikipedia.org/wiki/Setuid

その後、sudo を削除できます。

于 2012-10-29T13:44:54.520 に答える
0

本当の質問: あなたは何をしようとしていますか?

post-commit フックを実行すると、コミットを行っているユーザーはコミットが完了するまで待機する必要があります。リモートの作業ディレクトリを更新しようとしている場合、コミットを行うたびに、コンピューターを元に戻すまでに 10 ~ 20 秒の親指のいじりが必要になるため、ユーザーは非常に動揺します。

フックとしてやらないほうがいいこともあります。代わりに、更新がないかどうかリポジトリを毎分チェックするだけの crontab エントリを使用し、更新がある場合は必要なことを何でも実行します。

あなたはウェブページを更新していると思います。私は少し提案します:使用しないでくださいsvn update。代わりsvn exportに、すべての.svnファイルを削除する which を使用します (バージョン 1.7 では、それほど悪くはないと思います)。私がお勧めするのは、2 つのディレクトリ戦略です。

/var/www/autopostcommit/help/直接更新しません。代わりに、svn update別のディレクトリに移動し、更新が完了したら、 を別の/var/www/autopostcommit/help場所に移動し、エクスポートしたディレクトリを に移動します/var/www/autopostcommit/help/。このように、/var/www/autopostcommit/helpディレクトリは 2 つのリビジョンの中間の状態ではありません。

于 2012-10-29T20:08:21.900 に答える