通过PHP执行git命令

时间:2011-12-19 14:09:46

标签: php git exec

如何使用php执行像git add .git commit -m这样的git命令?

这是一个项目,它创建了一个集中的存储库设施来维护学术项目。

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

4 个答案:

答案 0 :(得分:7)

绝对可能。我在我的一个项目中实现了它。 但是你应该注意权限。

在Linux上,通常使用exec用户执行www-data命令。 因此,您应该允许www-data在您的工作目录上书写和阅读。

一种快速而肮脏的方法是:chmod o+rw -R git_directory

答案 1 :(得分:2)

还有另一个解决方案,就是简单地使用像这样的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)

我在这里找到了一个非常简单的解决方案来解决2个问题

1)Git从安全的遥控器中拉出而不使用密码

  • 使用ssh-keygen
  • 创建一个ssh密钥对
  • 将公钥上传到ur git remote host
  • 配置〜/ .ssh / config文件以添加指示以通过git使用此生成的私钥

    host gitlab.com
     HostName gitlab.com
     IdentityFile ~/.ssh/private_key
     User git
    

    现在所有git命令都将使用此private_key连接到远程

2)从www-data用户

运行git命令
  • 更新sudoers文件以允许www-data用户运行git命令,编辑运行以下命令

    $ sudo visudo
    

    在用户首选项下添加以下行

    www-data    ALL=(raaghu) NOPASSWD: /usr/bin/git
    

    意味着来自www-data终端的ALL用户raaghu可以使用/usr/bin/git

    运行NOPASSWD

    请注意:如果您不理解sudoers文件,请不要尝试此方法,否则可能会造成安全漏洞

  • 创建git-pull.sh文件以运行git命令

    cd /var/www/my-repo
    sudo -u raaghu git pull origin
    
  • 从php

    运行这个git-pull.sh文件
    exec("/bin/bash /var/www/git-pull.sh");
    

答案 3 :(得分:0)

我首先对我的bitbucket服务器实例运行测试,以在屏幕上输出任何错误消息:

echo shell_exec("cd /website/root/htdocs && git status 2>&1");

这引发了一个错误,它无法找到git命令因此必须提供git&#39;二进制文件的完整路径:

'which git'

返回(进一步称为YOU_FULL_GIT_BINARY_PATH_HERE):

/usr/local/git/bin/git

完整路径,例如&#39; / usr / local / git / bin / git status&#39;现在很好地运行git命令。

这并没有克服使用&#39; git pull&#39;所需的git密码。命令为.git / config git用户设置。在git repo中运行命令:

git config credential.helper store

[command] [1]将提示输入密码,并允许您以未加密的方式在本地存储密码(仅受文件系统保护,例如/root/.git-credentials)。这将允许运行&#39; git pull&#39;没有提示输入密码。或者(可能更好)是为您的Web服务器生成ssh密钥,例如apached,然后将它们添加到您的bitbucket用户专用帐户或repo密钥。

我的所有文件夹都设置为由apache用户拥有(Centos 6.8其他版本可能是www-data:www-data等。):

chown -R apache:apache YOUR_WEB_FODLER

我没有必要使用肮脏的技巧&ch; chmod o + rw -R&#39;让所有工作。