web-dev-qa-db-ja.com

PHP)を介してgitコマンドを実行する

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>";
?>
14
rjv

それは間違いなく可能です。私は自分のプロジェクトの1つにそれを実装しました。ただし、権限には注意する必要があります。

Linuxでは、通常、execコマンドはwww-dataユーザーを使用して実行されます。したがって、www-dataが作業ディレクトリで読み書きできるようにする必要があります。

それを行うための迅速で汚い方法の1つは:chmod o+rw -R git_directory

7
Oli

別の解決策があります。それは、次のような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
Tim Hallman

私はここで2つの問題に対する非常に簡単な解決策を見つけました

1)パスワードを使用せずにセキュリティで保護されたリモートからGitプル

  • ssh-keygenを使用して、sshキーペアを作成します
  • 公開鍵をurgitリモートホストにアップロードする
  • 〜/ .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");
    
1
Raaghu

最初にビットバケットサーバーインスタンスに対してテストを実行して、画面にエラーメッセージを出力します。

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」を使用する必要はありませんでした。

0
webcoder.eu