1

このコードを実行しようとしましたが、何もしません。しかし、「git show --summary」を shell_exec に入れると、git ステータスが返されます。

if($_GET['action']=='add'){
    $output = shell_exec('git add *');
    echo "Add:<pre>$output</pre>";
}
if($_GET['action']=='commit'){
    $output = shell_exec('git commit -m "'.$_POST["txt"].'" ');
    echo "Commit:<pre>$output</pre>";

}

php から git をコミットすることは可能ですか?

4

2 に答える 2

3

shell_execNULLコマンドが失敗した場合に戻ります。これはほぼ確実に起こっています...問題は理由です。を使用して見つけることはできませんshell_exec

代わりにexecを使用することをお勧めします。そうすれば、少なくとも呼び出しのステータスと何が問題になっているのかを把握できます。

http://www.php.net/manual/en/function.exec.php

これにより、システムの内部OS呼び出しの戻り値が入力されるいくつかの変数を設定できます。

$shell_output = array();
$status = NULL;

if($_GET['action']=='add'){
    $output = shell_exec('git add *',$shell_output,$status);
    print_r($shell_output)
    print_r($status);
}
if($_GET['action']=='commit'){
    $output = shell_exec('git commit -m "'.$_POST["txt"].'" ',$shell_output,$status);
    print_r($shell_output)
    print_r($status);
}

私の推測では、権限に問題があります。commitin gitには、そのディレクトリの「.git」フォルダへの書き込み権限が必要です。

また、適切なディレクトリで操作していることを確認してください。cdPHPインスタンスを実行しているapacheユーザーは、リポジトリがある適切なフォルダーに既に移動されている場合とされていない場合があります。cd path_to_repo && git commit最初に正しいディレクトリに移動するには、コマンドにを追加する必要がある場合があります。まず、絶対パスを使用してこれをデバッグします。

アドバイスも一言...PHPベースのgitクライアントをセットアップしようとしている場合は、大量の失敗ケースを処理する必要があります。そのうちの1つは、このコードですぐにわかります...新しいファイルが変更されていないときにコミットします。これらのケースに関心を持つ必要がある場合は、コミュニティソリューションを検討することをお勧めします。

httpをサポートする優れたphpgitクライアントはありますか?

于 2012-07-19T15:50:59.290 に答える
0

git commit に名前と電子メールを追加することをお勧めします。

$output = shell_exec('git -c user.name="www-data" -c user.email="no-replay@example.org" commit -m "'.$_POST["txt"].'" ', $shell_output, $status);

エラーはサーバー エラー ファイルで確認できます。例: /var/log/apache2/error.log

cat /var/log/apache2/error.log
于 2016-08-25T17:38:46.477 に答える