如何使用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>";
?>
答案 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 / 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;让所有工作。