3

Bitbucket にあるプロジェクトのリポジトリがあります。リポジトリをローカル PC にクローンして作業します。次に Bitbucket にプッシュし、パテでサーバーに接続して呼び出します

git pull

そして変更をライブサーバーにプルします。サーバーからプッシュすることはありません。このようにすべてが正常に機能しますが、プルするためにパテを介してサーバーに接続するのはあまり便利ではありません。次のような小さなスクリプト「git_pull_script.sh」を作成しました。

git reset --hard
git clean -f
git pull
chown -f -R tdadmin *
...

そこには何も問題はありません。サーバーでスクリプトを実行すると

bash /home/tdadmin/git_pull_script.sh

すべてがうまくいき、私が必要とすることをします。明確にするために、git_pull_script は所有者とグループ tdadmin を設定しています。

簡単にするために、この小さな php スクリプトを作成しました。

<?php
exec('bash /home/tdadmin/git_pull_script.sh', $output);
print_r($output);

私は仕事をするべきだと思います。したがって、単純にhttp://tddomain.com/pullscript.phpを呼び出すことができます。

残念ながら、それはうまくいきません。私は何を間違えましたか?

4

2 に答える 2

1

問題は、ファイル システムの権限にありました。すべての権限を変更しても、「.git」リポジトリ フォルダーはルート所有者とグループのままでした。それを変更すると、すべてが正常に機能します

于 2012-09-17T10:02:18.623 に答える
0

おそらくbashが見つからないのでしょうか?これを絞り込むためのより簡単なテストスクリプトを次に示します

<?php
$output=array();
exec("bash --version",$output);
echo "bash:\n";print_r($output);
$output=array();
exec("/bin/bash --version",$output);
echo "/bin/bash:\n";print_r($output);
?>

別のアイデア: ホストが chroot などを使用している場合、/home/tdadmin が見つからない可能性がありますか? スクリプトを試して、次のことを確認してください。

<?php
echo file_exists('/home/tdadmin/git_pull_script.sh')?"Yes":"no";
?>
于 2012-09-03T04:48:49.540 に答える