4

私はこれにしばらく取り組んできましたが、解決策が見つかりません(もしあれば)。

質問: HTML Web フォーム経由でリクエストを行う方法はありますか?svn update

複数の Web ベースの SVN クライアント (独自のビルドを含む) をテストしましたが、それらはすべて更新を行う可能性がありません。

これは PHP が使用するユーザー権限の問題であることは理解していますが、システム上のすべてのファイルを777(仮想マシンで試してみた) に設定しても、それをアーカイブする方法はありません。

誰でもこれについて経験がありますか?

ありがとうございます。

また、すべてのディレクトリを調べて、所有者をEveryoneフルアクセスに設定しました。今、許可の問題はあり得ません...と思います。

最終編集: スクリプト ファイルが svn ディレクトリのルート ディレクトリにない場合、SVN を実行できないようです。最終的なコードは次のようになります: http://codepad.org/Kb2K8e6m

4

3 に答える 3

4

次の関数は、多かれ少なかれそれを行う必要があります。また、次のように出力されます。

  1. シェルで実行している正確なコマンド
  2. デバッグもできるように、コマンドの出力 (エラーを含む)。

function updatesvn() {

    if ( isset($_POST) ) {

        //Get svn username and password from request parameters

        $username = <your_svn_username>;
        $password = <your_svn_password>;

        //Get version number to move to
        $values = $_POST;
        $version = $values['revision'];

        //validate version number

        //Path where you have checked out your project
        $rpath = '/var/www/myproj';

        //Command to svn update
        $cmd = "cd $rpath; svn cleanup; svn --non-interactive --username $username --password $password update -r $version 2>&1";

        echo $cmd;
        $out = shell_exec($cmd);

        echo $out;
    }
}

編集: このコードのセキュリティの抜け穴に注意してください。ここでは簡略化しました。このポイントに到達したAdminユーザーが Web アプリケーションのユーザーとして事前認証されるアプリケーションの 1 つで、これを使用していました。さらに、このコードは MVC フレームワークで実行され、コントローラーでアクションを実行する前に入力の検証が中央の場所で行われました。

于 2012-08-01T08:00:55.130 に答える
1

PECL svn 拡張 (またはexecとコマンドライン svn - 実際には大きな違いはありません) からsvn_update()を使用できます。

権限の問題に対して私が好む解決策は、002更新するすべてのユーザー ( www-dataWeb サーバーのユーザーを含む) に umask を設定し、それらを共通のphpuserグループに入れ、そのグループを作業コピーのルート ディレクトリに設定することです ( chgrp phpuser <rootdir>-チェックアウトのに!)、グループ書き込み可能 ( ) であることを確認しchmod g+rwx <rootdir>、setgid ( chmod g+s <rootdir>) に設定しますchmod -R 777 <rootdir>

于 2012-08-03T13:03:18.303 に答える
0

継続的インテグレーション サーバーを構築していますか? Joe Bloggs が自分のローカル リポジトリを更新できるようにしたいのはなぜですか?

シェルで「svn update」を実行するには、バックエンドにコードが必要です。

一般に、Web ベースの SVN クライアントは SVN リポジトリに直接フィードし、デフォルトで最新の状態になります。以前のバージョンや差分を表示することもできます。

于 2012-08-01T07:21:46.540 に答える