git add .
やgit commit -m
などのgitコマンドをphpを使用して実行するにはどうすればよいですか?
これは、学術プロジェクトを維持するための集中リポジトリ機能を作成するプロジェクト用です。
exec()が機能していないようです。
<?php
$path = "/var/www/repos/$_POST[project]";
$a='';
chdir($path);
exec("git add .");
exec("git commit -m'message'");
echo "<h3 align = center> Succesfully commited all the files.</h3>";
?>
それは間違いなく可能です。私は自分のプロジェクトの1つにそれを実装しました。ただし、権限には注意する必要があります。
Linuxでは、通常、exec
コマンドはwww-data
ユーザーを使用して実行されます。したがって、www-data
が作業ディレクトリで読み書きできるようにする必要があります。
それを行うための迅速で汚い方法の1つは:chmod o+rw -R git_directory
別の解決策があります。それは、次のようなphpバックティックを使用することです。
$message = `git log -1 --pretty=%B`; // get commit message
または
$deploy_tag = `git describe --tags`; // get commit tags
または
$hash = `git log -1 --pretty=%h`; // get the hash
私はここで2つの問題に対する非常に簡単な解決策を見つけました
1)パスワードを使用せずにセキュリティで保護されたリモートからGitプル
ssh-keygen
を使用して、sshキーペアを作成します〜/ .ssh/configファイルを構成して、この生成された秘密鍵をgitで使用するように指示を追加します
Host gitlab.com
HostName gitlab.com
IdentityFile ~/.ssh/private_key
User git
これで、すべてのgitコマンドがこのprivate_keyを使用してリモートに接続します。
2)www-dataユーザーからgitコマンドを実行
www-dataユーザーがgitコマンドを実行できるように、sudoersファイルを更新し、次のコマンドの実行を編集できる
$ Sudo visudo
ユーザー設定の下に次の行を追加します
www-data ALL=(raaghu) NOPASSWD: /usr/bin/git
つまり、ALL
として機能するraaghu
端末のwww-data
ユーザーは、NOPASSWD
を使用して/usr/bin/git
を実行できます。
注意:sudoersファイルを理解していない場合は、この方法を試さないでください。理解していないと、セキュリティホールが発生する可能性があります
Gitコマンドを実行するためのgit-pull.shファイルを作成します
cd /var/www/my-repo
Sudo -u raaghu git pull Origin
このgit-pull.shファイルをphpから実行します
exec("/bin/bash /var/www/git-pull.sh");
最初にビットバケットサーバーインスタンスに対してテストを実行して、画面にエラーメッセージを出力します。
echo Shell_exec("cd /website/root/htdocs && git status 2>&1");
これにより、gitコマンドが見つからないというエラーがスローされたため、gitのバイナリへのフルパスを指定する必要がありました。
'which git'
返される(さらにYOU_FULL_GIT_BINARY_PATH_HEREと呼ばれる):
/usr/local/git/bin/git
フルパス(例: '/ usr/local/git/bin/git status'は、gitコマンドを適切に実行するようになりました。
これは、.git/configgitユーザーのセットに対して「gitpull」コマンドを使用するために必要なgitパスワードを克服しません。 gitリポジトリで以下のコマンドを実行します:
git config credential.helper store
[コマンド] [1]はパスワードの入力を求め、暗号化せずにローカルに保存できるようにします(たとえば、/ root/.git-credentials内のファイルシステムによってのみ保護されます)。これにより、パスワードの入力を求めずに「gitpull」を実行できます。または(おそらくより良い)、apachedなどのWebサーバー用のsshキーを生成し、それらをbitbucketユーザー専用アカウントまたはリポジトリキーに追加することです。
すべてのフォルダはApacheユーザーが所有するように設定されています(Centos 6.8の他のリリースはwww-data:www-dataなどである可能性があります)。
chown -R Apache:apache YOUR_WEB_FODLER
すべてを機能させるために、ダーティトリック「chmod o + rw-R」を使用する必要はありませんでした。